PR libstdc++/pr66689 - comp_ellint_3 and ellint_3 return garbage values
authorEdward Smith-Rowland <3dw4rd@verizon.net>
Sun, 19 Nov 2017 01:01:50 +0000 (01:01 +0000)
committerEdward Smith-Rowland <emsr@gcc.gnu.org>
Sun, 19 Nov 2017 01:01:50 +0000 (01:01 +0000)
2017-11-18  Edward Smith-Rowland  <3dw4rd@verizon.net>

PR libstdc++/pr66689 - comp_ellint_3 and ellint_3 return garbage values
* include/tr1/ell_integral.tcc: Correct the nu sign convention
in ellint_3 and comp_ellint_3.
* testsuite/tr1/5_numerical_facilities/special_functions/
06_comp_ellint_3/check_value.cc: Regen with correct values.
* testsuite/tr1/5_numerical_facilities/special_functions/
14_ellint_3/check_value.cc: Ditto.
* testsuite/special_functions/06_comp_ellint_3/check_value.cc: Ditto.
* testsuite/special_functions/13_ellint_3/check_value.cc: Ditto.
* testsuite/tr1/5_numerical_facilities/special_functions/
01_assoc_laguerre/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
02_assoc_legendre/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
03_beta/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
04_comp_ellint_1/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
05_comp_ellint_2/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
07_conf_hyperg/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
08_cyl_bessel_i/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
09_cyl_bessel_j/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
10_cyl_bessel_k/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
11_cyl_neumann/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
12_ellint_1/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
13_ellint_2/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
15_expint/check_value_neg.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
16_hermite/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
17_hyperg/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
18_laguerre/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
19_legendre/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
20_riemann_zeta/check_value_neg.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
21_sph_bessel/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
22_sph_legendre/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
23_sph_neumann/check_value.cc: Regen.
* testsuite/ext/special_functions/conf_hyperg/check_value.cc: Regen.
* testsuite/ext/special_functions/hyperg/check_value.cc: Regen.
* testsuite/special_functions/01_assoc_laguerre/check_value.cc: Regen.
* testsuite/special_functions/02_assoc_legendre/check_value.cc: Regen.
* testsuite/special_functions/03_beta/check_value.cc: Regen.
* testsuite/special_functions/04_comp_ellint_1/check_value.cc: Regen.
* testsuite/special_functions/05_comp_ellint_2/check_value.cc: Regen.
* testsuite/special_functions/07_cyl_bessel_i/check_value.cc: Regen.
* testsuite/special_functions/08_cyl_bessel_j/check_value.cc: Regen.
* testsuite/special_functions/09_cyl_bessel_k/check_value.cc: Regen.
  * testsuite/special_functions/10_cyl_neumann/check_value.cc: Regen.
* testsuite/special_functions/11_ellint_1/check_value.cc: Regen.
* testsuite/special_functions/12_ellint_2/check_value.cc: Regen.
* testsuite/special_functions/14_expint/check_value.cc: Regen.
* testsuite/special_functions/15_hermite/check_value.cc: Regen.
* testsuite/special_functions/16_laguerre/check_value.cc: Regen.
* testsuite/special_functions/17_legendre/check_value.cc: Regen.
* testsuite/special_functions/18_riemann_zeta/check_value.cc: Regen.
* testsuite/special_functions/19_sph_bessel/check_value.cc: Regen.
* testsuite/special_functions/20_sph_legendre/check_value.cc: Regen.
* testsuite/special_functions/21_sph_neumann/check_value.cc: Regen.
* testsuite/tr1/5_numerical_facilities/special_functions/
06_comp_ellint_3/pr66689.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
14_ellint_3/pr66689.cc: New.
* testsuite/special_functions/06_comp_ellint_3/pr66689.cc: New.
* testsuite/special_functions/13_ellint_3/pr66689.cc: New.

From-SVN: r254924

52 files changed:
libstdc++-v3/ChangeLog
libstdc++-v3/include/tr1/ell_integral.tcc
libstdc++-v3/testsuite/ext/special_functions/conf_hyperg/check_value.cc
libstdc++-v3/testsuite/ext/special_functions/hyperg/check_value.cc
libstdc++-v3/testsuite/special_functions/01_assoc_laguerre/check_value.cc
libstdc++-v3/testsuite/special_functions/02_assoc_legendre/check_value.cc
libstdc++-v3/testsuite/special_functions/03_beta/check_value.cc
libstdc++-v3/testsuite/special_functions/04_comp_ellint_1/check_value.cc
libstdc++-v3/testsuite/special_functions/05_comp_ellint_2/check_value.cc
libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/check_value.cc
libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/pr66689.cc [new file with mode: 0644]
libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/check_value.cc
libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_value.cc
libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/check_value.cc
libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_value.cc
libstdc++-v3/testsuite/special_functions/11_ellint_1/check_value.cc
libstdc++-v3/testsuite/special_functions/12_ellint_2/check_value.cc
libstdc++-v3/testsuite/special_functions/13_ellint_3/check_value.cc
libstdc++-v3/testsuite/special_functions/13_ellint_3/pr66689.cc [new file with mode: 0644]
libstdc++-v3/testsuite/special_functions/14_expint/check_value.cc
libstdc++-v3/testsuite/special_functions/15_hermite/check_value.cc
libstdc++-v3/testsuite/special_functions/16_laguerre/check_value.cc
libstdc++-v3/testsuite/special_functions/17_legendre/check_value.cc
libstdc++-v3/testsuite/special_functions/18_riemann_zeta/check_value.cc
libstdc++-v3/testsuite/special_functions/19_sph_bessel/check_value.cc
libstdc++-v3/testsuite/special_functions/20_sph_legendre/check_value.cc
libstdc++-v3/testsuite/special_functions/21_sph_neumann/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/03_beta/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/04_comp_ellint_1/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/05_comp_ellint_2/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/pr66689.cc [new file with mode: 0644]
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/pr66689.cc [new file with mode: 0644]
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/15_expint/check_value_neg.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/check_value_neg.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/21_sph_bessel/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/check_value.cc
libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/23_sph_neumann/check_value.cc

index 4c348f1..15936ac 100644 (file)
@@ -1,4 +1,85 @@
 2017-11-18  Edward Smith-Rowland  <3dw4rd@verizon.net>
+
+       PR libstdc++/pr66689 - comp_ellint_3 and ellint_3 return garbage values
+       * include/tr1/ell_integral.tcc: Correct the nu sign convention
+       in ellint_3 and comp_ellint_3.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       06_comp_ellint_3/check_value.cc: Regen with correct values.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       14_ellint_3/check_value.cc: Ditto.
+       * testsuite/special_functions/06_comp_ellint_3/check_value.cc: Ditto.
+       * testsuite/special_functions/13_ellint_3/check_value.cc: Ditto.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       01_assoc_laguerre/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       02_assoc_legendre/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       03_beta/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       04_comp_ellint_1/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       05_comp_ellint_2/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       07_conf_hyperg/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       08_cyl_bessel_i/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       09_cyl_bessel_j/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       10_cyl_bessel_k/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       11_cyl_neumann/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       12_ellint_1/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       13_ellint_2/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       15_expint/check_value_neg.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       16_hermite/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       17_hyperg/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       18_laguerre/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       19_legendre/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       20_riemann_zeta/check_value_neg.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       21_sph_bessel/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       22_sph_legendre/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       23_sph_neumann/check_value.cc: Regen.
+       * testsuite/ext/special_functions/conf_hyperg/check_value.cc: Regen.
+       * testsuite/ext/special_functions/hyperg/check_value.cc: Regen.
+       * testsuite/special_functions/01_assoc_laguerre/check_value.cc: Regen.
+       * testsuite/special_functions/02_assoc_legendre/check_value.cc: Regen.
+       * testsuite/special_functions/03_beta/check_value.cc: Regen.
+       * testsuite/special_functions/04_comp_ellint_1/check_value.cc: Regen.
+       * testsuite/special_functions/05_comp_ellint_2/check_value.cc: Regen.
+       * testsuite/special_functions/07_cyl_bessel_i/check_value.cc: Regen.
+       * testsuite/special_functions/08_cyl_bessel_j/check_value.cc: Regen.
+       * testsuite/special_functions/09_cyl_bessel_k/check_value.cc: Regen.
+       * testsuite/special_functions/10_cyl_neumann/check_value.cc: Regen.
+       * testsuite/special_functions/11_ellint_1/check_value.cc: Regen.
+       * testsuite/special_functions/12_ellint_2/check_value.cc: Regen.
+       * testsuite/special_functions/14_expint/check_value.cc: Regen.
+       * testsuite/special_functions/15_hermite/check_value.cc: Regen.
+       * testsuite/special_functions/16_laguerre/check_value.cc: Regen.
+       * testsuite/special_functions/17_legendre/check_value.cc: Regen.
+       * testsuite/special_functions/18_riemann_zeta/check_value.cc: Regen.
+       * testsuite/special_functions/19_sph_bessel/check_value.cc: Regen.
+       * testsuite/special_functions/20_sph_legendre/check_value.cc: Regen.
+       * testsuite/special_functions/21_sph_neumann/check_value.cc: Regen.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       06_comp_ellint_3/pr66689.cc: New.
+       * testsuite/tr1/5_numerical_facilities/special_functions/
+       14_ellint_3/pr66689.cc: New.
+       * testsuite/special_functions/06_comp_ellint_3/pr66689.cc: New.
+       * testsuite/special_functions/13_ellint_3/pr66689.cc: New.
+
+2017-11-18  Edward Smith-Rowland  <3dw4rd@verizon.net>
        Expose Airy functions as an extenaion.
        * include/bits/specfun.h: Expose airy_ai and airy_bi.
        * include/tr1/modified_bessel_func.tcc: Treat NaN and inf arg, return.
index 4bd22e5..4953fe2 100644 (file)
@@ -685,8 +685,8 @@ namespace tr1
           const _Tp __kk = __k * __k;
 
           return __ellint_rf(_Tp(0), _Tp(1) - __kk, _Tp(1))
-               - __nu
-               * __ellint_rj(_Tp(0), _Tp(1) - __kk, _Tp(1), _Tp(1) + __nu)
+               + __nu
+               * __ellint_rj(_Tp(0), _Tp(1) - __kk, _Tp(1), _Tp(1) - __nu)
                / _Tp(3);
         }
     }
@@ -735,9 +735,9 @@ namespace tr1
 
           const _Tp __Pi = __s
                          * __ellint_rf(__cc, _Tp(1) - __kk * __ss, _Tp(1))
-                         - __nu * __sss
+                         + __nu * __sss
                          * __ellint_rj(__cc, _Tp(1) - __kk * __ss, _Tp(1),
-                                       _Tp(1) + __nu * __ss) / _Tp(3);
+                                       _Tp(1) - __nu * __ss) / _Tp(3);
 
           if (__n == 0)
             return __Pi;
index d35e2ae..7e66905 100644 (file)
@@ -1,5 +1,5 @@
-// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 // { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
 // Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for a=0.0000000000000000, c=1.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_conf_hyperg<double>
 data001[21] =
 {
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_conf_hyperg<double>
 data002[21] =
 {
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=3.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_conf_hyperg<double>
 data003[21] =
 {
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler003 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_conf_hyperg<double>
 data004[21] =
 {
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler004 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=5.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_conf_hyperg<double>
 data005[21] =
 {
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler005 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_conf_hyperg<double>
 data006[21] =
 {
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler006 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=7.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_conf_hyperg<double>
 data007[21] =
 {
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler007 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_conf_hyperg<double>
 data008[21] =
 {
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler008 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=9.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_conf_hyperg<double>
 data009[21] =
 {
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler009 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_conf_hyperg<double>
 data010[21] =
 {
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler010 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=1.0000000000000000.
-// max(|f - f_GSL|): 1.1823431123048067e-11
+// max(|f - f_GSL|): 1.1823431123048067e-11 at index 20
 // max(|f - f_GSL| / |f_GSL|): 1.8179920344425603e-13
+// mean(f - f_GSL): -5.8836665698233256e-13
+// variance(f - f_GSL): 6.6269003617242792e-24
+// stddev(f - f_GSL): 2.5742766676727424e-12
 const testcase_conf_hyperg<double>
 data011[21] =
 {
   { 0.18354081260932842, 0.50000000000000000, 1.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.19419827762834704, 0.50000000000000000, 1.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.20700192122398287, 0.50000000000000000, 1.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.22280243801078498, 0.50000000000000000, 1.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.24300035416182644, 0.50000000000000000, 1.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.27004644161220326, 0.50000000000000000, 1.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.30850832255367100, 0.50000000000000000, 1.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.36743360905415834, 0.50000000000000000, 1.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.46575960759364043, 0.50000000000000000, 1.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.64503527044915010, 0.50000000000000000, 1.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.7533876543770910, 0.50000000000000000, 1.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 3.4415238691253340, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 7.3801013214774045, 0.50000000000000000, 1.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 16.843983681258987, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 40.078445504076420, 0.50000000000000000, 1.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 98.033339697812693, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 244.33254130132138, 0.50000000000000000, 1.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 617.06403040562441, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 1573.6049422133694, 0.50000000000000000, 1.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 4042.7554308904109, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler011 = 1.0000000000000006e-11;
 
 // Test data for a=0.50000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 1.0231815394945443e-12
+// max(|f - f_GSL|): 1.0231815394945443e-12 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.3738284297189904e-15
+// mean(f - f_GSL): -5.2558486663385687e-14
+// variance(f - f_GSL): 4.9460728311082100e-26
+// stddev(f - f_GSL): 2.2239768054339527e-13
 const testcase_conf_hyperg<double>
 data012[21] =
 {
   { 0.34751307955387056, 0.50000000000000000, 2.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.36515709992587503, 0.50000000000000000, 2.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.38575276072642301, 0.50000000000000000, 2.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.41020241461382889, 0.50000000000000000, 2.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.43982706745912625, 0.50000000000000000, 2.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.47663109114346930, 0.50000000000000000, 2.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.52377761180260862, 0.50000000000000000, 2.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.58647299647508400, 0.50000000000000000, 2.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.67367002294334866, 0.50000000000000000, 2.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.80145607363402172, 0.50000000000000000, 2.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.3281918274866849, 0.50000000000000000, 2.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.9052621465543667, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 2.9805776178019903, 0.50000000000000000, 2.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 5.0906787293171654, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 9.4185650450425982, 0.50000000000000000, 2.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 18.627776225142014, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 38.823513069699622, 0.50000000000000000, 2.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 84.215287700426956, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 188.31125697734257, 0.50000000000000000, 2.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 431.02590173952319, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler012 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=3.0000000000000000.
-// max(|f - f_GSL|): 2.4158453015843406e-13
+// max(|f - f_GSL|): 2.4158453015843406e-13 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.5938546713928606e-15
+// mean(f - f_GSL): -1.2672402809650001e-14
+// variance(f - f_GSL): 2.7510400074856614e-27
+// stddev(f - f_GSL): 5.2450357553458695e-14
 const testcase_conf_hyperg<double>
 data013[21] =
 {
   { 0.44148780381255504, 0.50000000000000000, 3.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.46154890030153722, 0.50000000000000000, 3.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.48454520771815751, 0.50000000000000000, 3.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.51124131917976301, 0.50000000000000000, 3.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.54269682032387934, 0.50000000000000000, 3.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.58041888164962119, 0.50000000000000000, 3.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.62661371932049892, 0.50000000000000000, 3.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.68461315644636744, 0.50000000000000000, 3.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.75961975369132639, 0.50000000000000000, 3.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.86004702726553350, 0.50000000000000000, 3.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 3.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.2039946674617061, 0.50000000000000000, 3.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.5161750470251780, 0.50000000000000000, 3.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 2.0187596221024697, 0.50000000000000000, 3.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 2.8698033217756134, 0.50000000000000000, 3.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 4.3821186043144449, 0.50000000000000000, 3.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 7.1913541951514235, 0.50000000000000000, 3.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 12.620107286909638, 0.50000000000000000, 3.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 23.478926483036361, 0.50000000000000000, 3.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 45.852981860749047, 0.50000000000000000, 3.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 93.137265099245838, 0.50000000000000000, 3.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler013 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 9.2370555648813024e-14
+// max(|f - f_GSL|): 9.2370555648813024e-14 at index 20
 // max(|f - f_GSL| / |f_GSL|): 3.0116140491179400e-15
+// mean(f - f_GSL): -4.1977003883446396e-15
+// variance(f - f_GSL): 4.0815875125113411e-28
+// stddev(f - f_GSL): 2.0202939173574080e-14
 const testcase_conf_hyperg<double>
 data014[21] =
 {
   { 0.50723143075298205, 0.50000000000000000, 4.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.52815420026166782, 0.50000000000000000, 4.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.55181651516426766, 0.50000000000000000, 4.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.57884767287882366, 0.50000000000000000, 4.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.61008828324275399, 0.50000000000000000, 4.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.64668451853659259, 0.50000000000000000, 4.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.69023479867386495, 0.50000000000000000, 4.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.74302365975861406, 0.50000000000000000, 4.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.80840402753201868, 0.50000000000000000, 4.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.89143814400301236, 0.50000000000000000, 4.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 4.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.1467204168940972, 0.50000000000000000, 4.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.3525055369951857, 0.50000000000000000, 4.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.6530571499633475, 0.50000000000000000, 4.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 2.1112387416058045, 0.50000000000000000, 4.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 2.8410480336278199, 0.50000000000000000, 4.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 4.0550562221854713, 0.50000000000000000, 4.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 6.1601039044778583, 0.50000000000000000, 4.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 9.9538034144264511, 0.50000000000000000, 4.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 17.034704868473916, 0.50000000000000000, 4.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 30.671445325428429, 0.50000000000000000, 4.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler014 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=5.0000000000000000.
-// max(|f - f_GSL|): 3.5527136788005009e-14
+// max(|f - f_GSL|): 3.5527136788005009e-14 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.6053493022967024e-15
+// mean(f - f_GSL): -1.8503717077085944e-15
+// variance(f - f_GSL): 5.9541536579357277e-29
+// stddev(f - f_GSL): 7.7163162570851951e-15
 const testcase_conf_hyperg<double>
 data015[21] =
 {
   { 0.55715239162383312, 0.50000000000000000, 5.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.57823135269518977, 0.50000000000000000, 5.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.60181688556797253, 0.50000000000000000, 5.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.62842688147829928, 0.50000000000000000, 5.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.65873434489521876, 0.50000000000000000, 5.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.69362872731932568, 0.50000000000000000, 5.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.73430741618153195, 0.50000000000000000, 5.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.78241503593870543, 0.50000000000000000, 5.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.84026013345254857, 0.50000000000000000, 5.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.91115976433208690, 0.50000000000000000, 5.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.1141687602185972, 0.50000000000000000, 5.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.2651443108002267, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.4712624889419719, 0.50000000000000000, 5.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.7626460645467978, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 2.1901779328181084, 0.50000000000000000, 5.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 2.8421796979457090, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 3.8760354586203540, 0.50000000000000000, 5.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 5.5792940156545541, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 8.4898429002463303, 0.50000000000000000, 5.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 13.636227878037948, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler015 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 2.1316282072803006e-14
+// max(|f - f_GSL|): 2.1316282072803006e-14 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.8121163355193836e-15
+// mean(f - f_GSL): -1.1525172350870673e-15
+// variance(f - f_GSL): 2.1345314152612258e-29
+// stddev(f - f_GSL): 4.6200989332061126e-15
 const testcase_conf_hyperg<double>
 data016[21] =
 {
   { 0.59687111919499192, 0.50000000000000000, 6.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.61774982278057033, 0.50000000000000000, 6.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.64090744485124451, 0.50000000000000000, 6.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.66677322792860194, 0.50000000000000000, 6.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.69589293014100995, 0.50000000000000000, 6.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.72897040032571048, 0.50000000000000000, 6.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.76692755408207181, 0.50000000000000000, 6.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.81099244559101891, 0.50000000000000000, 6.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.86283102401276535, 0.50000000000000000, 6.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.92474809223976406, 0.50000000000000000, 6.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 6.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0932912594628821, 0.50000000000000000, 6.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.2115798426781204, 0.50000000000000000, 6.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.3654106750890422, 0.50000000000000000, 6.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.5711704305419896, 0.50000000000000000, 6.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.8549798357448213, 0.50000000000000000, 6.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 2.2595503871694826, 0.50000000000000000, 6.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 2.8565038772876932, 0.50000000000000000, 6.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 3.7689325736317838, 0.50000000000000000, 6.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 5.2134738554699531, 0.50000000000000000, 6.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 7.5801565545352858, 0.50000000000000000, 6.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler016 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=7.0000000000000000.
-// max(|f - f_GSL|): 1.2434497875801753e-14
+// max(|f - f_GSL|): 1.2434497875801753e-14 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.5039514520700816e-15
+// mean(f - f_GSL): -8.2473710400725917e-16
+// variance(f - f_GSL): 7.0762936218606606e-30
+// stddev(f - f_GSL): 2.6601303768538602e-15
 const testcase_conf_hyperg<double>
 data017[21] =
 {
   { 0.62946736953754079, 0.50000000000000000, 7.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.64995830964827050, 0.50000000000000000, 7.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.67251910396276349, 0.50000000000000000, 7.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.69750870596083636, 0.50000000000000000, 7.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.72537539174856436, 0.50000000000000000, 7.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.75668588434835504, 0.50000000000000000, 7.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.79216623458879654, 0.50000000000000000, 7.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.83276010491326891, 0.50000000000000000, 7.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.87971323375878940, 0.50000000000000000, 7.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.93469794840150233, 0.50000000000000000, 7.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 7.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0788040971101556, 0.50000000000000000, 7.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.1756385516794761, 0.50000000000000000, 7.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.2970810749099917, 0.50000000000000000, 7.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.4529009687665237, 0.50000000000000000, 7.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.6579437149144023, 0.50000000000000000, 7.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1.9353010489337754, 0.50000000000000000, 7.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 2.3217458547039813, 0.50000000000000000, 7.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 2.8772254607646022, 0.50000000000000000, 7.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 3.7017478151936585, 0.50000000000000000, 7.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 4.9659500648552237, 0.50000000000000000, 7.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler017 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 1.0658141036401503e-14
+// max(|f - f_GSL|): 1.0658141036401503e-14 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.9130420352995081e-15
+// mean(f - f_GSL): -6.7670736739057157e-16
+// variance(f - f_GSL): 5.2305234496654133e-30
+// stddev(f - f_GSL): 2.2870337666211692e-15
 const testcase_conf_hyperg<double>
 data018[21] =
 {
   { 0.65682574389601267, 0.50000000000000000, 8.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.67683106084440448, 0.50000000000000000, 8.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.69871884883136481, 0.50000000000000000, 8.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.72279201131268422, 0.50000000000000000, 8.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.74942315553647221, 0.50000000000000000, 8.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.77907555763819503, 0.50000000000000000, 8.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.81233192258476394, 0.50000000000000000, 8.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.84993438521252052, 0.50000000000000000, 8.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.89284095871461888, 0.50000000000000000, 8.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.94230641231038748, 0.50000000000000000, 8.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 8.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0681796709163929, 0.50000000000000000, 8.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.1499542693515108, 0.50000000000000000, 8.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.2496850956712680, 0.50000000000000000, 8.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.3736119127266571, 0.50000000000000000, 8.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.5308465522192733, 0.50000000000000000, 8.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1.7349787653671505, 0.50000000000000000, 8.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 2.0067188996039378, 0.50000000000000000, 8.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 2.3783255204306939, 0.50000000000000000, 8.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 2.9011558746255748, 0.50000000000000000, 8.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 3.6587666457431234, 0.50000000000000000, 8.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler018 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=9.0000000000000000.
-// max(|f - f_GSL|): 7.1054273576010019e-15
+// max(|f - f_GSL|): 7.1054273576010019e-15 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.4278329545502228e-15
+// mean(f - f_GSL): -2.7491236800241972e-16
+// variance(f - f_GSL): 2.4494365887143733e-30
+// stddev(f - f_GSL): 1.5650675987683002e-15
 const testcase_conf_hyperg<double>
 data019[21] =
 {
   { 0.68018654063475448, 0.50000000000000000, 9.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.69965870094538662, 0.50000000000000000, 9.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.72084701020942776, 0.50000000000000000, 9.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.74400928635822572, 0.50000000000000000, 9.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.76945859319172982, 0.50000000000000000, 9.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.79757868270124699, 0.50000000000000000, 9.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.82884476649794248, 0.50000000000000000, 9.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.86385180214855140, 0.50000000000000000, 9.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.90335351612716308, 0.50000000000000000, 9.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.94831697594473685, 0.50000000000000000, 9.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 9.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0600626000640645, 0.50000000000000000, 9.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.1307298999505393, 0.50000000000000000, 9.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.2150341092774180, 0.50000000000000000, 9.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.3171798023006840, 0.50000000000000000, 9.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.4431045594091672, 0.50000000000000000, 9.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1.6013540635087158, 0.50000000000000000, 9.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1.8044714074708206, 0.50000000000000000, 9.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 2.0712406108144257, 0.50000000000000000, 9.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 2.4303714711293143, 0.50000000000000000, 9.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 2.9266541358556295, 0.50000000000000000, 9.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler019 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 5.3290705182007514e-15
+// max(|f - f_GSL|): 5.3290705182007514e-15 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.1499735877560022e-15
+// mean(f - f_GSL): -3.4892723631076348e-16
+// variance(f - f_GSL): 1.3020959231780839e-30
+// stddev(f - f_GSL): 1.1410941780493336e-15
 const testcase_conf_hyperg<double>
 data020[21] =
 {
   { 0.70040954461104099, 0.50000000000000000, 10.000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.71933025737654444, 0.50000000000000000, 10.000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.73981995758615027, 0.50000000000000000, 10.000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.76209985272755054, 0.50000000000000000, 10.000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.78643553963087975, 0.50000000000000000, 10.000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.81314860510626796, 0.50000000000000000, 10.000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.84263196565226672, 0.50000000000000000, 10.000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.87537037798496642, 0.50000000000000000, 10.000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.91196818568151450, 0.50000000000000000, 10.000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.95318731786229316, 0.50000000000000000, 10.000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 10.000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0536628587304602, 0.50000000000000000, 10.000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.1158225648376323, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.1886686247111011, 0.50000000000000000, 10.000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.2751576744751334, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.3793478044961116, 0.50000000000000000, 10.000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1.5069047234443802, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1.6658803233122232, 0.50000000000000000, 10.000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 1.8679295659745196, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 2.1302432955522050, 0.50000000000000000, 10.000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 2.4786679001777303, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler020 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=1.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_conf_hyperg<double>
 data021[21] =
 {
-  { 4.5399929762484854e-05, 1.0000000000000000, 1.0000000000000000, 
-         -10.000000000000000 },
+  { 4.5399929762484847e-05, 1.0000000000000000, 1.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { 0.00012340980408667956, 1.0000000000000000, 1.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.00033546262790251185, 1.0000000000000000, 1.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.00091188196555451624, 1.0000000000000000, 1.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.0024787521766663585, 1.0000000000000000, 1.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.0067379469990854670, 1.0000000000000000, 1.0000000000000000, 
-         -5.0000000000000000 },
-  { 0.018315638888734179, 1.0000000000000000, 1.0000000000000000, 
-         -4.0000000000000000 },
+         -5.0000000000000000, 0.0 },
+  { 0.018315638888734182, 1.0000000000000000, 1.0000000000000000, 
+         -4.0000000000000000, 0.0 },
   { 0.049787068367863944, 1.0000000000000000, 1.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.13533528323661270, 1.0000000000000000, 1.0000000000000000, 
-         -2.0000000000000000 },
-  { 0.36787944117144233, 1.0000000000000000, 1.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { 0.36787944117144228, 1.0000000000000000, 1.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000, 
-         0.0000000000000000 },
-  { 2.7182818284590451, 1.0000000000000000, 1.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 2.7182818284590455, 1.0000000000000000, 1.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 7.3890560989306504, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 20.085536923187668, 1.0000000000000000, 1.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 54.598150033144236, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 148.41315910257660, 1.0000000000000000, 1.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 403.42879349273511, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1096.6331584284585, 1.0000000000000000, 1.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 2980.9579870417283, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 8103.0839275753842, 1.0000000000000000, 1.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 22026.465794806718, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler021 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 4.5474735088646412e-13
+// max(|f - f_GSL|): 4.5474735088646412e-13 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.3593310407919961e-15
+// mean(f - f_GSL): 8.1284185731484669e-15
+// variance(f - f_GSL): 1.0472094711786016e-26
+// stddev(f - f_GSL): 1.0233325320630639e-13
 const testcase_conf_hyperg<double>
 data022[21] =
 {
   { 0.099995460007023751, 1.0000000000000000, 2.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.11109739891065704, 1.0000000000000000, 2.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.12495806717151219, 1.0000000000000000, 2.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.14272687400492079, 1.0000000000000000, 2.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.16625354130388895, 1.0000000000000000, 2.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.19865241060018290, 1.0000000000000000, 2.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.24542109027781644, 1.0000000000000000, 2.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.31673764387737868, 1.0000000000000000, 2.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.43233235838169365, 1.0000000000000000, 2.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.63212055882855767, 1.0000000000000000, 2.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 
-         0.0000000000000000 },
-  { 1.7182818284590451, 1.0000000000000000, 2.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 1.7182818284590455, 1.0000000000000000, 2.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 3.1945280494653252, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 6.3618456410625557, 1.0000000000000000, 2.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 13.399537508286059, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 29.482631820515319, 1.0000000000000000, 2.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 67.071465582122514, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 156.51902263263693, 1.0000000000000000, 2.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 372.49474838021604, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 900.23154750837602, 1.0000000000000000, 2.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 2202.5465794806719, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler022 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=3.0000000000000000.
-// max(|f - f_GSL|): 5.6843418860808015e-14
-// max(|f - f_GSL| / |f_GSL|): 7.7098432236368283e-16
+// max(|f - f_GSL|): 5.6843418860808015e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 7.7283245979294494e-16
+// mean(f - f_GSL): 2.8456073476404308e-15
+// variance(f - f_GSL): 1.5307759153110761e-28
+// stddev(f - f_GSL): 1.2372452931052420e-14
 const testcase_conf_hyperg<double>
 data023[21] =
 {
   { 0.18000090799859525, 1.0000000000000000, 3.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.19753391135318732, 1.0000000000000000, 3.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.21876048320712196, 1.0000000000000000, 3.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.24493517885573690, 1.0000000000000000, 3.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.27791548623203705, 1.0000000000000000, 3.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.32053903575992687, 1.0000000000000000, 3.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.37728945486109178, 1.0000000000000000, 3.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.45550823741508090, 1.0000000000000000, 3.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.56766764161830641, 1.0000000000000000, 3.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.73575888234288467, 1.0000000000000000, 3.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 3.0000000000000000, 
-         0.0000000000000000 },
-  { 1.4365636569180902, 1.0000000000000000, 3.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 1.4365636569180911, 1.0000000000000000, 3.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 2.1945280494653252, 1.0000000000000000, 3.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 3.5745637607083705, 1.0000000000000000, 3.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 6.1997687541430295, 1.0000000000000000, 3.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 11.393052728206127, 1.0000000000000000, 3.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 22.023821860707507, 1.0000000000000000, 3.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 44.434006466467693, 1.0000000000000000, 3.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 92.873687095054009, 1.0000000000000000, 3.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 199.82923277963911, 1.0000000000000000, 3.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 440.30931589613436, 1.0000000000000000, 3.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler023 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 8.5265128291212022e-14
+// max(|f - f_GSL|): 8.5265128291212022e-14 at index 20
 // max(|f - f_GSL| / |f_GSL|): 8.2495029364968388e-16
+// mean(f - f_GSL): 4.6338594337330941e-15
+// variance(f - f_GSL): 3.4132357967227019e-28
+// stddev(f - f_GSL): 1.8474944645986633e-14
 const testcase_conf_hyperg<double>
 data024[21] =
 {
   { 0.24599972760042138, 1.0000000000000000, 4.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.26748869621560417, 1.0000000000000000, 4.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.29296481879732927, 1.0000000000000000, 4.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.32359920906182715, 1.0000000000000000, 4.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.36104225688398156, 1.0000000000000000, 4.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.40767657854404388, 1.0000000000000000, 4.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.46703290885418114, 1.0000000000000000, 4.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.54449176258491916, 1.0000000000000000, 4.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.64849853757254050, 1.0000000000000000, 4.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.79272335297134611, 1.0000000000000000, 4.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 4.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.3096909707542714, 1.0000000000000000, 4.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.7917920741979876, 1.0000000000000000, 4.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 2.5745637607083705, 1.0000000000000000, 4.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 3.8998265656072717, 1.0000000000000000, 4.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 6.2358316369236775, 1.0000000000000000, 4.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 10.511910930353745, 1.0000000000000000, 4.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 18.614574199914728, 1.0000000000000000, 4.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 34.452632660645271, 1.0000000000000000, 4.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 66.276410926546333, 1.0000000000000000, 4.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 131.79279476884014, 1.0000000000000000, 4.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler024 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=5.0000000000000000.
-// max(|f - f_GSL|): 6.3948846218409017e-14
+// max(|f - f_GSL|): 6.3948846218409017e-14 at index 20
 // max(|f - f_GSL| / |f_GSL|): 1.3470358174143053e-15
+// mean(f - f_GSL): 4.1316156844979041e-15
+// variance(f - f_GSL): 1.8785030610922107e-28
+// stddev(f - f_GSL): 1.3705849339213571e-14
 const testcase_conf_hyperg<double>
 data025[21] =
 {
   { 0.30160010895983153, 1.0000000000000000, 5.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.32556057945973133, 1.0000000000000000, 5.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.35351759060133559, 1.0000000000000000, 5.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.38651473767895589, 1.0000000000000000, 5.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.42597182874401246, 1.0000000000000000, 5.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.47385873716476473, 1.0000000000000000, 5.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.53296709114581886, 1.0000000000000000, 5.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.60734431655344123, 1.0000000000000000, 5.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.70300292485491900, 1.0000000000000000, 5.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.82910658811461568, 1.0000000000000000, 5.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.2387638830170857, 1.0000000000000000, 5.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.5835841483959754, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 2.0994183476111612, 1.0000000000000000, 5.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 2.8998265656072730, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 4.1886653095389432, 1.0000000000000000, 5.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 6.3412739535691678, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000 },
-  { 10.065470971379844, 1.0000000000000000, 5.0000000000000000, 
-         7.0000000000000000 },
+         6.0000000000000000, 0.0 },
+  { 10.065470971379845, 1.0000000000000000, 5.0000000000000000, 
+         7.0000000000000000, 0.0 },
   { 16.726316330322632, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 29.011738189576135, 1.0000000000000000, 5.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 52.317117907536058, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler025 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 8.1712414612411521e-14
+// max(|f - f_GSL|): 8.1712414612411521e-14 at index 20
 // max(|f - f_GSL| / |f_GSL|): 3.1846065384904241e-15
+// mean(f - f_GSL): 5.9529101225139347e-15
+// variance(f - f_GSL): 3.0132388232912765e-28
+// stddev(f - f_GSL): 1.7358683196865125e-14
 const testcase_conf_hyperg<double>
 data026[21] =
 {
   { 0.34919994552008421, 1.0000000000000000, 6.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.37468856696681579, 1.0000000000000000, 6.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.40405150587416555, 1.0000000000000000, 6.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.43820375880074558, 1.0000000000000000, 6.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.47835680937998981, 1.0000000000000000, 6.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.52614126283523510, 1.0000000000000000, 6.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.58379113606772659, 1.0000000000000000, 6.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.65442613907759817, 1.0000000000000000, 6.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.74249268786270239, 1.0000000000000000, 6.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.85446705942692136, 1.0000000000000000, 6.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 6.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.1938194150854282, 1.0000000000000000, 6.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.4589603709899384, 1.0000000000000000, 6.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.8323639126852680, 1.0000000000000000, 6.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 2.3747832070090902, 1.0000000000000000, 6.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 3.1886653095389423, 1.0000000000000000, 6.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 4.4510616279743056, 1.0000000000000000, 6.0000000000000000, 
-         6.0000000000000000 },
-  { 6.4753364081284595, 1.0000000000000000, 6.0000000000000000, 
-         7.0000000000000000 },
-  { 9.8289477064516344, 1.0000000000000000, 6.0000000000000000, 
-         8.0000000000000000 },
+         6.0000000000000000, 0.0 },
+  { 6.4753364081284603, 1.0000000000000000, 6.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 9.8289477064516362, 1.0000000000000000, 6.0000000000000000, 
+         8.0000000000000000, 0.0 },
   { 15.562076771986721, 1.0000000000000000, 6.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 25.658558953767979, 1.0000000000000000, 6.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler026 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=7.0000000000000000.
-// max(|f - f_GSL|): 4.6185277824406512e-14
+// max(|f - f_GSL|): 4.6185277824406512e-14 at index 20
 // max(|f - f_GSL| / |f_GSL|): 3.1216529394518888e-15
+// mean(f - f_GSL): 1.1710209521641532e-15
+// variance(f - f_GSL): 1.0637987439241148e-28
+// stddev(f - f_GSL): 1.0314061973461835e-14
 const testcase_conf_hyperg<double>
 data027[21] =
 {
   { 0.39048003268794934, 1.0000000000000000, 7.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.41687428868878917, 1.0000000000000000, 7.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.44696137059437591, 1.0000000000000000, 7.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.48153963531364674, 1.0000000000000000, 7.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.52164319062001030, 1.0000000000000000, 7.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.56863048459771781, 1.0000000000000000, 7.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.62431329589841034, 1.0000000000000000, 7.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.69114772184480389, 1.0000000000000000, 7.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.77252193641189282, 1.0000000000000000, 7.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.87319764343847150, 1.0000000000000000, 7.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 7.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.1629164905125695, 1.0000000000000000, 7.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.3768811129698151, 1.0000000000000000, 7.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.6647278253705360, 1.0000000000000000, 7.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 2.0621748105136359, 1.0000000000000000, 7.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 2.6263983714467289, 1.0000000000000000, 7.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 3.4510616279743087, 1.0000000000000000, 7.0000000000000000, 
-         6.0000000000000000 },
-  { 4.6931454926815466, 1.0000000000000000, 7.0000000000000000, 
-         7.0000000000000000 },
+         6.0000000000000000, 0.0 },
+  { 4.6931454926815457, 1.0000000000000000, 7.0000000000000000, 
+         7.0000000000000000, 0.0 },
   { 6.6217107798387467, 1.0000000000000000, 7.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 9.7080511813245050, 1.0000000000000000, 7.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 14.795135372260791, 1.0000000000000000, 7.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler027 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 1.5099033134902129e-14
+// max(|f - f_GSL|): 1.5099033134902129e-14 at index 18
 // max(|f - f_GSL| / |f_GSL|): 3.0695349768517519e-15
+// mean(f - f_GSL): -2.2997476938663959e-16
+// variance(f - f_GSL): 4.3587679517313822e-30
+// stddev(f - f_GSL): 2.0877662588832549e-15
 const testcase_conf_hyperg<double>
 data028[21] =
 {
   { 0.42666397711843551, 1.0000000000000000, 8.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.45354221990871935, 1.0000000000000000, 8.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.48390880072992098, 1.0000000000000000, 8.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.51846036468635348, 1.0000000000000000, 8.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.55808294427665472, 1.0000000000000000, 8.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.60391732156319500, 1.0000000000000000, 8.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.65745173217778197, 1.0000000000000000, 8.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.72065531569545760, 1.0000000000000000, 8.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.79617322255837530, 1.0000000000000000, 8.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.88761649593069913, 1.0000000000000000, 8.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 8.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.1404154335879861, 1.0000000000000000, 8.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.3190838953943527, 1.0000000000000000, 8.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.5510315925312508, 1.0000000000000000, 8.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.8588059183988626, 1.0000000000000000, 8.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 2.2769577200254218, 1.0000000000000000, 8.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 2.8595718993033583, 1.0000000000000000, 8.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 3.6931454926815390, 1.0000000000000000, 8.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 4.9189969323589047, 1.0000000000000000, 8.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 6.7729286965857236, 1.0000000000000000, 8.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 9.6565947605825802, 1.0000000000000000, 8.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler028 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=9.0000000000000000.
-// max(|f - f_GSL|): 2.1316282072803006e-14
+// max(|f - f_GSL|): 2.1316282072803006e-14 at index 20
 // max(|f - f_GSL| / |f_GSL|): 3.0780408841975893e-15
+// mean(f - f_GSL): 1.6309704909374323e-15
+// variance(f - f_GSL): 2.0344353333944372e-29
+// stddev(f - f_GSL): 4.5104715201344935e-15
 const testcase_conf_hyperg<double>
 data029[21] =
 {
   { 0.45866881830525147, 1.0000000000000000, 9.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.48574024897002727, 1.0000000000000000, 9.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.51609119927007907, 1.0000000000000000, 9.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.55033101178702448, 1.0000000000000000, 9.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.58922274096446048, 1.0000000000000000, 9.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.63373228549888794, 1.0000000000000000, 9.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.68509653564443607, 1.0000000000000000, 9.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.74491915814544640, 1.0000000000000000, 9.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.81530710976649901, 1.0000000000000000, 9.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.89906803255440670, 1.0000000000000000, 9.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 9.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.1233234687038898, 1.0000000000000000, 9.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.2763355815774109, 1.0000000000000000, 9.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.4694175800833351, 1.0000000000000000, 9.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.7176118367977251, 1.0000000000000000, 9.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 2.0431323520406743, 1.0000000000000000, 9.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 2.4794291990711450, 1.0000000000000000, 9.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 3.0778805630646149, 1.0000000000000000, 9.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 3.9189969323588909, 1.0000000000000000, 9.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 5.1314921747428537, 1.0000000000000000, 9.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 6.9252758084660471, 1.0000000000000000, 9.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler029 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 1.5987211554602254e-14
+// max(|f - f_GSL|): 1.5987211554602254e-14 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.9979310614742812e-15
+// mean(f - f_GSL): 7.0049786077539637e-16
+// variance(f - f_GSL): 1.2268389816744262e-29
+// stddev(f - f_GSL): 3.5026261314539785e-15
 const testcase_conf_hyperg<double>
 data030[21] =
 {
   { 0.48719806352527351, 1.0000000000000000, 10.000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.51425975102997290, 1.0000000000000000, 10.000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.54439740082116106, 1.0000000000000000, 10.000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.57814584198811136, 1.0000000000000000, 10.000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.61616588855330934, 1.0000000000000000, 10.000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.65928188610200156, 1.0000000000000000, 10.000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.70853279480001885, 1.0000000000000000, 10.000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.76524252556366068, 1.0000000000000000, 10.000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.83111800605075459, 1.0000000000000000, 10.000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.90838770701033944, 1.0000000000000000, 10.000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 10.000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.1099112183350075, 1.0000000000000000, 10.000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.2435101170983485, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.4082527402500060, 1.0000000000000000, 10.000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1.6146266327948817, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1.8776382336732149, 1.0000000000000000, 10.000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 2.2191437986067180, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 2.6715607239402184, 1.0000000000000000, 10.000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 3.2838715489037495, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 4.1314921747428688, 1.0000000000000000, 10.000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 5.3327482276194447, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler030 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=1.0000000000000000.
-// max(|f - f_GSL|): 1.8189894035458565e-12
-// max(|f - f_GSL| / |f_GSL|): 1.2338590067901998e-14
+// max(|f - f_GSL|): 1.8189894035458565e-12 at index 16
+// max(|f - f_GSL| / |f_GSL|): 1.2471263079384817e-14
+// mean(f - f_GSL): -1.4303634774011364e-13
+// variance(f - f_GSL): 1.1334845858631974e-27
+// stddev(f - f_GSL): 3.3667262821072896e-14
 const testcase_conf_hyperg<double>
 data031[20] =
 {
-  { -0.00040859936786236367, 2.0000000000000000, 1.0000000000000000, 
-         -10.000000000000000 },
+  { -0.00040859936786236361, 2.0000000000000000, 1.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { -0.00098727843269343649, 2.0000000000000000, 1.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { -0.0023482383953175828, 2.0000000000000000, 1.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { -0.0054712917933270972, 2.0000000000000000, 1.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { -0.012393760883331793, 2.0000000000000000, 1.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { -0.026951787996341868, 2.0000000000000000, 1.0000000000000000, 
-         -5.0000000000000000 },
-  { -0.054946916666202536, 2.0000000000000000, 1.0000000000000000, 
-         -4.0000000000000000 },
+         -5.0000000000000000, 0.0 },
+  { -0.054946916666202550, 2.0000000000000000, 1.0000000000000000, 
+         -4.0000000000000000, 0.0 },
   { -0.099574136735727889, 2.0000000000000000, 1.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { -0.13533528323661270, 2.0000000000000000, 1.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000, 
-         0.0000000000000000 },
-  { 5.4365636569180902, 2.0000000000000000, 1.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 5.4365636569180911, 2.0000000000000000, 1.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 22.167168296791949, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 80.342147692750672, 2.0000000000000000, 1.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 272.99075016572118, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 890.47895461545954, 2.0000000000000000, 1.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 2824.0015544491457, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 8773.0652674276680, 2.0000000000000000, 1.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 26828.621883375556, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 81030.839275753839, 2.0000000000000000, 1.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 242291.12374287390, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler031 = 1.0000000000000008e-12;
 
 // Test data for a=2.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_conf_hyperg<double>
 data032[21] =
 {
-  { 4.5399929762484854e-05, 2.0000000000000000, 2.0000000000000000, 
-         -10.000000000000000 },
+  { 4.5399929762484847e-05, 2.0000000000000000, 2.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { 0.00012340980408667956, 2.0000000000000000, 2.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.00033546262790251185, 2.0000000000000000, 2.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.00091188196555451624, 2.0000000000000000, 2.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.0024787521766663585, 2.0000000000000000, 2.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.0067379469990854670, 2.0000000000000000, 2.0000000000000000, 
-         -5.0000000000000000 },
-  { 0.018315638888734179, 2.0000000000000000, 2.0000000000000000, 
-         -4.0000000000000000 },
+         -5.0000000000000000, 0.0 },
+  { 0.018315638888734182, 2.0000000000000000, 2.0000000000000000, 
+         -4.0000000000000000, 0.0 },
   { 0.049787068367863944, 2.0000000000000000, 2.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.13533528323661270, 2.0000000000000000, 2.0000000000000000, 
-         -2.0000000000000000 },
-  { 0.36787944117144233, 2.0000000000000000, 2.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { 0.36787944117144228, 2.0000000000000000, 2.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 
-         0.0000000000000000 },
-  { 2.7182818284590451, 2.0000000000000000, 2.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 2.7182818284590455, 2.0000000000000000, 2.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 7.3890560989306504, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 20.085536923187668, 2.0000000000000000, 2.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 54.598150033144236, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 148.41315910257660, 2.0000000000000000, 2.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 403.42879349273511, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1096.6331584284585, 2.0000000000000000, 2.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 2980.9579870417283, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 8103.0839275753842, 2.0000000000000000, 2.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 22026.465794806718, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler032 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=3.0000000000000000.
-// max(|f - f_GSL|): 9.0949470177292824e-13
+// max(|f - f_GSL|): 9.0949470177292824e-13 at index 20
 // max(|f - f_GSL| / |f_GSL|): 3.7963989072999328e-15
+// mean(f - f_GSL): -6.7995212634944630e-14
+// variance(f - f_GSL): 3.7176372986523090e-26
+// stddev(f - f_GSL): 1.9281175531207399e-13
 const testcase_conf_hyperg<double>
 data033[21] =
 {
-  { 0.019990012015452256, 2.0000000000000000, 3.0000000000000000, 
-         -10.000000000000000 },
+  { 0.019990012015452252, 2.0000000000000000, 3.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { 0.024660886468126749, 2.0000000000000000, 3.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.031155651135902421, 2.0000000000000000, 3.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.040518569154104643, 2.0000000000000000, 3.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.054591596375740861, 2.0000000000000000, 3.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.076765785440438966, 2.0000000000000000, 3.0000000000000000, 
-         -5.0000000000000000 },
-  { 0.11355272569454113, 2.0000000000000000, 3.0000000000000000, 
-         -4.0000000000000000 },
+         -5.0000000000000000, 0.0 },
+  { 0.11355272569454114, 2.0000000000000000, 3.0000000000000000, 
+         -4.0000000000000000, 0.0 },
   { 0.17796705033967650, 2.0000000000000000, 3.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.29699707514508100, 2.0000000000000000, 3.0000000000000000, 
-         -2.0000000000000000 },
-  { 0.52848223531423066, 2.0000000000000000, 3.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { 0.52848223531423089, 2.0000000000000000, 3.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 3.0000000000000000, 
-         0.0000000000000000 },
-  { 2.0000000000000000, 2.0000000000000000, 3.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 2.0000000000000004, 2.0000000000000000, 3.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 4.1945280494653261, 2.0000000000000000, 3.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 9.1491275214167409, 2.0000000000000000, 3.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 20.599306262429089, 2.0000000000000000, 3.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 47.572210912824517, 2.0000000000000000, 3.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 112.11910930353754, 2.0000000000000000, 3.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 268.60403879880613, 2.0000000000000000, 3.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 652.11580966537815, 2.0000000000000000, 3.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 1600.6338622371129, 2.0000000000000000, 3.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 3964.7838430652091, 2.0000000000000000, 3.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler033 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 2.2737367544323206e-12
-// max(|f - f_GSL| / |f_GSL|): 2.1504262426495913e-15
+// max(|f - f_GSL|): 2.2737367544323206e-12 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.2177310789485502e-15
+// mean(f - f_GSL): -1.3190936438383412e-13
+// variance(f - f_GSL): 2.4083978986000037e-25
+// stddev(f - f_GSL): 4.9075430702134478e-13
 const testcase_conf_hyperg<double>
 data034[21] =
 {
   { 0.048003268794942940, 2.0000000000000000, 4.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.057624341628353531, 2.0000000000000000, 4.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.070351812026707330, 2.0000000000000000, 4.0000000000000000, 
-         -8.0000000000000000 },
-  { 0.087607118443556703, 2.0000000000000000, 4.0000000000000000, 
-         -7.0000000000000000 },
-  { 0.11166194492814813, 2.0000000000000000, 4.0000000000000000, 
-         -6.0000000000000000 },
-  { 0.14626395019169278, 2.0000000000000000, 4.0000000000000000, 
-         -5.0000000000000000 },
-  { 0.19780254687491294, 2.0000000000000000, 4.0000000000000000, 
-         -4.0000000000000000 },
-  { 0.27754118707540443, 2.0000000000000000, 4.0000000000000000, 
-         -3.0000000000000000 },
-  { 0.40600584970983811, 2.0000000000000000, 4.0000000000000000, 
-         -2.0000000000000000 },
-  { 0.62182994108596168, 2.0000000000000000, 4.0000000000000000, 
-         -1.0000000000000000 },
+         -8.0000000000000000, 0.0 },
+  { 0.087607118443556675, 2.0000000000000000, 4.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.11166194492814810, 2.0000000000000000, 4.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.14626395019169272, 2.0000000000000000, 4.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.19780254687491297, 2.0000000000000000, 4.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.27754118707540437, 2.0000000000000000, 4.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.40600584970983794, 2.0000000000000000, 4.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.62182994108596157, 2.0000000000000000, 4.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 4.0000000000000000, 
-         0.0000000000000000 },
-  { 1.6903090292457283, 2.0000000000000000, 4.0000000000000000, 
-         1.0000000000000000 },
-  { 3.0000000000000000, 2.0000000000000000, 4.0000000000000000, 
-         2.0000000000000000 },
-  { 5.5745637607083705, 2.0000000000000000, 4.0000000000000000, 
-         3.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 1.6903090292457281, 2.0000000000000000, 4.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 2.9999999999999987, 2.0000000000000000, 4.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 5.5745637607083687, 2.0000000000000000, 4.0000000000000000, 
+         3.0000000000000000, 0.0 },
   { 10.799653131214550, 2.0000000000000000, 4.0000000000000000, 
-         4.0000000000000000 },
-  { 21.707494910771043, 2.0000000000000000, 4.0000000000000000, 
-         5.0000000000000000 },
-  { 45.047643721415056, 2.0000000000000000, 4.0000000000000000, 
-         6.0000000000000000 },
-  { 96.072870999573695, 2.0000000000000000, 4.0000000000000000, 
-         7.0000000000000000 },
+         4.0000000000000000, 0.0 },
+  { 21.707494910771032, 2.0000000000000000, 4.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 45.047643721415049, 2.0000000000000000, 4.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 96.072870999573666, 2.0000000000000000, 4.0000000000000000, 
+         7.0000000000000000, 0.0 },
   { 209.71579596387159, 2.0000000000000000, 4.0000000000000000, 
-         8.0000000000000000 },
-  { 466.93487648582493, 2.0000000000000000, 4.0000000000000000, 
-         9.0000000000000000 },
+         8.0000000000000000, 0.0 },
+  { 466.93487648582487, 2.0000000000000000, 4.0000000000000000, 
+         9.0000000000000000, 0.0 },
   { 1057.3423581507243, 2.0000000000000000, 4.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler034 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=5.0000000000000000.
-// max(|f - f_GSL|): 2.8421709430404007e-13
+// max(|f - f_GSL|): 2.8421709430404007e-13 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.6284159117427726e-15
+// mean(f - f_GSL): 1.7819079545233762e-14
+// variance(f - f_GSL): 3.7258148690402422e-27
+// stddev(f - f_GSL): 6.1039453380909643e-14
 const testcase_conf_hyperg<double>
 data035[21] =
 {
   { 0.079198583522191404, 2.0000000000000000, 5.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.093273046483222530, 2.0000000000000000, 5.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.11130650338531098, 2.0000000000000000, 5.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.13485262321044020, 2.0000000000000000, 5.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.16625354130388895, 2.0000000000000000, 5.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.20913010268188095, 2.0000000000000000, 5.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.26923036197926808, 2.0000000000000000, 5.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.35593410067935288, 2.0000000000000000, 5.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.48498537572540468, 2.0000000000000000, 5.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.68357364754153715, 2.0000000000000000, 5.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.5224722339658285, 2.0000000000000000, 5.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 2.4164158516040235, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 4.0000000000000009, 2.0000000000000000, 5.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 6.8998265656072721, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 12.377330619077886, 2.0000000000000000, 5.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 23.023821860707503, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000 },
-  { 44.261883885519374, 2.0000000000000000, 5.0000000000000000, 
-         7.0000000000000000 },
+         6.0000000000000000, 0.0 },
+  { 44.261883885519381, 2.0000000000000000, 5.0000000000000000, 
+         7.0000000000000000, 0.0 },
   { 87.631581651613160, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 178.07042913745681, 2.0000000000000000, 5.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 370.21982535275242, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler035 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 5.1159076974727213e-13
+// max(|f - f_GSL|): 5.1159076974727213e-13 at index 20
 // max(|f - f_GSL| / |f_GSL|): 3.2185367269036845e-15
+// mean(f - f_GSL): 3.1802602879202997e-14
+// variance(f - f_GSL): 1.2085325965997663e-26
+// stddev(f - f_GSL): 1.0993327961085153e-13
 const testcase_conf_hyperg<double>
 data036[21] =
 {
   { 0.11120076271882003, 2.0000000000000000, 6.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.12904862943139384, 2.0000000000000000, 6.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.15138192951001525, 2.0000000000000000, 6.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.17975865319179699, 2.0000000000000000, 6.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.21643190620010283, 2.0000000000000000, 6.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.26472863448288397, 2.0000000000000000, 6.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.32967091145818839, 2.0000000000000000, 6.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.41901702645681349, 2.0000000000000000, 6.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.54504387282378575, 2.0000000000000000, 6.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.72766470286539298, 2.0000000000000000, 6.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 6.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.4185417547437151, 2.0000000000000000, 6.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 2.0820792580201224, 2.0000000000000000, 6.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 3.1676360873147318, 2.0000000000000000, 6.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 4.9999999999999982, 2.0000000000000000, 6.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 8.1886653095389406, 2.0000000000000000, 6.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 13.902123255948611, 2.0000000000000000, 6.0000000000000000, 
-         6.0000000000000000 },
-  { 24.426009224385378, 2.0000000000000000, 6.0000000000000000, 
-         7.0000000000000000 },
-  { 44.315790825806538, 2.0000000000000000, 6.0000000000000000, 
-         8.0000000000000000 },
+         6.0000000000000000, 0.0 },
+  { 24.426009224385382, 2.0000000000000000, 6.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 44.315790825806545, 2.0000000000000000, 6.0000000000000000, 
+         8.0000000000000000, 0.0 },
   { 82.810383859933609, 2.0000000000000000, 6.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 158.95135372260788, 2.0000000000000000, 6.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler036 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=7.0000000000000000.
-// max(|f - f_GSL|): 2.1316282072803006e-13
+// max(|f - f_GSL|): 2.1316282072803006e-13 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.6653456287428861e-15
+// mean(f - f_GSL): 7.4160254656806591e-15
+// variance(f - f_GSL): 2.2224165474381737e-27
+// stddev(f - f_GSL): 4.7142513164214887e-14
 const testcase_conf_hyperg<double>
 data037[21] =
 {
   { 0.14279950968075855, 2.0000000000000000, 7.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.16375995835694801, 2.0000000000000000, 7.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.18950218227311263, 2.0000000000000000, 7.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.22152437623624174, 2.0000000000000000, 7.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.26192490317988687, 2.0000000000000000, 7.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.31369515402282139, 2.0000000000000000, 7.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.38118033691430731, 2.0000000000000000, 7.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.47081822524156886, 2.0000000000000000, 7.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.59234644511675072, 2.0000000000000000, 7.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.76081413936917086, 2.0000000000000000, 7.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 7.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.3483340379497220, 2.0000000000000000, 7.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.8693566610905543, 2.0000000000000000, 7.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 2.6705443492589280, 2.0000000000000000, 7.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 3.9378251894863650, 2.0000000000000000, 7.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 6.0000000000000018, 2.0000000000000000, 7.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 9.4510616279743118, 2.0000000000000000, 7.0000000000000000, 
-         6.0000000000000000 },
-  { 15.386290985363093, 2.0000000000000000, 7.0000000000000000, 
-         7.0000000000000000 },
+         6.0000000000000000, 0.0 },
+  { 15.386290985363091, 2.0000000000000000, 7.0000000000000000, 
+         7.0000000000000000, 0.0 },
   { 25.865132339516240, 2.0000000000000000, 7.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 44.832204725298020, 2.0000000000000000, 7.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 79.975676861303953, 2.0000000000000000, 7.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler037 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 3.9079850466805510e-14
+// max(|f - f_GSL|): 3.9079850466805510e-14 at index 18
 // max(|f - f_GSL| / |f_GSL|): 2.3209326942856951e-15
+// mean(f - f_GSL): -1.4115692741662704e-15
+// variance(f - f_GSL): 1.0460771032794031e-31
+// stddev(f - f_GSL): 3.2343115237704035e-16
 const testcase_conf_hyperg<double>
 data038[21] =
 {
   { 0.17337636610503362, 2.0000000000000000, 8.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.19686670136921000, 2.0000000000000000, 8.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.22527678978110538, 2.0000000000000000, 8.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.26001525907740475, 2.0000000000000000, 8.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.30300466868014397, 2.0000000000000000, 8.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.35690946280485503, 2.0000000000000000, 8.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.42548267822218039, 2.0000000000000000, 8.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.51410215874088183, 2.0000000000000000, 8.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.63061421953299790, 2.0000000000000000, 8.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.78668452848510595, 2.0000000000000000, 8.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 8.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.2979228320600693, 2.0000000000000000, 8.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.7236644184225898, 2.0000000000000000, 8.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 2.3469052224062485, 2.0000000000000000, 8.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 3.2823881632022749, 2.0000000000000000, 8.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 4.7230422799745782, 2.0000000000000000, 8.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 7.0000000000000009, 2.0000000000000000, 8.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 10.693145492681536, 2.0000000000000000, 8.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 16.837993864717809, 2.0000000000000000, 8.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 27.318786089757172, 2.0000000000000000, 8.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 45.626379042330321, 2.0000000000000000, 8.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler038 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=9.0000000000000000.
-// max(|f - f_GSL|): 6.3948846218409017e-14
+// max(|f - f_GSL|): 6.3948846218409017e-14 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.2223112918020366e-15
+// mean(f - f_GSL): 5.1453550415068266e-15
+// variance(f - f_GSL): 1.8153715516608073e-28
+// stddev(f - f_GSL): 1.3473572472291108e-14
 const testcase_conf_hyperg<double>
 data039[21] =
 {
   { 0.20263008881072142, 2.0000000000000000, 9.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.22815601647956382, 2.0000000000000000, 9.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.25863201094881560, 2.0000000000000000, 9.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.29536583498165569, 2.0000000000000000, 9.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.34010436746201422, 2.0000000000000000, 9.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.39521257401334392, 2.0000000000000000, 9.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.46393810791120338, 2.0000000000000000, 9.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.55080841854553553, 2.0000000000000000, 9.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.66223601210150940, 2.0000000000000000, 9.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.80745573956474603, 2.0000000000000000, 9.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 9.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.2600591877766618, 2.0000000000000000, 9.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.6183220921129462, 2.0000000000000000, 9.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 2.1223296796666578, 2.0000000000000000, 9.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 2.8471644896068233, 2.0000000000000000, 9.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 3.9137352959186495, 2.0000000000000000, 9.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 5.5205708009288541, 2.0000000000000000, 9.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 7.9999999999999982, 2.0000000000000000, 9.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 11.918996932358892, 2.0000000000000000, 9.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 18.262984349485706, 2.0000000000000000, 9.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 28.775827425398141, 2.0000000000000000, 9.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler039 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 3.5527136788005009e-14
+// max(|f - f_GSL|): 3.5527136788005009e-14 at index 20
 // max(|f - f_GSL| / |f_GSL|): 1.8065720775912871e-15
+// mean(f - f_GSL): 1.6864816421686901e-15
+// variance(f - f_GSL): 6.0122471886719455e-29
+// stddev(f - f_GSL): 7.7538681886345901e-15
 const testcase_conf_hyperg<double>
 data040[21] =
 {
   { 0.23043485654507717, 2.0000000000000000, 10.000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.25758423249046342, 2.0000000000000000, 10.000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.28964158686142122, 2.0000000000000000, 10.000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.32781237017833142, 2.0000000000000000, 10.000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.37367756025366927, 2.0000000000000000, 10.000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.42933548067397925, 2.0000000000000000, 10.000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.49760646239977369, 2.0000000000000000, 10.000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.58233221879973318, 2.0000000000000000, 10.000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.68881993949245379, 2.0000000000000000, 10.000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.82451063690694526, 2.0000000000000000, 10.000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 10.000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.2306214716549471, 2.0000000000000000, 10.000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 1.5389392974099088, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1.9587362987499699, 2.0000000000000000, 10.000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 2.5414934688204727, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 3.3670852989803555, 2.0000000000000000, 10.000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 4.5617124027865650, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 6.3284392760597825, 2.0000000000000000, 10.000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 9.0000000000000036, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 13.131492174742865, 2.0000000000000000, 10.000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 19.665496455238888, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler040 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, c=1.0000000000000000.
-// max(|f - f_GSL|): 1.1175870895385742e-08
+// max(|f - f_GSL|): 1.1175870895385742e-08 at index 20
 // max(|f - f_GSL| / |f_GSL|): 5.3427429899548483e-12
+// mean(f - f_GSL): 7.1806275564715547e-10
+// variance(f - f_GSL): 5.7417019320980887e-18
+// stddev(f - f_GSL): 2.3961848701838697e-09
 const testcase_conf_hyperg<double>
 data041[21] =
 {
-  { 0.00049939922738733290, 5.0000000000000000, 1.0000000000000000, 
-         -10.000000000000000 },
+  { 0.00049939922738733312, 5.0000000000000000, 1.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { -0.00057077034390089253, 5.0000000000000000, 1.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { -0.0032428054030576147, 5.0000000000000000, 1.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { -0.0078649819529077025, 5.0000000000000000, 1.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { -0.012393760883331793, 5.0000000000000000, 1.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { -0.0087031815404853934, 5.0000000000000000, 1.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.018315638888832021, 5.0000000000000000, 1.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.068457219005814696, 5.0000000000000000, 1.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.045111761078875295, 5.0000000000000000, 1.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { -0.22992465073215118, 5.0000000000000000, 1.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 23.671704256164183, 5.0000000000000000, 1.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 199.50451467112745, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1232.7498286606428, 5.0000000000000000, 1.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 6460.7810872554019, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 30480.352550691663, 5.0000000000000000, 1.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 133534.93064609537, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 553479.89366849652, 5.0000000000000000, 1.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 2196966.0364497532, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 8422142.8572236635, 5.0000000000000000, 1.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 31373029.447069697, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler041 = 5.0000000000000034e-10;
 
 // Test data for a=5.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 1.8626451492309570e-09
+// max(|f - f_GSL|): 1.8626451492309570e-09 at index 20
 // max(|f - f_GSL| / |f_GSL|): 1.4711248979266200e-12
+// mean(f - f_GSL): -8.7549301031074165e-11
+// variance(f - f_GSL): 1.6542567669056424e-19
+// stddev(f - f_GSL): 4.0672555450889020e-10
 const testcase_conf_hyperg<double>
 data042[21] =
 {
-  { -0.00025726626865408078, 5.0000000000000000, 2.0000000000000000, 
-         -10.000000000000000 },
+  { -0.00025726626865408083, 5.0000000000000000, 2.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { -0.00029309828470586396, 5.0000000000000000, 2.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { -0.00011182087596750400, 5.0000000000000000, 2.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.00064591639226778245, 5.0000000000000000, 2.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.0024787521766663585, 5.0000000000000000, 2.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.0053342080409426616, 5.0000000000000000, 2.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.0061052129629022966, 5.0000000000000000, 2.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { -0.0062233835459823200, 5.0000000000000000, 2.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { -0.045111761078871798, 5.0000000000000000, 2.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { -0.015328310048810216, 5.0000000000000000, 2.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 8.2681072282295975, 5.0000000000000000, 2.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 46.797355293227440, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 223.45159827046285, 5.0000000000000000, 2.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 964.56731725221459, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 3889.6615448133625, 5.0000000000000000, 2.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 14926.865359231202, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 55151.509259297891, 5.0000000000000000, 2.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 197736.87980710136, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 691800.79031674843, 5.0000000000000000, 2.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 2371516.1505741901, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler042 = 1.0000000000000006e-10;
 
 // Test data for a=5.0000000000000000, c=3.0000000000000000.
-// max(|f - f_GSL|): 5.8207660913467407e-11
-// max(|f - f_GSL| / |f_GSL|): 7.8471940260477516e-13
+// max(|f - f_GSL|): 5.8207660913467407e-11 at index 20
+// max(|f - f_GSL| / |f_GSL|): 7.8460745975133666e-13
+// mean(f - f_GSL): 4.8403470031658968e-12
+// variance(f - f_GSL): 1.4952368518503471e-22
+// stddev(f - f_GSL): 1.2227987781521321e-11
 const testcase_conf_hyperg<double>
 data043[21] =
 {
-  { 0.00012106647936662629, 5.0000000000000000, 3.0000000000000000, 
-         -10.000000000000000 },
+  { 0.00012106647936662628, 5.0000000000000000, 3.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { 0.00021596715715168925, 5.0000000000000000, 3.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.00033546262790251185, 5.0000000000000000, 3.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.00037995081898104839, 5.0000000000000000, 3.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.0000000000000000, 5.0000000000000000, 3.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { -0.0016844867497713668, 5.0000000000000000, 3.0000000000000000, 
-         -5.0000000000000000 },
-  { -0.0061052129629113917, 5.0000000000000000, 3.0000000000000000, 
-         -4.0000000000000000 },
+         -5.0000000000000000, 0.0 },
+  { -0.0061052129629113926, 5.0000000000000000, 3.0000000000000000, 
+         -4.0000000000000000, 0.0 },
   { -0.012446767091965986, 5.0000000000000000, 3.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.0000000000000000, 5.0000000000000000, 3.0000000000000000, 
-         -2.0000000000000000 },
-  { 0.15328310048810101, 5.0000000000000000, 3.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { 0.15328310048810098, 5.0000000000000000, 3.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 3.0000000000000000, 
-         0.0000000000000000 },
-  { 4.7569931998033290, 5.0000000000000000, 3.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 4.7569931998033299, 5.0000000000000000, 3.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 19.704149597148401, 5.0000000000000000, 3.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 75.320763461953760, 5.0000000000000000, 3.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 272.99075016572118, 5.0000000000000000, 3.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 952.31777090819992, 5.0000000000000000, 3.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 3227.4303479418809, 5.0000000000000000, 3.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 10692.173294677470, 5.0000000000000000, 3.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 34777.843182153498, 5.0000000000000000, 3.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 111417.40400416154, 5.0000000000000000, 3.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 352423.45271690749, 5.0000000000000000, 3.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler043 = 5.0000000000000028e-11;
 
 // Test data for a=5.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 1.4551915228366852e-11
+// max(|f - f_GSL|): 1.4551915228366852e-11 at index 20
 // max(|f - f_GSL| / |f_GSL|): 4.8846719461489400e-13
+// mean(f - f_GSL): -4.3556563012715198e-13
+// variance(f - f_GSL): 1.0461744613935412e-23
+// stddev(f - f_GSL): 3.2344620285196441e-12
 const testcase_conf_hyperg<double>
 data044[21] =
 {
   { -6.8099894643727278e-05, 5.0000000000000000, 4.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { -0.00015426225510834944, 5.0000000000000000, 4.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { -0.00033546262790251185, 5.0000000000000000, 4.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { -0.00068391147416588716, 5.0000000000000000, 4.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { -0.0012393760883331792, 5.0000000000000000, 4.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { -0.0016844867497713668, 5.0000000000000000, 4.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.0000000000000000, 5.0000000000000000, 4.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.012446767091965986, 5.0000000000000000, 4.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.067667641618306351, 5.0000000000000000, 4.0000000000000000, 
-         -2.0000000000000000 },
-  { 0.27590958087858175, 5.0000000000000000, 4.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { 0.27590958087858170, 5.0000000000000000, 4.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 4.0000000000000000, 
-         0.0000000000000000 },
-  { 3.3978522855738063, 5.0000000000000000, 4.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 3.3978522855738067, 5.0000000000000000, 4.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 11.083584148395975, 5.0000000000000000, 4.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 35.149689615578417, 5.0000000000000000, 4.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 109.19630006628847, 5.0000000000000000, 4.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 333.92960798079736, 5.0000000000000000, 4.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1008.5719837318378, 5.0000000000000000, 4.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 3015.7411856782610, 5.0000000000000000, 4.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 8942.8739611251840, 5.0000000000000000, 4.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 26335.022764620000, 5.0000000000000000, 4.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 77092.630281823513, 5.0000000000000000, 4.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler044 = 2.5000000000000014e-11;
 
 // Test data for a=5.0000000000000000, c=5.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_conf_hyperg<double>
 data045[21] =
 {
-  { 4.5399929762484854e-05, 5.0000000000000000, 5.0000000000000000, 
-         -10.000000000000000 },
+  { 4.5399929762484847e-05, 5.0000000000000000, 5.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { 0.00012340980408667956, 5.0000000000000000, 5.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.00033546262790251185, 5.0000000000000000, 5.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.00091188196555451624, 5.0000000000000000, 5.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.0024787521766663585, 5.0000000000000000, 5.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.0067379469990854670, 5.0000000000000000, 5.0000000000000000, 
-         -5.0000000000000000 },
-  { 0.018315638888734179, 5.0000000000000000, 5.0000000000000000, 
-         -4.0000000000000000 },
+         -5.0000000000000000, 0.0 },
+  { 0.018315638888734182, 5.0000000000000000, 5.0000000000000000, 
+         -4.0000000000000000, 0.0 },
   { 0.049787068367863944, 5.0000000000000000, 5.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.13533528323661270, 5.0000000000000000, 5.0000000000000000, 
-         -2.0000000000000000 },
-  { 0.36787944117144233, 5.0000000000000000, 5.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { 0.36787944117144228, 5.0000000000000000, 5.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000, 
-         0.0000000000000000 },
-  { 2.7182818284590451, 5.0000000000000000, 5.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 2.7182818284590455, 5.0000000000000000, 5.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 7.3890560989306504, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 20.085536923187668, 5.0000000000000000, 5.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 54.598150033144236, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 148.41315910257660, 5.0000000000000000, 5.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 403.42879349273511, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1096.6331584284585, 5.0000000000000000, 5.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 2980.9579870417283, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 8103.0839275753842, 5.0000000000000000, 5.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 22026.465794806718, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler045 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 9.0949470177292824e-13
-// max(|f - f_GSL| / |f_GSL|): 1.4537973070007893e-13
+// max(|f - f_GSL|): 9.0949470177292824e-13 at index 19
+// max(|f - f_GSL| / |f_GSL|): 1.4519358507818386e-13
+// mean(f - f_GSL): 3.9988628727782860e-14
+// variance(f - f_GSL): 4.7329726232182936e-26
+// stddev(f - f_GSL): 2.1755396165591409e-13
 const testcase_conf_hyperg<double>
 data046[21] =
 {
-  { 0.0011648967743076431, 5.0000000000000000, 6.0000000000000000, 
-         -10.000000000000000 },
+  { 0.0011648967743076429, 5.0000000000000000, 6.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { 0.0019205128456127479, 5.0000000000000000, 6.0000000000000000, 
-         -9.0000000000000000 },
-  { 0.0032972446271226320, 5.0000000000000000, 6.0000000000000000, 
-         -8.0000000000000000 },
-  { 0.0059047424914709006, 5.0000000000000000, 6.0000000000000000, 
-         -7.0000000000000000 },
+         -9.0000000000000000, 0.0 },
+  { 0.0032972446271226324, 5.0000000000000000, 6.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.0059047424914709015, 5.0000000000000000, 6.0000000000000000, 
+         -7.0000000000000000, 0.0 },
   { 0.011033078698817415, 5.0000000000000000, 6.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.021485057853495849, 5.0000000000000000, 6.0000000000000000, 
-         -5.0000000000000000 },
-  { 0.043495671658608563, 5.0000000000000000, 6.0000000000000000, 
-         -4.0000000000000000 },
+         -5.0000000000000000, 0.0 },
+  { 0.043495671658608570, 5.0000000000000000, 6.0000000000000000, 
+         -4.0000000000000000, 0.0 },
   { 0.091228027395668113, 5.0000000000000000, 6.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.19744881503891684, 5.0000000000000000, 6.0000000000000000, 
-         -2.0000000000000000 },
-  { 0.43918161928124549, 5.0000000000000000, 6.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { 0.43918161928124544, 5.0000000000000000, 6.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 6.0000000000000000, 
-         0.0000000000000000 },
-  { 2.3226822806570353, 5.0000000000000000, 6.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 2.3226822806570357, 5.0000000000000000, 6.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 5.4863201236633126, 5.0000000000000000, 6.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 13.144500379942246, 5.0000000000000000, 6.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 31.873916035045458, 5.0000000000000000, 6.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 78.086286951596321, 5.0000000000000000, 6.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 192.98291046720357, 5.0000000000000000, 6.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 480.54877204888402, 5.0000000000000000, 6.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 1204.4605636118315, 5.0000000000000000, 6.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 3036.1329048350581, 5.0000000000000000, 6.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 7691.6406555465046, 5.0000000000000000, 6.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler046 = 1.0000000000000006e-11;
 
 // Test data for a=5.0000000000000000, c=7.0000000000000000.
-// max(|f - f_GSL|): 1.0004441719502211e-11
+// max(|f - f_GSL|): 1.0004441719502211e-11 at index 20
 // max(|f - f_GSL| / |f_GSL|): 5.0762860793473551e-14
+// mean(f - f_GSL): 3.9645909323339697e-13
+// variance(f - f_GSL): 4.8464498327008765e-24
+// stddev(f - f_GSL): 2.2014653830348723e-12
 const testcase_conf_hyperg<double>
 data047[21] =
 {
   { 0.0036308901122103932, 5.0000000000000000, 7.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.0055327336019229401, 5.0000000000000000, 7.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.0086767852656603455, 5.0000000000000000, 7.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.014030481266326614, 5.0000000000000000, 7.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.023426839582149212, 5.0000000000000000, 7.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.040427681994512799, 5.0000000000000000, 7.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.072123784177593755, 5.0000000000000000, 7.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.13295857409596740, 5.0000000000000000, 7.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.25298991319893882, 5.0000000000000000, 7.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.49602437239337821, 5.0000000000000000, 7.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 7.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 2.0681072498819240, 5.0000000000000000, 7.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 4.3768811129698140, 5.0000000000000000, 7.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 9.4566368471992224, 5.0000000000000000, 7.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 20.811741224531826, 5.0000000000000000, 7.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 46.556488803696276, 5.0000000000000000, 7.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 105.66804767556316, 5.0000000000000000, 7.0000000000000000, 
-         6.0000000000000000 },
-  { 242.93097638084433, 5.0000000000000000, 7.0000000000000000, 
-         7.0000000000000000 },
+         6.0000000000000000, 0.0 },
+  { 242.93097638084427, 5.0000000000000000, 7.0000000000000000, 
+         7.0000000000000000, 0.0 },
   { 564.89804380887358, 5.0000000000000000, 7.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 1326.9606865425994, 5.0000000000000000, 7.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 3145.3685154983905, 5.0000000000000000, 7.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler047 = 5.0000000000000029e-12;
 
 // Test data for a=5.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 6.2527760746888816e-13
+// max(|f - f_GSL|): 6.2527760746888816e-13 at index 18
 // max(|f - f_GSL| / |f_GSL|): 3.7668660800670828e-14
+// mean(f - f_GSL): -1.0866266550578816e-14
+// variance(f - f_GSL): 1.1381792138997471e-26
+// stddev(f - f_GSL): 1.0668548232537298e-13
 const testcase_conf_hyperg<double>
 data048[21] =
 {
   { 0.0075295293831406113, 5.0000000000000000, 8.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.010936052508673187, 5.0000000000000000, 8.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.016247454253649721, 5.0000000000000000, 8.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.024729468107576008, 5.0000000000000000, 8.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.038615775445860964, 5.0000000000000000, 8.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.061937865588523586, 5.0000000000000000, 8.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.10213565389690644, 5.0000000000000000, 8.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.17324118243379236, 5.0000000000000000, 8.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.30228316551605494, 5.0000000000000000, 8.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.54238748802203829, 5.0000000000000000, 8.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 8.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.8922997283093959, 5.0000000000000000, 8.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 3.6699742831126270, 5.0000000000000000, 8.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 7.2831842359960941, 5.0000000000000000, 8.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 14.764676530664770, 5.0000000000000000, 8.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 30.522558591756702, 5.0000000000000000, 8.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 64.236147093730224, 5.0000000000000000, 8.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 137.40503032883331, 5.0000000000000000, 8.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 298.29153884828770, 5.0000000000000000, 8.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 656.29389355002752, 5.0000000000000000, 8.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 1461.6183101433730, 5.0000000000000000, 8.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler048 = 2.5000000000000015e-12;
 
 // Test data for a=5.0000000000000000, c=9.0000000000000000.
-// max(|f - f_GSL|): 1.4779288903810084e-12
+// max(|f - f_GSL|): 1.4779288903810084e-12 at index 20
 // max(|f - f_GSL| / |f_GSL|): 1.3332193464342236e-14
+// mean(f - f_GSL): 1.0197547171765718e-13
+// variance(f - f_GSL): 9.9395510042396581e-26
+// stddev(f - f_GSL): 3.1527053468790352e-13
 const testcase_conf_hyperg<double>
 data049[21] =
 {
   { 0.012801285049305222, 5.0000000000000000, 9.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 0.017955923031350202, 5.0000000000000000, 9.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.025661650371090718, 5.0000000000000000, 9.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.037414616710204310, 5.0000000000000000, 9.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.055720934057414885, 5.0000000000000000, 9.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.084862956151756000, 5.0000000000000000, 9.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.13230635170162319, 5.0000000000000000, 9.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.21132914572142125, 5.0000000000000000, 9.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.34601808641639625, 5.0000000000000000, 9.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.58092180965710882, 5.0000000000000000, 9.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 9.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.7643922061378634, 5.0000000000000000, 9.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 3.1888010096332451, 5.0000000000000000, 9.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 5.8981194929479273, 5.0000000000000000, 9.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 11.152835510393174, 5.0000000000000000, 9.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 21.533483453443495, 5.0000000000000000, 9.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 42.397145995355721, 5.0000000000000000, 9.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 85.010891404859976, 5.0000000000000000, 9.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 173.36225868739959, 5.0000000000000000, 9.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 359.10444177844266, 5.0000000000000000, 9.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 754.64844371961408, 5.0000000000000000, 9.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler049 = 1.0000000000000008e-12;
 
 // Test data for a=5.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 5.1159076974727213e-13
-// max(|f - f_GSL| / |f_GSL|): 7.5019093654907020e-15
+// max(|f - f_GSL|): 5.1159076974727213e-13 at index 20
+// max(|f - f_GSL| / |f_GSL|): 7.6335218104993094e-15
+// mean(f - f_GSL): -5.4482542815883388e-14
+// variance(f - f_GSL): 1.0969766384238795e-26
+// stddev(f - f_GSL): 1.0473665253500703e-13
 const testcase_conf_hyperg<double>
 data050[21] =
 {
   { 0.019313731161840469, 5.0000000000000000, 10.000000000000000, 
-         -10.000000000000000 },
-  { 0.026361085775183927, 5.0000000000000000, 10.000000000000000, 
-         -9.0000000000000000 },
-  { 0.036556772070711910, 5.0000000000000000, 10.000000000000000, 
-         -8.0000000000000000 },
+         -10.000000000000000, 0.0 },
+  { 0.026361085775183930, 5.0000000000000000, 10.000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.036556772070711917, 5.0000000000000000, 10.000000000000000, 
+         -8.0000000000000000, 0.0 },
   { 0.051563934048344140, 5.0000000000000000, 10.000000000000000, 
-         -7.0000000000000000 },
-  { 0.074056625794521824, 5.0000000000000000, 10.000000000000000, 
-         -6.0000000000000000 },
-  { 0.10841132531381445, 5.0000000000000000, 10.000000000000000, 
-         -5.0000000000000000 },
+         -7.0000000000000000, 0.0 },
+  { 0.074056625794521838, 5.0000000000000000, 10.000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.10841132531381448, 5.0000000000000000, 10.000000000000000, 
+         -5.0000000000000000, 0.0 },
   { 0.16192115120742598, 5.0000000000000000, 10.000000000000000, 
-         -4.0000000000000000 },
-  { 0.24696279814742436, 5.0000000000000000, 10.000000000000000, 
-         -3.0000000000000000 },
+         -4.0000000000000000, 0.0 },
+  { 0.24696279814742444, 5.0000000000000000, 10.000000000000000, 
+         -3.0000000000000000, 0.0 },
   { 0.38492640633381947, 5.0000000000000000, 10.000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.61345628229723270, 5.0000000000000000, 10.000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 10.000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.6675470647226096, 5.0000000000000000, 10.000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 2.8442428103603667, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000 },
-  { 4.9603804008438397, 5.0000000000000000, 10.000000000000000, 
-         3.0000000000000000 },
+         2.0000000000000000, 0.0 },
+  { 4.9603804008438415, 5.0000000000000000, 10.000000000000000, 
+         3.0000000000000000, 0.0 },
   { 8.8405953071624790, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000 },
-  { 16.089667272320334, 5.0000000000000000, 10.000000000000000, 
-         5.0000000000000000 },
+         4.0000000000000000, 0.0 },
+  { 16.089667272320337, 5.0000000000000000, 10.000000000000000, 
+         5.0000000000000000, 0.0 },
   { 29.876575194426895, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 56.546719856432318, 5.0000000000000000, 10.000000000000000, 
-         7.0000000000000000 },
-  { 108.97420168465270, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000 },
-  { 213.60609045832913, 5.0000000000000000, 10.000000000000000, 
-         9.0000000000000000 },
+         7.0000000000000000, 0.0 },
+  { 108.97420168465273, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 213.60609045832919, 5.0000000000000000, 10.000000000000000, 
+         9.0000000000000000, 0.0 },
   { 425.41323880637168, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler050 = 5.0000000000000039e-13;
 
 // Test data for a=10.000000000000000, c=1.0000000000000000.
-// max(|f - f_GSL|): 4.7683715820312500e-06
-// max(|f - f_GSL| / |f_GSL|): 3.9070311524604618e-14
+// max(|f - f_GSL|): 4.7683715820312500e-06 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.8747416388037654e-14
+// mean(f - f_GSL): 2.1263162844129998e-07
+// variance(f - f_GSL): 1.0896252425486273e-12
+// stddev(f - f_GSL): 1.0438511591930276e-06
 const testcase_conf_hyperg<double>
 data051[21] =
 {
-  { 0.00067155063653961294, 10.000000000000000, 1.0000000000000000, 
-         -10.000000000000000 },
+  { 0.00067155063653961272, 10.000000000000000, 1.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { -0.00071555648905258684, 10.000000000000000, 1.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { -0.0035372078786207375, 10.000000000000000, 1.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { -0.0047884005574714370, 10.000000000000000, 1.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.0024787521766663585, 10.000000000000000, 1.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.018136827242522881, 10.000000000000000, 1.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.0099686175680129968, 10.000000000000000, 1.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { -0.052832081031434205, 10.000000000000000, 1.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.0010979582061523968, 10.000000000000000, 1.0000000000000000, 
-         -2.0000000000000000 },
-  { 0.11394854824644544, 10.000000000000000, 1.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { 0.11394854824644536, 10.000000000000000, 1.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 1.0000000000000000, 
-         0.0000000000000000 },
-  { 131.63017574352619, 10.000000000000000, 1.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 131.63017574352625, 10.000000000000000, 1.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 2431.2913698755478, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 27127.328899791049, 10.000000000000000, 1.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 232066.49977835570, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1674401.3794931530, 10.000000000000000, 1.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 10707495.820386341, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 62515499.242815509, 10.000000000000000, 1.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 339773485.00937450, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 1742442474.2135217, 10.000000000000000, 1.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 8514625476.5462780, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler051 = 2.5000000000000015e-12;
 
 // Test data for a=10.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 1.7881393432617188e-07
+// max(|f - f_GSL|): 1.7881393432617188e-07 at index 20
 // max(|f - f_GSL| / |f_GSL|): 3.0525079910466156e-12
+// mean(f - f_GSL): 8.5256729623701921e-09
+// variance(f - f_GSL): 1.5223998278110878e-15
+// stddev(f - f_GSL): 3.9017942383102262e-08
 const testcase_conf_hyperg<double>
 data052[21] =
 {
   { -0.00014116415550486912, 10.000000000000000, 2.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { -0.00016988130843806985, 10.000000000000000, 2.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 6.6619209703391378e-05, 10.000000000000000, 2.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.00072582919646365740, 10.000000000000000, 2.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.0012039653429522313, 10.000000000000000, 2.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { -0.00061450715370021329, 10.000000000000000, 2.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { -0.0053557899960354968, 10.000000000000000, 2.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { -0.00078903612815141473, 10.000000000000000, 2.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.023725444715554326, 10.000000000000000, 2.0000000000000000, 
-         -2.0000000000000000 },
-  { -0.057297669024384767, 10.000000000000000, 2.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { -0.057297669024384761, 10.000000000000000, 2.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 2.0000000000000000, 
-         0.0000000000000000 },
-  { 34.432116659636534, 10.000000000000000, 2.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 34.432116659636570, 10.000000000000000, 2.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 432.53475371634494, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 3789.1768909683506, 10.000000000000000, 2.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 27089.676185774806, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 169243.72183073507, 10.000000000000000, 2.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 959019.40135397331, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 5043073.3458297960, 10.000000000000000, 2.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 24989309.819281481, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 117948708.50540228, 10.000000000000000, 2.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 534524325.69810420, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler052 = 2.5000000000000017e-10;
 
 // Test data for a=10.000000000000000, c=3.0000000000000000.
-// max(|f - f_GSL|): 4.4703483581542969e-08
-// max(|f - f_GSL| / |f_GSL|): 3.1351462019253111e-11
+// max(|f - f_GSL|): 4.4703483581542969e-08 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.1351688299459524e-11
+// mean(f - f_GSL): -2.1241869003958644e-09
+// variance(f - f_GSL): 9.5182316557710101e-17
+// stddev(f - f_GSL): 9.7561425039669288e-09
 const testcase_conf_hyperg<double>
 data053[21] =
 {
-  { 1.4973169075105227e-05, 10.000000000000000, 3.0000000000000000, 
-         -10.000000000000000 },
+  { 1.4973169075105230e-05, 10.000000000000000, 3.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { 5.7627971015476266e-05, 10.000000000000000, 3.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 9.5964794084281178e-05, 10.000000000000000, 3.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 1.5479477810339013e-05, 10.000000000000000, 3.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { -0.00035410745380947978, 10.000000000000000, 3.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { -0.00078393993138610137, 10.000000000000000, 3.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.00038117202625584330, 10.000000000000000, 3.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.0045341794406447526, 10.000000000000000, 3.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { -0.0031029253652133403, 10.000000000000000, 3.0000000000000000, 
-         -2.0000000000000000 },
-  { -0.028487137061611361, 10.000000000000000, 3.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { -0.028487137061611340, 10.000000000000000, 3.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 3.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 15.691485606063274, 10.000000000000000, 3.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 141.71088859081416, 10.000000000000000, 3.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 997.55177799313731, 10.000000000000000, 3.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 6038.6324280926056, 10.000000000000000, 3.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 32946.952425437150, 10.000000000000000, 3.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 166431.66712118863, 10.000000000000000, 3.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 791818.30272061308, 10.000000000000000, 3.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 3589678.0198700386, 10.000000000000000, 3.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 15637649.698874988, 10.000000000000000, 3.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 65871447.346678361, 10.000000000000000, 3.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler053 = 2.5000000000000013e-09;
 
 // Test data for a=10.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 3.7252902984619141e-09
+// max(|f - f_GSL|): 3.7252902984619141e-09 at index 20
 // max(|f - f_GSL| / |f_GSL|): 7.5580354912480585e-11
+// mean(f - f_GSL): -3.0836124902575546e-10
+// variance(f - f_GSL): 6.1295871676623622e-19
+// stddev(f - f_GSL): 7.8291680066673511e-10
 const testcase_conf_hyperg<double>
 data054[21] =
 {
-  { 6.9661267889527048e-06, 10.000000000000000, 4.0000000000000000, 
-         -10.000000000000000 },
+  { 6.9661267889527014e-06, 10.000000000000000, 4.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { -3.0301514396282942e-06, 10.000000000000000, 4.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { -3.7983599138168025e-05, 10.000000000000000, 4.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { -9.3615660121163871e-05, 10.000000000000000, 4.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { -7.0821490761895943e-05, 10.000000000000000, 4.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.00030692863727646260, 10.000000000000000, 4.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.0010659895649527829, 10.000000000000000, 4.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { -0.00042230102633456049, 10.000000000000000, 4.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { -0.010168047735237568, 10.000000000000000, 4.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.036903514708782073, 10.000000000000000, 4.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 4.0000000000000000, 
-         0.0000000000000000 },
-  { 9.3384756433214022, 10.000000000000000, 4.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 9.3384756433213987, 10.000000000000000, 4.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 63.905561372021388, 10.000000000000000, 4.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 370.08498456728779, 10.000000000000000, 4.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1922.9526217493540, 10.000000000000000, 4.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 9245.0380014351485, 10.000000000000000, 4.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 41898.961838459785, 10.000000000000000, 4.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 181211.14084739226, 10.000000000000000, 4.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 754384.25570692308, 10.000000000000000, 4.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 3042060.4915799876, 10.000000000000000, 4.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 11939626.424402930, 10.000000000000000, 4.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler054 = 5.0000000000000026e-09;
 
 // Test data for a=10.000000000000000, c=5.0000000000000000.
-// max(|f - f_GSL|): 1.1641532182693481e-10
-// max(|f - f_GSL| / |f_GSL|): 4.6734083284321249e-11
+// max(|f - f_GSL|): 1.1641532182693481e-10 at index 19
+// max(|f - f_GSL| / |f_GSL|): 4.6733947661248822e-11
+// mean(f - f_GSL): -5.7681855797857804e-12
+// variance(f - f_GSL): 1.7467781563495526e-24
+// stddev(f - f_GSL): 1.3216573520960538e-12
 const testcase_conf_hyperg<double>
 data055[21] =
 {
-  { -6.2454929831989742e-06, 10.000000000000000, 5.0000000000000000, 
-         -10.000000000000000 },
+  { -6.2454929831989734e-06, 10.000000000000000, 5.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { -1.1459481808048817e-05, 10.000000000000000, 5.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { -8.1646988801669512e-06, 10.000000000000000, 5.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 3.1240400671775088e-05, 10.000000000000000, 5.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.00014164298152379191, 10.000000000000000, 5.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.00023172833594738382, 10.000000000000000, 5.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { -0.00036825094062005215, 10.000000000000000, 5.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { -0.0030227862937631683, 10.000000000000000, 5.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { -0.00028642387986584918, 10.000000000000000, 5.0000000000000000, 
-         -2.0000000000000000 },
-  { 0.10617896040159881, 10.000000000000000, 5.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { 0.10617896040159878, 10.000000000000000, 5.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 5.0000000000000000, 
-         0.0000000000000000 },
-  { 6.4803694966028260, 10.000000000000000, 5.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 6.4803694966028269, 10.000000000000000, 5.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 35.201619637445276, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 171.58787257237464, 10.000000000000000, 5.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 775.87148867205678, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 3317.4071019773678, 10.000000000000000, 5.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 13578.260535269774, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 53651.761875039716, 10.000000000000000, 5.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 205900.60390283042, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 770979.49612334219, 10.000000000000000, 5.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 2826613.2348531331, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler055 = 2.5000000000000013e-09;
 
 // Test data for a=10.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 2.3283064365386963e-10
+// max(|f - f_GSL|): 2.3283064365386963e-10 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.5542822249778647e-10
+// mean(f - f_GSL): -1.6360259531513281e-11
+// variance(f - f_GSL): 2.4601199281092265e-21
+// stddev(f - f_GSL): 4.9599596047843236e-11
 const testcase_conf_hyperg<double>
 data056[21] =
 {
   { 9.6084507433830306e-07, 10.000000000000000, 6.0000000000000000, 
-         -10.000000000000000 },
+         -10.000000000000000, 0.0 },
   { 7.7131127554174726e-06, 10.000000000000000, 6.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 2.3074149009167486e-05, 10.000000000000000, 6.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 4.0105919781332888e-05, 10.000000000000000, 6.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { -1.0325734976052423e-20, 10.000000000000000, 6.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { -0.00029188857701064686, 10.000000000000000, 6.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { -0.0010659895649527829, 10.000000000000000, 6.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { -0.00044452739614164207, 10.000000000000000, 6.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.020049671590609285, 10.000000000000000, 6.0000000000000000, 
-         -2.0000000000000000 },
-  { 0.17092282236966813, 10.000000000000000, 6.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { 0.17092282236966808, 10.000000000000000, 6.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 6.0000000000000000, 
-         0.0000000000000000 },
-  { 4.9520550902714549, 10.000000000000000, 6.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 4.9520550902714575, 10.000000000000000, 6.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 22.206263831706924, 10.000000000000000, 6.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 93.074943420842843, 10.000000000000000, 6.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 371.20964440523989, 10.000000000000000, 6.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1424.6976175888547, 10.000000000000000, 6.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 5302.2070001902330, 10.000000000000000, 6.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 19239.311823447424, 10.000000000000000, 6.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 68341.221999215923, 10.000000000000000, 6.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 238389.83519072225, 10.000000000000000, 6.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 818592.04096678528, 10.000000000000000, 6.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler056 = 2.5000000000000012e-08;
 
 // Test data for a=10.000000000000000, c=7.0000000000000000.
-// max(|f - f_GSL|): 2.3283064365386963e-10
-// max(|f - f_GSL| / |f_GSL|): 1.7003920117988582e-08
+// max(|f - f_GSL|): 2.3283064365386963e-10 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.7003920331697668e-08
+// mean(f - f_GSL): -1.3064360298085007e-11
+// variance(f - f_GSL): 2.5356040132507882e-21
+// stddev(f - f_GSL): 5.0354781433849840e-11
 const testcase_conf_hyperg<double>
 data057[21] =
 {
-  { 3.9634859316455036e-06, 10.000000000000000, 7.0000000000000000, 
-         -10.000000000000000 },
+  { 3.9634859316455028e-06, 10.000000000000000, 7.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { 4.4074930030956985e-06, 10.000000000000000, 7.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { -5.3248036175001926e-06, 10.000000000000000, 7.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { -5.0660109197473119e-05, 10.000000000000000, 7.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { -0.00017705372690473989, 10.000000000000000, 7.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { -0.00034759250392107574, 10.000000000000000, 7.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.00029072442680530428, 10.000000000000000, 7.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.0071124383382662791, 10.000000000000000, 7.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.046185850628367824, 10.000000000000000, 7.0000000000000000, 
-         -2.0000000000000000 },
-  { 0.22919473120601763, 10.000000000000000, 7.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { 0.22919473120601758, 10.000000000000000, 7.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 7.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 4.0342754120781059, 10.000000000000000, 7.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 15.423188523958418, 10.000000000000000, 7.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 56.669907747565212, 10.000000000000000, 7.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 201.92649139242229, 10.000000000000000, 7.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 702.01780019948944, 10.000000000000000, 7.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 2391.7564185640726, 10.000000000000000, 7.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 8011.5144629634615, 10.000000000000000, 7.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 26450.087535814702, 10.000000000000000, 7.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 86239.964657766584, 10.000000000000000, 7.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 278127.83396458329, 10.000000000000000, 7.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler057 = 1.0000000000000004e-06;
 
 // Test data for a=10.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 2.9103830456733704e-11
-// max(|f - f_GSL| / |f_GSL|): 3.9656315544900790e-11
+// max(|f - f_GSL|): 2.9103830456733704e-11 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.9656147630620638e-11
+// mean(f - f_GSL): -2.2995627648324885e-12
+// variance(f - f_GSL): 3.7719610241202714e-23
+// stddev(f - f_GSL): 6.1416292822998289e-12
 const testcase_conf_hyperg<double>
 data058[21] =
 {
-  { -5.0444366402760974e-06, 10.000000000000000, 8.0000000000000000, 
-         -10.000000000000000 },
+  { -5.0444366402760966e-06, 10.000000000000000, 8.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { -1.5426225510834945e-05, 10.000000000000000, 8.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { -3.7273625322501334e-05, 10.000000000000000, 8.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { -6.3325136496841588e-05, 10.000000000000000, 8.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.0000000000000000, 10.000000000000000, 8.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.00065507818046664252, 10.000000000000000, 8.0000000000000000, 
-         -5.0000000000000000 },
-  { 0.0040701419752742617, 10.000000000000000, 8.0000000000000000, 
-         -4.0000000000000000 },
+         -5.0000000000000000, 0.0 },
+  { 0.0040701419752742626, 10.000000000000000, 8.0000000000000000, 
+         -4.0000000000000000, 0.0 },
   { 0.018670150637948978, 10.000000000000000, 8.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.075186268464784836, 10.000000000000000, 8.0000000000000000, 
-         -2.0000000000000000 },
-  { 0.28101901756151842, 10.000000000000000, 8.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { 0.28101901756151837, 10.000000000000000, 8.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 8.0000000000000000, 
-         0.0000000000000000 },
-  { 3.4356061998579595, 10.000000000000000, 8.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 3.4356061998579603, 10.000000000000000, 8.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 11.494087265003234, 10.000000000000000, 8.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 37.660381730976880, 10.000000000000000, 8.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 121.32922229587608, 10.000000000000000, 8.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 385.46195489141422, 10.000000000000000, 8.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 1210.2863804782053, 10.000000000000000, 8.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 3762.0609740531836, 10.000000000000000, 8.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 11592.614394051165, 10.000000000000000, 8.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 35450.992183142305, 10.000000000000000, 8.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 107684.94388572175, 10.000000000000000, 8.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler058 = 2.5000000000000013e-09;
 
 // Test data for a=10.000000000000000, c=9.0000000000000000.
-// max(|f - f_GSL|): 9.0949470177292824e-12
-// max(|f - f_GSL| / |f_GSL|): 3.7408279162146281e-11
+// max(|f - f_GSL|): 9.0949470177292824e-12 at index 19
+// max(|f - f_GSL| / |f_GSL|): 3.7408111247866129e-11
+// mean(f - f_GSL): 4.8555562242291194e-13
+// variance(f - f_GSL): 1.2377623779491325e-26
+// stddev(f - f_GSL): 1.1125476969321956e-13
 const testcase_conf_hyperg<double>
 data059[21] =
 {
-  { -5.0444366402760974e-06, 10.000000000000000, 9.0000000000000000, 
-         -10.000000000000000 },
+  { -5.0444366402760966e-06, 10.000000000000000, 9.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { 0.0000000000000000, 10.000000000000000, 9.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 3.7273625322501334e-05, 10.000000000000000, 9.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.00020264043678989247, 10.000000000000000, 9.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.00082625072555545290, 10.000000000000000, 9.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.0029946431107046520, 10.000000000000000, 9.0000000000000000, 
-         -5.0000000000000000 },
-  { 0.010175354938185655, 10.000000000000000, 9.0000000000000000, 
-         -4.0000000000000000 },
+         -5.0000000000000000, 0.0 },
+  { 0.010175354938185657, 10.000000000000000, 9.0000000000000000, 
+         -4.0000000000000000, 0.0 },
   { 0.033191378911909299, 10.000000000000000, 9.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.10526077585069878, 10.000000000000000, 9.0000000000000000, 
-         -2.0000000000000000 },
-  { 0.32700394770794872, 10.000000000000000, 9.0000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { 0.32700394770794866, 10.000000000000000, 9.0000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 9.0000000000000000, 
-         0.0000000000000000 },
-  { 3.0203131427322725, 10.000000000000000, 9.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 3.0203131427322729, 10.000000000000000, 9.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 9.0310685653596838, 10.000000000000000, 9.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 26.780715897583555, 10.000000000000000, 9.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 78.863994492319449, 10.000000000000000, 9.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 230.86491415956360, 10.000000000000000, 9.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 672.38132248789179, 10.000000000000000, 9.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1949.5700594283705, 10.000000000000000, 9.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 5630.6984199677090, 10.000000000000000, 9.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 16206.167855150768, 10.000000000000000, 9.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 46500.316677925293, 10.000000000000000, 9.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler059 = 2.5000000000000013e-09;
 
 // Test data for a=10.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_conf_hyperg<double>
 data060[21] =
 {
-  { 4.5399929762484854e-05, 10.000000000000000, 10.000000000000000, 
-         -10.000000000000000 },
+  { 4.5399929762484847e-05, 10.000000000000000, 10.000000000000000, 
+         -10.000000000000000, 0.0 },
   { 0.00012340980408667956, 10.000000000000000, 10.000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.00033546262790251185, 10.000000000000000, 10.000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 0.00091188196555451624, 10.000000000000000, 10.000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.0024787521766663585, 10.000000000000000, 10.000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.0067379469990854670, 10.000000000000000, 10.000000000000000, 
-         -5.0000000000000000 },
-  { 0.018315638888734179, 10.000000000000000, 10.000000000000000, 
-         -4.0000000000000000 },
+         -5.0000000000000000, 0.0 },
+  { 0.018315638888734182, 10.000000000000000, 10.000000000000000, 
+         -4.0000000000000000, 0.0 },
   { 0.049787068367863944, 10.000000000000000, 10.000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.13533528323661270, 10.000000000000000, 10.000000000000000, 
-         -2.0000000000000000 },
-  { 0.36787944117144233, 10.000000000000000, 10.000000000000000, 
-         -1.0000000000000000 },
+         -2.0000000000000000, 0.0 },
+  { 0.36787944117144228, 10.000000000000000, 10.000000000000000, 
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 10.000000000000000, 
-         0.0000000000000000 },
-  { 2.7182818284590451, 10.000000000000000, 10.000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 2.7182818284590455, 10.000000000000000, 10.000000000000000, 
+         1.0000000000000000, 0.0 },
   { 7.3890560989306504, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 20.085536923187668, 10.000000000000000, 10.000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 54.598150033144236, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 148.41315910257660, 10.000000000000000, 10.000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 403.42879349273511, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1096.6331584284585, 10.000000000000000, 10.000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 2980.9579870417283, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 8103.0839275753842, 10.000000000000000, 10.000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 22026.465794806718, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler060 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, c=1.0000000000000000.
-// max(|f - f_GSL|): 0.0039062500000000000
+// max(|f - f_GSL|): 0.0039062500000000000 at index 20
 // max(|f - f_GSL| / |f_GSL|): 3.8043537688323639e-14
+// mean(f - f_GSL): -3.3615948355170052e-05
+// variance(f - f_GSL): 7.8735813272906564e-07
+// stddev(f - f_GSL): 0.00088733203071289252
 const testcase_conf_hyperg<double>
 data061[21] =
 {
-  { 0.00018021852293239509, 20.000000000000000, 1.0000000000000000, 
-         -10.000000000000000 },
+  { 0.00018021852293239455, 20.000000000000000, 1.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { 0.0017726368057851866, 20.000000000000000, 1.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 0.00058280040382329280, 20.000000000000000, 1.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { -0.0049657717020590141, 20.000000000000000, 1.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { -0.0012360336087128597, 20.000000000000000, 1.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 0.014898894139255305, 20.000000000000000, 1.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { -0.013800784612552078, 20.000000000000000, 1.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { -0.012192213426039619, 20.000000000000000, 1.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.050311246773136212, 20.000000000000000, 1.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { -0.025985814502838493, 20.000000000000000, 1.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 1.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1563.6577385252017, 20.000000000000000, 1.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 86377.091910766088, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 2216718.8789979252, 20.000000000000000, 1.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 38045018.520647161, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 504376263.68346804, 20.000000000000000, 1.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 5565635666.7972050, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 53451562646.544518, 20.000000000000000, 1.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 460009135340.33832, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 3620401937301.4907, 20.000000000000000, 1.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 26446266822604.152, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler061 = 2.5000000000000015e-12;
 
 // Test data for a=20.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.00097656250000000000
+// max(|f - f_GSL|): 0.00097656250000000000 at index 20
 // max(|f - f_GSL| / |f_GSL|): 3.3638062074418344e-12
+// mean(f - f_GSL): 4.3034663341234841e-05
+// variance(f - f_GSL): 4.5752396645413330e-08
+// stddev(f - f_GSL): 0.00021389809874193210
 const testcase_conf_hyperg<double>
 data062[21] =
 {
-  { 6.6647681992684102e-05, 20.000000000000000, 2.0000000000000000, 
-         -10.000000000000000 },
+  { 6.6647681992684074e-05, 20.000000000000000, 2.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { -3.7248253270227151e-05, 20.000000000000000, 2.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { -0.00024392611307344034, 20.000000000000000, 2.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 2.4034559592246202e-05, 20.000000000000000, 2.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 0.00081645960584843073, 20.000000000000000, 2.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { -0.00051326387116462039, 20.000000000000000, 2.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { -0.0021786279856333920, 20.000000000000000, 2.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.0061029380625179973, 20.000000000000000, 2.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { -0.011834301617155166, 20.000000000000000, 2.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.037622016973681061, 20.000000000000000, 2.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 2.0000000000000000, 
-         0.0000000000000000 },
-  { 303.10954080179744, 20.000000000000000, 2.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 303.10954080179823, 20.000000000000000, 2.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 11508.923130556599, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 234541.86023461280, 20.000000000000000, 2.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 3398931.2897027107, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 39382712.287920594, 20.000000000000000, 2.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 388350500.37087941, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 3385284070.5527182, 20.000000000000000, 2.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 26751585258.405773, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 195061928138.27676, 20.000000000000000, 2.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 1329571695324.3132, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler062 = 2.5000000000000017e-10;
 
 // Test data for a=20.000000000000000, c=3.0000000000000000.
-// max(|f - f_GSL|): 1.5258789062500000e-05
+// max(|f - f_GSL|): 1.5258789062500000e-05 at index 20
 // max(|f - f_GSL| / |f_GSL|): 1.0636412229856690e-11
+// mean(f - f_GSL): 4.4497851428053653e-07
+// variance(f - f_GSL): 1.1521071605323705e-11
+// stddev(f - f_GSL): 3.3942704083976139e-06
 const testcase_conf_hyperg<double>
 data063[21] =
 {
-  { -8.6671962318505780e-06, 20.000000000000000, 3.0000000000000000, 
-         -10.000000000000000 },
+  { -8.6671962318505695e-06, 20.000000000000000, 3.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { -1.8205565180535425e-05, 20.000000000000000, 3.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 1.5620588717927631e-05, 20.000000000000000, 3.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 7.6532767373103759e-05, 20.000000000000000, 3.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { -5.2708600380172109e-05, 20.000000000000000, 3.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { -0.00028546308121326275, 20.000000000000000, 3.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.00056490746026256267, 20.000000000000000, 3.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { -5.0602588875468348e-07, 20.000000000000000, 3.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { -0.0021376080642211692, 20.000000000000000, 3.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.0028873127225376104, 20.000000000000000, 3.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 3.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 106.38207299128948, 20.000000000000000, 3.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 2880.5734732831320, 20.000000000000000, 3.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 47353.756965165718, 20.000000000000000, 3.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 584732.27978148905, 20.000000000000000, 3.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 5957333.1101320982, 20.000000000000000, 3.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 52725595.633352734, 20.000000000000000, 3.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 418560160.03369552, 20.000000000000000, 3.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 3045067611.3150902, 20.000000000000000, 3.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 20614600690.354652, 20.000000000000000, 3.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 131344201933.74118, 20.000000000000000, 3.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler063 = 1.0000000000000007e-09;
 
 // Test data for a=20.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 1.5258789062500000e-05
+// max(|f - f_GSL|): 1.5258789062500000e-05 at index 20
 // max(|f - f_GSL| / |f_GSL|): 1.8743522900030841e-11
+// mean(f - f_GSL): -8.3223886940195093e-07
+// variance(f - f_GSL): 1.0926580899883890e-11
+// stddev(f - f_GSL): 3.3055379138475917e-06
 const testcase_conf_hyperg<double>
 data064[21] =
 {
-  { -1.1286669552452399e-06, 20.000000000000000, 4.0000000000000000, 
-         -10.000000000000000 },
+  { -1.1286669552452397e-06, 20.000000000000000, 4.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { 3.9595188785137704e-06, 20.000000000000000, 4.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 8.6940153052790051e-06, 20.000000000000000, 4.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { -1.0858814018067509e-05, 20.000000000000000, 4.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { -4.1826023828710966e-05, 20.000000000000000, 4.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 6.6455893622436316e-05, 20.000000000000000, 4.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 0.00014238710517977906, 20.000000000000000, 4.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { -0.00071796294700866132, 20.000000000000000, 4.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.0020884061677332645, 20.000000000000000, 4.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { -0.012768833157321973, 20.000000000000000, 4.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 4.0000000000000000, 
-         0.0000000000000000 },
-  { 50.659916934657808, 20.000000000000000, 4.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 50.659916934657737, 20.000000000000000, 4.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 1014.3134442335910, 20.000000000000000, 4.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 13665.584449611577, 20.000000000000000, 4.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 145123.62797278623, 20.000000000000000, 4.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 1308144.4519382305, 20.000000000000000, 4.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 10438124.578674613, 20.000000000000000, 4.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 75719160.524424627, 20.000000000000000, 4.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 508510905.96310252, 20.000000000000000, 4.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 3203200954.5618095, 20.000000000000000, 4.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 19111993543.124691, 20.000000000000000, 4.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler064 = 1.0000000000000007e-09;
 
 // Test data for a=20.000000000000000, c=5.0000000000000000.
-// max(|f - f_GSL|): 3.3378601074218750e-06
+// max(|f - f_GSL|): 3.3378601074218750e-06 at index 20
 // max(|f - f_GSL| / |f_GSL|): 1.7481076775232650e-09
+// mean(f - f_GSL): -1.3214810701104223e-07
+// variance(f - f_GSL): 5.3952094505284637e-13
+// stddev(f - f_GSL): 7.3452089490554747e-07
 const testcase_conf_hyperg<double>
 data065[21] =
 {
-  { 8.4755643455671027e-07, 20.000000000000000, 5.0000000000000000, 
-         -10.000000000000000 },
+  { 8.4755643455670974e-07, 20.000000000000000, 5.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { 8.5721061862565697e-07, 20.000000000000000, 5.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { -2.8228700837555599e-06, 20.000000000000000, 5.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { -6.6486802159657585e-06, 20.000000000000000, 5.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 1.1816828026110384e-05, 20.000000000000000, 5.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 3.6173872819745774e-05, 20.000000000000000, 5.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { -0.00011481934287296670, 20.000000000000000, 5.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 1.2650647218867087e-07, 20.000000000000000, 5.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.0010626537950495965, 20.000000000000000, 5.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { -0.0085499011205641944, 20.000000000000000, 5.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 5.0000000000000000, 
-         0.0000000000000000 },
-  { 29.126637808809392, 20.000000000000000, 5.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 29.126637808809381, 20.000000000000000, 5.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 446.26914983518060, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 5005.6470164856382, 20.000000000000000, 5.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 46145.715220935184, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 370342.18574452243, 20.000000000000000, 5.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 2676402.7371661114, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 17803174.102030005, 20.000000000000000, 5.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 110674464.63597310, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 650149739.34228492, 20.000000000000000, 5.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 3639417243.5150661, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler065 = 1.0000000000000005e-07;
 
 // Test data for a=20.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 3.5762786865234375e-07
-// max(|f - f_GSL| / |f_GSL|): 7.4494573571551227e-09
+// max(|f - f_GSL|): 3.5762786865234375e-07 at index 20
+// max(|f - f_GSL| / |f_GSL|): 7.4494596183568454e-09
+// mean(f - f_GSL): -1.3194579482834487e-08
+// variance(f - f_GSL): 6.2283002611266565e-15
+// stddev(f - f_GSL): 7.8919580974094487e-08
 const testcase_conf_hyperg<double>
 data066[21] =
 {
-  { -1.9022359545310046e-08, 20.000000000000000, 6.0000000000000000, 
-         -10.000000000000000 },
+  { -1.9022359545310003e-08, 20.000000000000000, 6.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { -7.4533809656234698e-07, 20.000000000000000, 6.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { -9.7852420358724080e-07, 20.000000000000000, 6.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 3.0181569866746340e-06, 20.000000000000000, 6.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 7.9816910701457280e-06, 20.000000000000000, 6.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { -2.0133163153966071e-05, 20.000000000000000, 6.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { -4.7462368393259685e-05, 20.000000000000000, 6.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 0.00031910869938964821, 20.000000000000000, 6.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { -0.0010380528468056441, 20.000000000000000, 6.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.0084752097558651058, 20.000000000000000, 6.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 6.0000000000000000, 
-         0.0000000000000000 },
-  { 19.002159564861387, 20.000000000000000, 6.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 19.002159564861383, 20.000000000000000, 6.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 229.93981298721295, 20.000000000000000, 6.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 2180.3120758940972, 20.000000000000000, 6.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 17610.732510305290, 20.000000000000000, 6.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 126633.20907014767, 20.000000000000000, 6.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 832692.83016874129, 20.000000000000000, 6.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 5097225.0940651651, 20.000000000000000, 6.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 29414585.342530526, 20.000000000000000, 6.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 161513229.88138971, 20.000000000000000, 6.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 849871092.10959554, 20.000000000000000, 6.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler066 = 5.0000000000000019e-07;
 
 // Test data for a=20.000000000000000, c=7.0000000000000000.
-// max(|f - f_GSL|): 1.7881393432617188e-07
+// max(|f - f_GSL|): 1.7881393432617188e-07 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.3690711970375556e-09
+// mean(f - f_GSL): -7.4560448694733496e-09
+// variance(f - f_GSL): 1.5415851296503409e-15
+// stddev(f - f_GSL): 3.9263024968159810e-08
 const testcase_conf_hyperg<double>
 data067[21] =
 {
-  { -1.7754301607387146e-07, 20.000000000000000, 7.0000000000000000, 
-         -10.000000000000000 },
+  { -1.7754301607387138e-07, 20.000000000000000, 7.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { -6.2128605089471266e-08, 20.000000000000000, 7.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 9.1338873372533148e-07, 20.000000000000000, 7.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 1.6657400269273180e-06, 20.000000000000000, 7.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { -4.7904165143355465e-06, 20.000000000000000, 7.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { -1.5503088351319618e-05, 20.000000000000000, 7.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 5.6425108496954337e-05, 20.000000000000000, 7.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 9.1083552345479015e-05, 20.000000000000000, 7.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { -0.0018058773247853388, 20.000000000000000, 7.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.032850147696977743, 20.000000000000000, 7.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 7.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 13.551527852090807, 20.000000000000000, 7.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 133.23579819973105, 20.000000000000000, 7.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 1083.6769250393436, 20.000000000000000, 7.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 7739.1410905637622, 20.000000000000000, 7.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 50175.328973240226, 20.000000000000000, 7.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 301599.46814102860, 20.000000000000000, 7.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 1705051.1866143662, 20.000000000000000, 7.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 9159788.2353733145, 20.000000000000000, 7.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 47122070.398665302, 20.000000000000000, 7.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 233529421.53991735, 20.000000000000000, 7.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler067 = 2.5000000000000009e-07;
 
 // Test data for a=20.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 5.9604644775390625e-08
-// max(|f - f_GSL| / |f_GSL|): 1.2249590184458766e-09
+// max(|f - f_GSL|): 5.9604644775390625e-08 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.2249582729983602e-09
+// mean(f - f_GSL): -2.6616969148797329e-09
+// variance(f - f_GSL): 1.7023121382985524e-16
+// stddev(f - f_GSL): 1.3047268443235743e-08
 const testcase_conf_hyperg<double>
 data068[21] =
 {
-  { 4.4385719622857099e-08, 20.000000000000000, 8.0000000000000000, 
-         -10.000000000000000 },
+  { 4.4385719622857066e-08, 20.000000000000000, 8.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { 2.7870855352561944e-07, 20.000000000000000, 8.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { 2.7221706037028333e-07, 20.000000000000000, 8.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { -1.5211293805365477e-06, 20.000000000000000, 8.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { -4.2978336531553913e-06, 20.000000000000000, 8.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 1.1339557446266733e-05, 20.000000000000000, 8.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { 5.3526365220658988e-05, 20.000000000000000, 8.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { -0.00029461053269513242, 20.000000000000000, 8.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { -0.00026793636646740143, 20.000000000000000, 8.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.061061258434452807, 20.000000000000000, 8.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 8.0000000000000000, 
-         0.0000000000000000 },
-  { 10.312756690132909, 20.000000000000000, 8.0000000000000000, 
-         1.0000000000000000 },
+         0.0000000000000000, 0.0 },
+  { 10.312756690132913, 20.000000000000000, 8.0000000000000000, 
+         1.0000000000000000, 0.0 },
   { 84.471824856846425, 20.000000000000000, 8.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 597.47335666854985, 20.000000000000000, 8.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 3805.9786364107408, 20.000000000000000, 8.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 22386.068461641658, 20.000000000000000, 8.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 123573.63516975302, 20.000000000000000, 8.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 647514.24141570868, 20.000000000000000, 8.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 3247628.2434586394, 20.000000000000000, 8.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 15690070.625286419, 20.000000000000000, 8.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 73379158.893325046, 20.000000000000000, 8.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler068 = 1.0000000000000005e-07;
 
 // Test data for a=20.000000000000000, c=9.0000000000000000.
-// max(|f - f_GSL|): 7.4505805969238281e-09
+// max(|f - f_GSL|): 7.4505805969238281e-09 at index 20
 // max(|f - f_GSL| / |f_GSL|): 1.7712852063552690e-08
+// mean(f - f_GSL): 2.9817087070221364e-10
+// variance(f - f_GSL): 2.6857406568168514e-18
+// stddev(f - f_GSL): 1.6388229485874463e-09
 const testcase_conf_hyperg<double>
 data069[21] =
 {
-  { 7.3976263576568592e-08, 20.000000000000000, 9.0000000000000000, 
-         -10.000000000000000 },
+  { 7.3976263576568565e-08, 20.000000000000000, 9.0000000000000000, 
+         -10.000000000000000, 0.0 },
   { -9.0753238092548168e-09, 20.000000000000000, 9.0000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { -5.5549484970396693e-07, 20.000000000000000, 9.0000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { -1.1104933512848787e-06, 20.000000000000000, 9.0000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 3.2483424385770483e-06, 20.000000000000000, 9.0000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { 1.7493431113569438e-05, 20.000000000000000, 9.0000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { -3.9066110636117233e-05, 20.000000000000000, 9.0000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { -0.00040356155493308509, 20.000000000000000, 9.0000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.0037671531470534550, 20.000000000000000, 9.0000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.090944344485248435, 20.000000000000000, 9.0000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 9.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 8.2390942957149722, 20.000000000000000, 9.0000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 57.468054562166706, 20.000000000000000, 9.0000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 358.00109079775746, 20.000000000000000, 9.0000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 2051.3704389047002, 20.000000000000000, 9.0000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 11012.597503064209, 20.000000000000000, 9.0000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 56082.113308934473, 20.000000000000000, 9.0000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 273348.46918863337, 20.000000000000000, 9.0000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 1283674.4996444662, 20.000000000000000, 9.0000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 5838026.8730425332, 20.000000000000000, 9.0000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 25817349.972859699, 20.000000000000000, 9.0000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler069 = 1.0000000000000004e-06;
 
 // Test data for a=20.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 1.8626451492309570e-09
-// max(|f - f_GSL| / |f_GSL|): 3.6960743356593788e-09
+// max(|f - f_GSL|): 1.8626451492309570e-09 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.6960738533111097e-09
+// mean(f - f_GSL): 1.6480220132168215e-10
+// variance(f - f_GSL): 1.5134021047767599e-19
+// stddev(f - f_GSL): 3.8902469134706086e-10
 const testcase_conf_hyperg<double>
 data070[21] =
 {
-  { -4.1157677792944960e-08, 20.000000000000000, 10.000000000000000, 
-         -10.000000000000000 },
+  { -4.1157677792944940e-08, 20.000000000000000, 10.000000000000000, 
+         -10.000000000000000, 0.0 },
   { -2.0187210039960914e-07, 20.000000000000000, 10.000000000000000, 
-         -9.0000000000000000 },
+         -9.0000000000000000, 0.0 },
   { -2.2272304939386817e-07, 20.000000000000000, 10.000000000000000, 
-         -8.0000000000000000 },
+         -8.0000000000000000, 0.0 },
   { 1.2925568212606171e-06, 20.000000000000000, 10.000000000000000, 
-         -7.0000000000000000 },
+         -7.0000000000000000, 0.0 },
   { 5.5744573775996210e-06, 20.000000000000000, 10.000000000000000, 
-         -6.0000000000000000 },
+         -6.0000000000000000, 0.0 },
   { -6.2568272011787289e-06, 20.000000000000000, 10.000000000000000, 
-         -5.0000000000000000 },
+         -5.0000000000000000, 0.0 },
   { -0.00011955177906335608, 20.000000000000000, 10.000000000000000, 
-         -4.0000000000000000 },
+         -4.0000000000000000, 0.0 },
   { 9.2475405516991146e-05, 20.000000000000000, 10.000000000000000, 
-         -3.0000000000000000 },
+         -3.0000000000000000, 0.0 },
   { 0.010123531287569976, 20.000000000000000, 10.000000000000000, 
-         -2.0000000000000000 },
+         -2.0000000000000000, 0.0 },
   { 0.12118937229909534, 20.000000000000000, 10.000000000000000, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 10.000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 6.8319857942415538, 20.000000000000000, 10.000000000000000, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
   { 41.356658140815220, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000 },
+         2.0000000000000000, 0.0 },
   { 229.57496033810904, 20.000000000000000, 10.000000000000000, 
-         3.0000000000000000 },
+         3.0000000000000000, 0.0 },
   { 1192.7830549969501, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000 },
+         4.0000000000000000, 0.0 },
   { 5878.6003887215920, 20.000000000000000, 10.000000000000000, 
-         5.0000000000000000 },
+         5.0000000000000000, 0.0 },
   { 27741.749322673899, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000 },
+         6.0000000000000000, 0.0 },
   { 126220.54599305880, 20.000000000000000, 10.000000000000000, 
-         7.0000000000000000 },
+         7.0000000000000000, 0.0 },
   { 556592.10886612453, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000 },
+         8.0000000000000000, 0.0 },
   { 2388555.2873243927, 20.000000000000000, 10.000000000000000, 
-         9.0000000000000000 },
+         9.0000000000000000, 0.0 },
   { 10008079.497419352, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
 };
 const double toler070 = 2.5000000000000009e-07;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_conf_hyperg<Tp> (&data)[Num], Tp toler)
+  test(const testcase_conf_hyperg<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
         {
-       const Tp f = __gnu_cxx::conf_hyperg(data[i].a, data[i].c,
+       const Ret f = __gnu_cxx::conf_hyperg(data[i].a, data[i].c,
                     data[i].x);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index e526f1d..1cede80 100644 (file)
@@ -1,7 +1,6 @@
-// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__ -ffp-contract=off" }
-// { dg-additional-options "-ffloat-store" { target { m68*-*-* || ia32 } } }
 // { dg-do run { target c++11 } }
-
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
+//
 // Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data001[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data002[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data003[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler003 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data004[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler004 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data005[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler005 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data006[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler006 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data007[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler007 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data008[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler008 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data009[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler009 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data010[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler010 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data011[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler011 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data012[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler012 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data013[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler013 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data014[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler014 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data015[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler015 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data016[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler016 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data017[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler017 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data018[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler018 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data019[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler019 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data020[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler020 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data021[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler021 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data022[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler022 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data023[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler023 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data024[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler024 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data025[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler025 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data026[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler026 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data027[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler027 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data028[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler028 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data029[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler029 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=10.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data030[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler030 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data031[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler031 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data032[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler032 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data033[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler033 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data034[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler034 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=20.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data035[19] =
 {
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler035 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data036[19] =
 {
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler036 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data037[19] =
 {
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler037 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data038[19] =
 {
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler038 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data039[19] =
 {
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler039 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data040[19] =
 {
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler040 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2734148235941270e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.7062685186203797e-16
+// mean(f - f_GSL): 1.1686558153949016e-17
+// variance(f - f_GSL): 1.0964410526798704e-32
+// stddev(f - f_GSL): 1.0471108120346530e-16
 const testcase_hyperg<double>
 data041[19] =
 {
   { 0.91383715388743736, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.92151232618202372, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.92955086110354845, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.93798900119104855, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.94686887307107392, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.95623987262143295, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.96616049387450131, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.96616049387450120, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.97670078782187519, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.98794573712298384, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0129947682256604, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0270980168168973, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0425304520063581, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0595915916161471, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0787052023767585, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.1005053642285867, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.1260196351148746, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.1571341977338991, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 1.1982111053717450, 0.50000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.1982111053717452, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler041 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2341054918357306e-16
+// max(|f - f_GSL|): 3.3306690738754696e-16 at index 8
+// max(|f - f_GSL| / |f_GSL|): 3.3511582377535958e-16
+// mean(f - f_GSL): 4.0902953538821554e-17
+// variance(f - f_GSL): 1.9241779613319129e-33
+// stddev(f - f_GSL): 4.3865452936586813e-17
 const testcase_hyperg<double>
 data042[19] =
 {
   { 0.95255425675562699, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.95712841850078267, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.96184734120034554, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.96672141255196176, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.97176228710138646, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.97698311668286320, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.97698311668286308, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.98239883902556036, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.98802654401961032, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.99388594556732701, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0063957328951061, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0131053706824598, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0201679332118803, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0276315524377497, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0355569942816882, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0440233080381554, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0531375808028993, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0630536689840200, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0740149570414563, 0.50000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler042 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 5.5511151231257827e-16
+// max(|f - f_GSL|): 5.5511151231257827e-16 at index 7
 // max(|f - f_GSL| / |f_GSL|): 5.5963253065363064e-16
+// mean(f - f_GSL): 5.8432790769745078e-18
+// variance(f - f_GSL): 2.0022663489405960e-36
+// stddev(f - f_GSL): 1.4150146108576393e-18
 const testcase_hyperg<double>
 data043[19] =
 {
   { 0.96694084713323880, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.97024454918852632, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.97362815600391439, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.97709622064205104, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.98065374770570635, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.98430626119885511, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.98805988669621048, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.98430626119885523, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.98805988669621037, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.99192145185739655, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.99589861079880937, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0042354366729904, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0086161755545404, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0131552481403503, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0178679218284707, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0227723400312978, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0278904483717863, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 1.0332494012993472, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0332494012993474, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0388838453357794, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0448400142331342, 0.50000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler043 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 3.3306690738754696e-16
+// max(|f - f_GSL|): 3.3306690738754696e-16 at index 7
 // max(|f - f_GSL| / |f_GSL|): 3.3511105824376917e-16
+// mean(f - f_GSL): -1.7529837230923523e-17
+// variance(f - f_GSL): 3.3658097325691423e-33
+// stddev(f - f_GSL): 5.8015599045163211e-17
 const testcase_hyperg<double>
 data044[19] =
 {
   { 0.97456073259047449, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.97715689327833399, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.97980416868943110, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.98250498942832487, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.98526199049760810, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.98807803762902791, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.99095625840920321, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.99095625840920332, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.99390007937387959, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.99691327061866730, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0031648997547440, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0064131494767281, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0097505810668461, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0131838138968663, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0167204326938339, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0203692279382193, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0241405318057402, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0280467087844301, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0321029179180026, 0.50000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler044 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.1915128876304698e-16
+// max(|f - f_GSL|): 1.1102230246251565e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 1.1156911610791411e-16
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data045[19] =
 {
   { 0.97930223035212138, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.98144406855076427, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.98362155940297280, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.98583616201745783, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.98808944235385032, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 0.99038308530635433, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.99271890872975710, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.99271890872975732, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.99509887982916734, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.99752513445413604, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0025260228440118, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0051060015613384, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0077430276253163, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0104405359789990, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0132023689128868, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0160328583559475, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0189369344885053, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0219202735809589, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0249895076611382, 0.50000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler045 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3839191144484910e-16
+// max(|f - f_GSL|): 8.8817841970012523e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.8452254859313207e-16
+// mean(f - f_GSL): 8.1805907077643109e-17
+// variance(f - f_GSL): 3.8131160349224712e-32
+// stddev(f - f_GSL): 1.9527201629835421e-16
 const testcase_hyperg<double>
 data046[19] =
 {
   { 0.84089972268671531, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.85410196624968460, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.86811566011579955, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.88303688022450522, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.89897948556635621, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.91607978309961580, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.93450283399425305, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93450283399425327, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.95445115010332193, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.97617696340303095, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0263340389897240, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 1.0557280900008410, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0557280900008412, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0889331564394962, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.1270166537925830, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.1715728752538095, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.2251482265544145, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 1.2922212642709541, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.2922212642709543, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.3819660112501042, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 1.5194938532959119, 0.50000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5194938532959121, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler046 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.1628301908162427e-16
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.9508457915403988e-16
+// mean(f - f_GSL): 2.3373116307898031e-17
+// variance(f - f_GSL): 2.3146198993753289e-33
+// stddev(f - f_GSL): 4.8110496769159731e-17
 const testcase_hyperg<double>
 data047[19] =
 {
   { 0.90992197313391454, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.91822592662244484, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.92687104566419554, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.93588628166548848, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.94530459215552909, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.95516374875247456, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.96550736800511849, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.95516374875247434, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.96550736800511816, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.97638624595136270, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.98786011482678993, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0128914530682316, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0266391040215350, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0413732738729464, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0572599536532992, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0745166004060953, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0934387388831386, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.1144486980714641, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.1381966011250106, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.1658171625342397, 0.50000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler047 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 7
 // max(|f - f_GSL| / |f_GSL|): 4.5130734546221216e-16
+// mean(f - f_GSL): 4.6746232615796062e-17
+// variance(f - f_GSL): 1.2814504633219814e-34
+// stddev(f - f_GSL): 1.1320116886861114e-17
 const testcase_hyperg<double>
 data048[19] =
 {
   { 0.93641908369732896, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.94256349654111271, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.94890138508461319, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.95544578858430029, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.96221121193620762, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.96921386948293542, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.97647198488394704, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.98400616412578656, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.99183986544963032, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0085177124149158, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0174294150407122, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0267781897388850, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 1.0366157405967285, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0366157405967287, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0470052068648839, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0580253905513313, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0697774741209765, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0823965556448414, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0960739512057103, 0.50000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler048 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.4952983921284566e-16
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 2.2476491960642283e-16
+// mean(f - f_GSL): -5.8432790769745078e-18
+// variance(f - f_GSL): 2.0022663489405960e-36
+// stddev(f - f_GSL): 1.4150146108576393e-18
 const testcase_hyperg<double>
 data049[19] =
 {
   { 0.95069883346936235, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.95559618047704131, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.96061938755931664, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.96577553912851333, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.97107239473807716, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.97651848528588481, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.98212322830227150, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.98212322830227128, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.98789706736195781, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.99385164237825074, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0063568569383123, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0129389344715818, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0197653907773940, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0268583912277143, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0342438793937092, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0419526514766855, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0500219124976327, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0584976491907043, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0674385240268101, 0.50000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler049 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2314542629443562e-16
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data050[19] =
 {
   { 0.95968319138913905, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.96376169072755802, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.96792900082729372, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.97218942798115737, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.97654763592586835, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.98100869054353879, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.98100869054353890, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 0.98557811238699278, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.99026193885795544, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.99506679842072221, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0050696417919618, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0102847452747090, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0156554225057022, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0211930882963096, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0269107343740711, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0328232917216298, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0389481230247195, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0453057164134614, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0519207114461246, 0.50000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler050 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 1.5700924586837752e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8577584504832499e-16
+// mean(f - f_GSL): 5.8432790769745078e-18
+// variance(f - f_GSL): 1.1262748212790853e-32
+// stddev(f - f_GSL): 1.0612609581432294e-16
 const testcase_hyperg<double>
 data051[19] =
 {
-  { 0.72547625011001171, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+  { 0.72547625011001160, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.74535599249992990, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.76696498884737041, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.79056941504209477, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.81649658092772603, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.84515425472851657, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.87705801930702920, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.84515425472851669, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.87705801930702931, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.91287092917527690, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.95346258924559224, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0540925533894598, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.1180339887498949, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.1952286093343938, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 1.2909944487358056, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
-  { 1.4142135623730949, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2909944487358058, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.4142135623730951, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.5811388300841900, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 1.8257418583505536, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.8257418583505542, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 2.2360679774997898, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 3.1622776601683782, 0.50000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 3.1622776601683809, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler051 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.0893602609058104e-16
+// max(|f - f_GSL|): 6.6613381477509392e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.6340403913587147e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 2.0425119025543020e-32
+// stddev(f - f_GSL): 1.4291647569662155e-16
 const testcase_hyperg<double>
 data052[19] =
 {
   { 0.83664260086443765, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.85046584300227079, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.86509574979651649, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.88062082573041911, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.89714464248521597, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.91478946588967591, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.93370105322348573, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91478946588967569, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93370105322348607, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.95405511057700887, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.97606616007978142, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0261916902334731, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0550723519434702, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0872106588188091, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 1.1233801699379020, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1233801699379022, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.1646752981725688, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.2127272514219511, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.2701518651068637, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.3416407864998725, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 1.4374795179111102, 0.50000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.4374795179111106, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler052 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 3.3306690738754696e-16
+// max(|f - f_GSL|): 3.3306690738754696e-16 at index 8
 // max(|f - f_GSL| / |f_GSL|): 3.3853500746952663e-16
+// mean(f - f_GSL): 1.1686558153949016e-17
+// variance(f - f_GSL): 2.5949371882270124e-33
+// stddev(f - f_GSL): 5.0940525990875012e-17
 const testcase_hyperg<double>
 data053[19] =
 {
   { 0.88195381730235822, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.89265078469555081, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.90382937908303673, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.91553161389880600, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.92780530349281509, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.94070521140346008, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.95429450630523383, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.94070521140346020, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.95429450630523349, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.96864663325785849, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.98384775588541795, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0172258496884334, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.0356742479163459, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0356742479163461, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0555293036908924, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0770231491562379, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.1004557416484888, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.1262270515731978, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 1.1548932919125086, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1548932919125088, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.1872757758134724, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.2247091713458949, 0.50000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler053 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2746445692007949e-16
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.9683492716399738e-16
+// mean(f - f_GSL): 1.7529837230923523e-17
+// variance(f - f_GSL): 2.4527762774522302e-33
+// stddev(f - f_GSL): 4.9525511380017369e-17
 const testcase_hyperg<double>
 data054[19] =
 {
   { 0.90716919697107279, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.91592299407142508, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.92500027075874192, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.93442464185467122, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.94422248683737076, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.95442341810133324, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.95442341810133347, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.96506085725516355, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.97617275213704069, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.98780247986309799, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0128233505813447, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0263406246541855, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0406326381700366, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0557966239802845, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0719515075786321, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0892457392422055, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.1078695188000958, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.1280752258974340, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.1502152002706476, 0.50000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler054 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.4848478782807992e-16
+// max(|f - f_GSL|): 3.3306690738754696e-16 at index 8
+// max(|f - f_GSL| / |f_GSL|): 3.3636359087105992e-16
+// mean(f - f_GSL): 2.9216395384872539e-17
+// variance(f - f_GSL): 2.1804680539963092e-33
+// stddev(f - f_GSL): 4.6695482158302094e-17
 const testcase_hyperg<double>
 data055[19] =
 {
   { 0.92336416053263082, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.93078397248364542, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.93843714333600259, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.94633837784068098, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.95450388104967876, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 0.96295158125742752, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.97170139827854318, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.97170139827854329, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.98077556918512687, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.99019904777750845, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0102104261941198, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0208669540935695, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0320118665407505, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0436944599504387, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0559728828278145, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0689166967761712, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0826105758119842, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0971599106346146, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.1126998828023964, 0.50000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler055 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 4.5474735088646412e-13
-// max(|f - f_GSL| / |f_GSL|): 1.5124797514980704e-15
+// max(|f - f_GSL|): 4.5474735088646412e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5124797514980592e-15
+// mean(f - f_GSL): 2.5336458077761468e-14
+// variance(f - f_GSL): 1.0813211674051158e-26
+// stddev(f - f_GSL): 1.0398659372270619e-13
 const testcase_hyperg<double>
 data056[19] =
 {
   { 0.52275983209457544, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.54700336898143009, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.57468955512602038, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.60665490543315048, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.64403057859056190, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.68838183648623730, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.74193265039311129, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.68838183648623719, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.74193265039311118, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.80794095908995300, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.89135275749639320, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1469266219310688, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 1.3552340708357489, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3552340708357493, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.6690840478838305, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 2.1815415453174483, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.1815415453174500, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 3.1156892546032235, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 5.1109077417760416, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 10.560352936466296, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 10.560352936466318, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 33.541019662496815, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 300.66343065819501, 0.50000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 300.66343065819723, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler056 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-15
-// max(|f - f_GSL| / |f_GSL|): 1.3217255411112326e-15
+// max(|f - f_GSL|): 8.8817841970012523e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3217255411112292e-15
+// mean(f - f_GSL): 6.8950693108299193e-16
+// variance(f - f_GSL): 3.9356627445430313e-30
+// stddev(f - f_GSL): 1.9838504844224102e-15
 const testcase_hyperg<double>
 data057[19] =
 {
   { 0.68252041951139286, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.70394732624993395, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.72748884971552052, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.75351147371199667, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.78247589005573737, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.81497017420249807, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.85175826875009586, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.81497017420249795, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.85175826875009608, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.89385278481745867, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.94262778709507411, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0687327277420910, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.1529725508983291, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.2592587134058799, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 1.3985773194637892, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.3985773194637896, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.5909902576697317, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.8776023607249752, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 2.3582499003694646, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.3582499003694664, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 3.3541019662496838, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 6.7198400278577859, 0.50000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 6.7198400278578028, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler057 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 2.6645352591003757e-15
+// max(|f - f_GSL|): 2.6645352591003757e-15 at index 18
 // max(|f - f_GSL| / |f_GSL|): 1.2228264607471081e-15
+// mean(f - f_GSL): 2.2788788400200583e-16
+// variance(f - f_GSL): 3.4817209315093131e-31
+// stddev(f - f_GSL): 5.9006109272763554e-16
 const testcase_hyperg<double>
 data058[19] =
 {
   { 0.75755211927082600, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.77603550233010965, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.79596241913438504, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.81753360792105212, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.84099165409805532, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.86663303852180895, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.89482475828629970, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.86663303852180906, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.89482475828629915, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.92602774279590350, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.96083064727087386, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0445570841313008, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.0959004638926031, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0959004638926033, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.1560106261370562, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 1.2278121770678145, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2278121770678148, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.3158640214709998, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.4278095344155000, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 1.5778700502946612, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.5778700502946617, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.7972173289196469, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 2.1789970569269732, 0.50000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler058 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2082370290419495e-16
+// max(|f - f_GSL|): 8.8817841970012523e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.6109827053892650e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 3.8685788127881258e-32
+// stddev(f - f_GSL): 1.9668703090921186e-16
 const testcase_hyperg<double>
 data059[19] =
 {
   { 0.80270093579329460, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.81884974572462765, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.83605266330015260, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.85443340762796027, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.87413762182790711, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.89533826626907287, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.91824276674115290, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.89533826626907298, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.91824276674115313, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.94310265050720576, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.97022678857609712, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0329098673199812, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0695865684573389, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.1108642103944570, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.1578795055970506, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.2122394794169442, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.2763274721556934, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.3539179650251021, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.4515986118197148, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 1.5829284571614219, 0.50000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5829284571614224, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler059 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2751041935095266e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.2099086385883890e-16
+// mean(f - f_GSL): 5.8432790769745078e-17
+// variance(f - f_GSL): 8.7218722159852367e-33
+// stddev(f - f_GSL): 9.3390964316604188e-17
 const testcase_hyperg<double>
 data060[19] =
 {
   { 0.83322694172301981, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.84753931604765675, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.86265784532195022, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.87866479300707090, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.89565516540263501, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.91373946207610512, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.93304721345881891, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91373946207610557, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93304721345881914, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.95373159512905148, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.97597554238828121, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0260752851887982, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0545371197996178, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0858099017045830, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.1204416568688709, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.1591587835964847, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.2029564720303347, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.2532588722007874, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.3122319926925459, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 1.3834948587364100, 0.50000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.3834948587364102, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler060 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=10.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 1.4901161193847656e-08
-// max(|f - f_GSL| / |f_GSL|): 1.8229127098648091e-15
+// max(|f - f_GSL|): 1.4901161193847656e-08 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8229127098647768e-15
+// mean(f - f_GSL): 7.8543415046726153e-10
+// variance(f - f_GSL): 1.1684633485497506e-17
+// stddev(f - f_GSL): 3.4182793164832956e-09
 const testcase_hyperg<double>
 data061[19] =
 {
   { 0.37727530159464628, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.39816010922169059, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.42283703041362447, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.45255640448730527, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.48919507154431119, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.53569358917731924, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.59689778897029544, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.53569358917731902, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.59689778897029577, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.68128587569875765, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.80478739308790359, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3408664196153621, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 2.0175364359923860, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.0175364359923882, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 3.6011214553736646, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 8.1799429939495312, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 8.1799429939495489, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 25.644834637536000, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 123.13738891597615, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 1088.7122410321333, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1088.7122410321385, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 27358.291704709951, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 8174369.0266731177, 0.50000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 8174369.0266732639, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler061 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=10.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 2.0008883439004421e-11
-// max(|f - f_GSL| / |f_GSL|): 1.5684473872214654e-15
+// max(|f - f_GSL|): 2.0008883439004421e-11 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5684473872214445e-15
+// mean(f - f_GSL): 1.0626587329385841e-12
+// variance(f - f_GSL): 2.1050090066796454e-23
+// stddev(f - f_GSL): 4.5880377141863658e-12
 const testcase_hyperg<double>
 data062[19] =
 {
   { 0.53905528308450823, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.56235533974376162, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.58887657983263575, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.61941227047262937, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.65504896640793864, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.69731666644529977, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.74844073299399139, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.74844073299399116, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.81178446800105830, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.89266981277598045, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1497248473106778, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 1.3729717112654571, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3729717112654578, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.7374982340374392, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 2.4134479340960580, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.4134479340960602, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 3.9191255240471192, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 8.3316373077761270, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 28.323020339843335, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 28.323020339843417, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 225.84286572747891, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 12757.127591286655, 0.50000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 12757.127591286826, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler062 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=10.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 1.9895196601282805e-13
-// max(|f - f_GSL| / |f_GSL|): 1.4567107859209967e-15
+// max(|f - f_GSL|): 1.9895196601282805e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4567107859209851e-15
+// mean(f - f_GSL): 1.1043797455481820e-14
+// variance(f - f_GSL): 2.0706176432127926e-27
+// stddev(f - f_GSL): 4.5504039855959963e-14
 const testcase_hyperg<double>
 data063[19] =
 {
   { 0.62672622092226027, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.64931010269769840, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.67448067519076293, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.70276306239803643, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.73484179773087521, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.77162761412743874, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.81436116844816564, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.81436116844816553, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.86477994787944579, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.92539820516603888, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0945599448210315, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.2190897395597264, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2190897395597269, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.3916844336856475, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 1.6484497630432013, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.6484497630432020, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 2.0717772717131155, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 2.8893613630810924, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 4.9459404075413529, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 4.9459404075413573, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 13.487394149998716, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 136.57616044013972, 0.50000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 136.57616044014080, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler063 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=10.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 1.2434497875801753e-14
-// max(|f - f_GSL| / |f_GSL|): 1.3245081211977836e-15
+// max(|f - f_GSL|): 1.2434497875801753e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3245081211977792e-15
+// mean(f - f_GSL): 8.5311874523827817e-16
+// variance(f - f_GSL): 7.8655509529357183e-30
+// stddev(f - f_GSL): 2.8045589587198410e-15
 const testcase_hyperg<double>
 data064[19] =
 {
   { 0.68421604440344319, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.70548098055548925, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.72884342311710337, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.75466953437856232, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.78342090924662589, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.81568884278645082, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.85224480241465239, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.81568884278645115, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.85224480241465261, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.89411692571131685, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.94270986892954811, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0688682849120232, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.1537004376097553, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.2615455028370031, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 1.4045541456153436, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.4045541456153443, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.6057216489444517, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.9146603020550739, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 2.4617931307620298, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.4617931307620307, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 3.7267799624996498, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 9.3880118036248401, 0.50000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 9.3880118036248721, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler064 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=10.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 1.5700924586837752e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8577584504832499e-16
+// mean(f - f_GSL): 5.8432790769745078e-18
+// variance(f - f_GSL): 1.1262748212790853e-32
+// stddev(f - f_GSL): 1.0612609581432294e-16
 const testcase_hyperg<double>
 data065[19] =
 {
-  { 0.72547625011001171, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+  { 0.72547625011001160, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.74535599249992990, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.76696498884737041, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.79056941504209477, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.81649658092772603, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.84515425472851657, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.87705801930702920, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.84515425472851669, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.87705801930702931, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.91287092917527690, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.95346258924559224, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0540925533894598, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.1180339887498949, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.1952286093343938, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 1.2909944487358056, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
-  { 1.4142135623730949, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2909944487358058, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.4142135623730951, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.5811388300841900, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 1.8257418583505536, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.8257418583505542, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 2.2360679774997898, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 3.1622776601683782, 0.50000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 3.1622776601683809, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler065 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=20.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 48.000000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8556481344875154e-15
+// max(|f - f_GSL|): 48.000000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8556481344874416e-15
+// mean(f - f_GSL): 2.5263190030329112
+// variance(f - f_GSL): 121.26314075575490
+// stddev(f - f_GSL): 11.011954447588080
 const testcase_hyperg<double>
 data066[19] =
 {
   { 0.26690449940521549, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.28252302866181833, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.30123616141153836, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.32421384687602633, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.35334630811776774, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.39191793127467028, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.44620488618129195, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.39191793127466995, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.44620488618129212, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.52980896919265719, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.67754711477562324, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.9567557771780317, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 6.1816042148333086, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 6.1816042148333272, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 35.653088618561227, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 377.51482843179906, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 377.51482843180133, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 7645.8816551195359, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 354791.74537980522, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 57009889.966638684, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 57009889.966639392, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 83771357024.863937, 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 25866972896376408., 0.50000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 25866972896377436., 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler066 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=20.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.011718750000000000
-// max(|f - f_GSL| / |f_GSL|): 1.7519521419034139e-15
+// max(|f - f_GSL|): 0.011718750000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7519521419033478e-15
+// mean(f - f_GSL): 0.00061678102606403001
+// variance(f - f_GSL): 7.2278413174892008e-06
+// stddev(f - f_GSL): 0.0026884644906506020
 const testcase_hyperg<double>
 data067[19] =
 {
   { 0.40342659436153389, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.42420571192034318, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.44852768286073041, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.47751245808592863, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.51283632632707765, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.55713468814894329, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.61481320817757334, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.61481320817757346, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.69383483410097213, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.81012002526006044, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3622225506603911, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 2.2349513086109001, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.2349513086109027, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 5.1864917536761723, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 21.020560423779411, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 21.020560423779497, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 175.19649997100612, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 3467.1587803688708, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 225003.88683445856, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 225003.88683446089, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 110837674.65652709, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 6688966964170.6807, 0.50000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 6688966964170.9326, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler067 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=20.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 1.4305114746093750e-05
-// max(|f - f_GSL| / |f_GSL|): 1.9261147266354006e-15
+// max(|f - f_GSL|): 1.4305114746093750e-05 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9261147266353426e-15
+// mean(f - f_GSL): 7.5292535813082699e-07
+// variance(f - f_GSL): 1.0770292922645316e-11
+// stddev(f - f_GSL): 3.2818124447697064e-06
 const testcase_hyperg<double>
 data068[19] =
 {
   { 0.48716309885816822, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.50965859152542337, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.53554809210658938, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.56576689207507136, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.60164849637133655, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.64516711595404364, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.69938278735493520, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.64516711595404408, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.69938278735493553, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.76931621518401860, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.86381808725530662, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.2152051956815531, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.6052546785425543, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.6052546785425557, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 2.4765586046012635, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 5.1564492216997486, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 5.1564492216997611, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 18.446158392136365, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 150.44577670123971, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 3862.6317400115768, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3862.6317400116104, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 632428.34833625401, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 7426927663.3808765, 0.50000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 7426927663.3810987, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler068 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=20.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 4.0978193283081055e-08
-// max(|f - f_GSL| / |f_GSL|): 1.7692881266931737e-15
+// max(|f - f_GSL|): 4.0978193283081055e-08 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7692881266931270e-15
+// mean(f - f_GSL): 2.1571346930926438e-09
+// variance(f - f_GSL): 8.8377830897836260e-17
+// stddev(f - f_GSL): 9.4009484041683924e-09
 const testcase_hyperg<double>
 data069[19] =
 {
   { 0.54703266209548373, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.56997321774144960, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.59603026159654982, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.62596978851120511, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.66084565876898915, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.70215256667232873, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.75208916592008557, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.70215256667232862, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.75208916592008568, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.81403631111658625, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.89348608489854597, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1517793185139173, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 1.3878110313656598, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3878110313656606, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.8061071794572381, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 2.7148594517859586, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.7148594517859612, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 5.4529435709049361, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 19.487310275377109, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 191.69079165937470, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 191.69079165937592, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 10218.543981792311, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 23160836.646583911, 0.50000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 23160836.646584522, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler069 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=20.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 2.9103830456733704e-10
-// max(|f - f_GSL| / |f_GSL|): 1.6694673196526831e-15
+// max(|f - f_GSL|): 2.9103830456733704e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6694673196526424e-15
+// mean(f - f_GSL): 1.5333453804912193e-11
+// variance(f - f_GSL): 4.4575621294589140e-21
+// stddev(f - f_GSL): 6.6764976817631821e-11
 const testcase_hyperg<double>
 data070[19] =
 {
   { 0.59292067298616025, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.61572496720679892, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.64135339122875590, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.67043457419280461, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.70380956268170969, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.74263251901495220, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.78853555445528256, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.74263251901495264, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.78853555445528289, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.84391122775673755, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.91242401018807373, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.1169059681274873, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 1.2825928301302667, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2825928301302669, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.5385937789924939, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 1.9895771187893898, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.9895771187893914, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 2.9707335806970168, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 6.0299506157180467, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 24.259090336955577, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 24.259090336955669, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 406.27267173257223, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 174330.03997220192, 0.50000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 174330.03997220617, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler070 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data071[19] =
 {
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler071 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data072[19] =
 {
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler072 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data073[19] =
 {
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler073 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data074[19] =
 {
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler074 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data075[19] =
 {
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler075 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3839191144484910e-16
+// max(|f - f_GSL|): 8.8817841970012523e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.8452254859313207e-16
+// mean(f - f_GSL): 8.1805907077643109e-17
+// variance(f - f_GSL): 3.8131160349224712e-32
+// stddev(f - f_GSL): 1.9527201629835421e-16
 const testcase_hyperg<double>
 data076[19] =
 {
   { 0.84089972268671531, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.85410196624968460, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.86811566011579955, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.88303688022450522, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.89897948556635621, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.91607978309961580, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.93450283399425305, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93450283399425327, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.95445115010332193, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.97617696340303095, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0263340389897240, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 1.0557280900008410, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0557280900008412, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0889331564394962, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.1270166537925830, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.1715728752538095, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.2251482265544145, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 1.2922212642709541, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.2922212642709543, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.3819660112501042, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 1.5194938532959119, 1.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5194938532959121, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler076 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.1628301908162427e-16
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.9508457915403988e-16
+// mean(f - f_GSL): 2.3373116307898031e-17
+// variance(f - f_GSL): 2.3146198993753289e-33
+// stddev(f - f_GSL): 4.8110496769159731e-17
 const testcase_hyperg<double>
 data077[19] =
 {
   { 0.90992197313391454, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.91822592662244484, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.92687104566419554, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.93588628166548848, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.94530459215552909, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.95516374875247456, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.96550736800511849, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.95516374875247434, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.96550736800511816, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.97638624595136270, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.98786011482678993, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0128914530682316, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0266391040215350, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0413732738729464, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0572599536532992, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0745166004060953, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0934387388831386, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.1144486980714641, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.1381966011250106, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.1658171625342397, 1.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler077 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 7
 // max(|f - f_GSL| / |f_GSL|): 4.5130734546221216e-16
+// mean(f - f_GSL): 4.6746232615796062e-17
+// variance(f - f_GSL): 1.2814504633219814e-34
+// stddev(f - f_GSL): 1.1320116886861114e-17
 const testcase_hyperg<double>
 data078[19] =
 {
   { 0.93641908369732896, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.94256349654111271, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.94890138508461319, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.95544578858430029, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.96221121193620762, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.96921386948293542, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.97647198488394704, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.98400616412578656, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.99183986544963032, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0085177124149158, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0174294150407122, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0267781897388850, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 1.0366157405967285, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0366157405967287, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0470052068648839, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0580253905513313, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0697774741209765, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0823965556448414, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0960739512057103, 1.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler078 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.4952983921284566e-16
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 2.2476491960642283e-16
+// mean(f - f_GSL): -5.8432790769745078e-18
+// variance(f - f_GSL): 2.0022663489405960e-36
+// stddev(f - f_GSL): 1.4150146108576393e-18
 const testcase_hyperg<double>
 data079[19] =
 {
   { 0.95069883346936235, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.95559618047704131, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.96061938755931664, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.96577553912851333, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.97107239473807716, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.97651848528588481, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.98212322830227150, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.98212322830227128, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.98789706736195781, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.99385164237825074, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0063568569383123, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0129389344715818, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0197653907773940, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0268583912277143, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0342438793937092, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0419526514766855, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0500219124976327, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0584976491907043, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0674385240268101, 1.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler079 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2314542629443562e-16
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data080[19] =
 {
   { 0.95968319138913905, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.96376169072755802, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.96792900082729372, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.97218942798115737, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.97654763592586835, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.98100869054353879, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.98100869054353890, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 0.98557811238699278, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.99026193885795544, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.99506679842072221, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0050696417919618, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0102847452747090, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0156554225057022, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0211930882963096, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0269107343740711, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0328232917216298, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0389481230247195, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0453057164134614, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0519207114461246, 1.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler080 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 3.5527136788005009e-15
-// max(|f - f_GSL| / |f_GSL|): 1.3886315518367356e-15
+// max(|f - f_GSL|): 3.5527136788005009e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3886315518367350e-15
+// mean(f - f_GSL): 2.6879083754082737e-16
+// variance(f - f_GSL): 6.3240381271479359e-31
+// stddev(f - f_GSL): 7.9523821130199324e-16
 const testcase_hyperg<double>
 data081[19] =
 {
   { 0.71317098463599415, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.73473333112764883, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.75804035866024344, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.78333938207622589, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.81093021621632866, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.84118059155303193, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.87454754822497016, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.84118059155303215, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.87454754822497005, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.91160778396977304, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.95310179804324857, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0536051565782629, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.1157177565710485, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.1889164797957747, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 1.2770640594149765, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2770640594149769, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.3862943611198899, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.5271512197902593, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.7199611490370503, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 2.0117973905426232, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 2.5584278811044912, 1.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.5584278811044925, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler081 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.5503149336769291e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.1924682001889760e-16
+// mean(f - f_GSL): 6.4276069846719592e-17
+// variance(f - f_GSL): 8.4595753242740185e-33
+// stddev(f - f_GSL): 9.1975949705746545e-17
 const testcase_hyperg<double>
 data082[19] =
 {
   { 0.83165649828125487, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.84626246650116621, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.86165287670267476, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.87790681762615264, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.89511583784087634, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.91338673957393834, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91338673957393823, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.93284521667332010, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.95364066873549813, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.97595268969924187, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0260530485179122, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0544523154103413, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0856358366643180, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.1201824010510930, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.1588830833596719, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.2028682930536780, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.2538561433469468, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.3147120107267418, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.3910528844853491, 1.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler082 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 7
 // max(|f - f_GSL| / |f_GSL|): 4.5856134910670077e-16
+// mean(f - f_GSL): 5.2589511692770570e-17
+// variance(f - f_GSL): 8.9881736403943358e-33
+// stddev(f - f_GSL): 9.4805978927461832e-17
 const testcase_hyperg<double>
 data083[19] =
 {
   { 0.87917686994924560, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.89033956110358403, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.90196195126098355, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.91408080149514681, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.92673756761314952, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.93997926630123430, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.95385955885019325, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.96844012412988900, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.98379242268046208, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0171615499181177, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.0353950776091037, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0353950776091039, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0548437030651112, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0756840039415978, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0981384722661196, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.1224950318916129, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.1491396357184527, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.1786158344507012, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.2117500593515478, 1.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler083 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.4123997230344747e-16
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.9755522134245812e-16
+// mean(f - f_GSL): 1.7529837230923523e-17
+// variance(f - f_GSL): 1.8020397140465364e-35
+// stddev(f - f_GSL): 4.2450438325729174e-18
 const testcase_hyperg<double>
 data084[19] =
 {
   { 0.90538259348578420, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.91444830598832061, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.92381915945973991, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.93351553488501793, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.94356001859234861, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.95397775039949584, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.96479684710618019, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.95397775039949628, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.96479684710618008, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.97604892281308531, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.98776973540356938, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0127864273812119, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0261830717772533, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0402531144740719, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0550712790827002, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0707271945059007, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0873302420658923, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.1050168587085545, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.1239622188477687, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.1444006183097781, 1.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler084 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3962402892941561e-16
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.0014207127505480e-16
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 2.8912726078702206e-33
+// stddev(f - f_GSL): 5.3770555212590287e-17
 const testcase_hyperg<double>
 data085[19] =
 {
   { 0.92211295632330392, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.92975727737040625, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.93761992348333489, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.94571346180587790, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.95405164371146900, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.96264956879205976, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.96264956879205987, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 0.97152388013493107, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.98069299877709348, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.99017740778385854, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0101865087004833, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0207660479892111, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0317718013185031, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0432419144892398, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0552206786504446, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0677601383233675, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0809223485579968, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0947826783002668, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.1094349304493603, 1.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler085 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 1.7763568394002505e-15
-// max(|f - f_GSL| / |f_GSL|): 2.1094237467877971e-16
+// max(|f - f_GSL|): 1.7763568394002505e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9984014443252816e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 1.6955391669463862e-31
+// stddev(f - f_GSL): 4.1176925175957300e-16
 const testcase_hyperg<double>
 data086[19] =
 {
   { 0.52631578947368429, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.55555555555555558, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.58823529411764708, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.62500000000000000, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.66666666666666663, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.71428571428571430, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.76923076923076927, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.76923076923076938, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.83333333333333337, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.90909090909090906, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1111111111111112, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 1.2500000000000000, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2500000000000002, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.4285714285714286, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 1.6666666666666663, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.6666666666666670, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 2.0000000000000000, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
-  { 2.5000000000000004, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 3.3333333333333330, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2.5000000000000009, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3.3333333333333348, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 5.0000000000000009, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 9.9999999999999929, 1.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 10.000000000000011, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler086 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 2.6645352591003757e-15
-// max(|f - f_GSL| / |f_GSL|): 1.2228571846595251e-15
+// max(|f - f_GSL|): 2.6645352591003757e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2228571846595245e-15
+// mean(f - f_GSL): 1.9282820954015878e-16
+// variance(f - f_GSL): 3.5826351554959189e-31
+// stddev(f - f_GSL): 5.9855118039278136e-16
 const testcase_hyperg<double>
 data087[19] =
 {
   { 0.70351947549341554, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.72637503722092756, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.75099661564391240, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.77761647796730871, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.80651221621216473, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.83801894346580241, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.83801894346580275, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.87254582050258456, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.91059888544083678, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.95281329145592386, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0532154477379738, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.1138692114741471, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.1838976095305187, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 1.2660586631630237, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2660586631630240, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.3644676665613118, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.4856585347316102, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.6409590443536872, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.8528798927325769, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 2.1789423102929644, 1.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.1789423102929653, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler087 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3538225385592644e-16
+// max(|f - f_GSL|): 8.8817841970012523e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.8050967180790176e-16
+// mean(f - f_GSL): 5.8432790769745078e-17
+// variance(f - f_GSL): 4.0373698660038179e-32
+// stddev(f - f_GSL): 2.0093207474178476e-16
 const testcase_hyperg<double>
 data088[19] =
 {
   { 0.78068027379106275, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.79924541976981278, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.81891305585650975, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.83979799626213247, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.86203315303160111, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.88577352485361693, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.91120135738402230, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.93853291956703588, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.96802755388922956, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0348375559194773, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0730246119544820, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.1151788396279341, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.1621066403893472, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.2148922218710421, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.2750496810838674, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.3448048570872917, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.4276833109859521, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 1.5299976259379788, 1.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5299976259379793, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler088 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.3297369954770822e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.4946054932156233e-16
+// mean(f - f_GSL): 3.5059674461847047e-17
+// variance(f - f_GSL): 9.8111051098089209e-33
+// stddev(f - f_GSL): 9.9051022760034738e-17
 const testcase_hyperg<double>
 data089[19] =
 {
   { 0.82510759951857615, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.84072786892782070, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.85710884896562356, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.87431674418118244, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.89242659229726995, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.91152392685930350, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91152392685930339, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.93170685950993570, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.95308871926790661, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.97580144325325802, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0258682619030324, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0536269616706000, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0835447330793833, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.1159538758396654, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.1512736659291880, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.1900463690116090, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.2329961591622411, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.2811334345669059, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 1.3359629014132051, 1.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.3359629014132053, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler089 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 7
 // max(|f - f_GSL| / |f_GSL|): 4.6160879869309861e-16
+// mean(f - f_GSL): -2.9216395384872539e-17
+// variance(f - f_GSL): 3.7021904791911625e-33
+// stddev(f - f_GSL): 6.0845628266878486e-17
 const testcase_hyperg<double>
 data090[19] =
 {
   { 0.85426123653345876, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.86774543390930414, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.88178859537254239, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.89643269097060951, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.91172456687216819, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.92771674975966123, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.94446842993888647, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.92771674975966134, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.94446842993888669, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.96204667481937678, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.98052794339012128, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0205643671068179, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0423395201078882, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0654651277885334, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0901078068101382, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.1164691415928940, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.1447972335326551, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 1.1754040384534161, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1754040384534163, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.2086928679893112, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.2452055640510711, 1.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler090 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 4.0927261579781771e-12
-// max(|f - f_GSL| / |f_GSL|): 1.4735287697491276e-15
+// max(|f - f_GSL|): 4.0927261579781771e-12 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4735287697491136e-15
+// mean(f - f_GSL): 2.2385017815981644e-13
+// variance(f - f_GSL): 8.7776489381819171e-25
+// stddev(f - f_GSL): 9.3689107895111895e-13
 const testcase_hyperg<double>
 data091[19] =
 {
   { 0.25646288779245086, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.28273129096174376, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.31438201170962982, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.35308837890625017, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.40123456790123452, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.46230737192836308, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.46230737192836352, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.54156016946185348, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.64718364197530875, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.79246636158732342, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3103947568968148, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 1.8017578125000004, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.8017578125000016, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 2.6374427321949185, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 4.1975308641975282, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 4.1975308641975335, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 7.4999999999999964, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 15.859375000000012, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 43.734567901234513, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 43.734567901234662, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 194.99999999999994, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 2777.4999999999832, 1.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2777.5000000000095, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler091 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 4.2632564145606011e-14
-// max(|f - f_GSL| / |f_GSL|): 1.3117712044801915e-15
+// max(|f - f_GSL|): 4.2632564145606011e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3117712044801870e-15
+// mean(f - f_GSL): 2.6879083754082736e-15
+// variance(f - f_GSL): 9.3567700516642700e-29
+// stddev(f - f_GSL): 9.6730398798228218e-15
 const testcase_hyperg<double>
 data092[19] =
 {
   { 0.46398891966759009, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.49382716049382724, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.52768166089965407, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.56640625000000000, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.61111111111111094, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.66326530612244905, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.72485207100591698, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.66326530612244916, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.72485207100591709, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.79861111111111094, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.88842975206611552, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1419753086419753, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 1.3281249999999998, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3281250000000000, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.5816326530612239, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 1.9444444444444444, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.9444444444444458, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 2.5000000000000000, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 3.4374999999999996, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 5.2777777777777715, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 5.2777777777777786, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 9.9999999999999947, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 32.499999999999837, 1.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 32.499999999999950, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler092 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 6.2172489379008766e-15
-// max(|f - f_GSL| / |f_GSL|): 1.2433022037532461e-15
+// max(|f - f_GSL|): 6.2172489379008766e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2433022037532449e-15
+// mean(f - f_GSL): 4.9083544246585873e-16
+// variance(f - f_GSL): 1.9229766015225486e-30
+// stddev(f - f_GSL): 1.3867143186404864e-15
 const testcase_hyperg<double>
 data093[19] =
 {
   { 0.57476744883397490, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.60302731682513966, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.63425708719096374, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.66895764182970430, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.70775063063963473, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.75141762103495924, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.80095569442603298, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.75141762103495946, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.80095569442603320, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.85765823887436754, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.92323549576335540, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0911622464839472, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.2013226178607666, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2013226178607672, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.3373332072682687, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 1.5099074378209716, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.5099074378209718, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.7368822229245819, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 2.0505871832661429, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 2.5172389775867967, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.5172389775867976, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 3.3015631983556144, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 5.0005935155044519, 1.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.0005935155044563, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler093 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 3.1086244689504383e-15
-// max(|f - f_GSL| / |f_GSL|): 1.1989697058841889e-15
+// max(|f - f_GSL|): 3.1086244689504383e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.1989697058841885e-15
+// mean(f - f_GSL): 2.4541772123292936e-16
+// variance(f - f_GSL): 4.8074415038063715e-31
+// stddev(f - f_GSL): 6.9335715932024320e-16
 const testcase_hyperg<double>
 data094[19] =
 {
   { 0.64582752605387983, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.67184161997264191, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.70012779922368040, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.73100784656910278, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.76486919089091066, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.80218301124334557, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.84352883533234413, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.80218301124334590, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.84352883533234391, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.88962858902212572, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.94139473468584123, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0669812691939897, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.1443996012177726, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.2350966976721314, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.3431264370409088, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.4745266814162399, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.6388137104840066, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 1.8522074849776518, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.8522074849776522, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 2.1458016978417458, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 2.5927464669826339, 1.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.5927464669826348, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler094 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 1.1102230246251565e-15
-// max(|f - f_GSL| / |f_GSL|): 5.6896158687269898e-16
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 6.8275390424723874e-16
+// mean(f - f_GSL): 1.0517902338554114e-16
+// variance(f - f_GSL): 8.8299945988280290e-32
+// stddev(f - f_GSL): 2.9715306828010425e-16
 const testcase_hyperg<double>
 data095[19] =
 {
   { 0.69583236336670584, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.71968920666899716, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.74533885416044232, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.77300145361503070, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.80293630810919447, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.83545132638592001, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.83545132638592057, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 0.87091544744412497, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.90977522877919847, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.95257738192069130, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0528968282789379, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.1123617169062123, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.1798254572896132, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 1.2572069000522696, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2572069000522701, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.3471600884974377, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.4535032279573519, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 1.5820245752814948, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.5820245752814950, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.7421756366906538, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 1.9513145531098233, 1.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.9513145531098235, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler095 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 2.0861625671386719e-07
-// max(|f - f_GSL| / |f_GSL|): 1.6897916810721311e-15
+// max(|f - f_GSL|): 2.0861625671386719e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6897916810721003e-15
+// mean(f - f_GSL): 1.0989192059253727e-08
+// variance(f - f_GSL): 2.2903477685061008e-15
+// stddev(f - f_GSL): 4.7857577963224392e-08
 const testcase_hyperg<double>
 data096[19] =
 {
   { 0.12307420104127866, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.13818870041457434, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.15739165631811705, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.18249038606882081, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.21644171225027795, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.26433326159804132, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.33544459430654539, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.26433326159804149, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.33544459430654527, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.44788516696232511, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.63989153514168373, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.7568608796813312, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 3.5836558871799027, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.5836558871799102, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 8.8077526749963226, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 27.285841702089190, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 27.285841702089265, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 113.55555555555557, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 706.24023437500091, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 8064.1687976651992, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 8064.1687976652511, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 271267.22222222196, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 123456789.99999890, 1.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 123456790.00000113, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler096 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 2.6193447411060333e-10
-// max(|f - f_GSL| / |f_GSL|): 1.6039867544159931e-15
+// max(|f - f_GSL|): 2.6193447411060333e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6039867544159698e-15
+// mean(f - f_GSL): 1.3861192895235850e-11
+// variance(f - f_GSL): 3.6088478524883243e-21
+// stddev(f - f_GSL): 6.0073686856129647e-11
 const testcase_hyperg<double>
 data097[19] =
 {
   { 0.28363728383055781, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.30933003169808387, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.33998437757128797, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.37713553224291113, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.42299736538419669, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.48086597727600067, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.55583495759293045, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.48086597727600089, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.55583495759293033, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.65612850114039678, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.79573668772968142, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3184712058058303, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 1.8576958065941214, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.8576958065941236, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 2.8759509651764228, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 5.1046225531822182, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 5.1046225531822289, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 11.095238095238095, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 32.797154017857174, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 158.01935680536477, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 158.01935680536548, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1815.9523809523814, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 163302.14285714156, 1.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 163302.14285714392, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler097 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 2.0463630789890885e-12
-// max(|f - f_GSL| / |f_GSL|): 1.5238873992472010e-15
+// max(|f - f_GSL|): 2.0463630789890885e-12 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5238873992471854e-15
+// mean(f - f_GSL): 1.1029773585697082e-13
+// variance(f - f_GSL): 2.1981059026132227e-25
+// stddev(f - f_GSL): 4.6883962104468326e-13
 const testcase_hyperg<double>
 data098[19] =
 {
   { 0.39006633302741811, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.41898885698103278, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.45245557983812590, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.49160548618861627, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.53798419230517991, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.59373881442067322, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.66193391357076126, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.66193391357076092, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.74708402736952118, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.85609281019430605, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1974451135148187, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.4820886036706347, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.4820886036706358, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.9201183180477521, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 2.6569338297733336, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.6569338297733367, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 4.0634920634920650, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 7.3102678571428568, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 17.512574302697733, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 17.512574302697782, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 74.206349206349131, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 1342.8571428571363, 1.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1342.8571428571502, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler098 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 7.8159700933611020e-14
-// max(|f - f_GSL| / |f_GSL|): 1.4210854715202060e-15
+// max(|f - f_GSL|): 7.8159700933611020e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4210854715201975e-15
+// mean(f - f_GSL): 4.6629367034256575e-15
+// variance(f - f_GSL): 3.1677071819086927e-28
+// stddev(f - f_GSL): 1.7798053775367387e-14
 const testcase_hyperg<double>
 data099[19] =
 {
   { 0.46726928123633210, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.49687547629934464, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.53045208856322223, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.56884765624999989, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.61316872427983504, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.66488500161969566, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.72598998634501577, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.66488500161969544, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.72598998634501621, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.79925411522633760, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.88863845062192182, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1423563481176653, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 1.3302951388888888, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3302951388888891, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.5889212827988335, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 1.9650205761316870, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.9650205761316886, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 2.5555555555555549, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 3.5937500000000013, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 5.7818930041152203, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 5.7818930041152274, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 12.222222222222220, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 54.999999999999780, 1.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 55.000000000000114, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler099 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=10.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 1.7763568394002505e-15
-// max(|f - f_GSL| / |f_GSL|): 2.1094237467877971e-16
+// max(|f - f_GSL|): 1.7763568394002505e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9984014443252816e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 1.6955391669463862e-31
+// stddev(f - f_GSL): 4.1176925175957300e-16
 const testcase_hyperg<double>
 data100[19] =
 {
   { 0.52631578947368429, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.55555555555555558, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.58823529411764708, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.62500000000000000, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.66666666666666663, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 0.71428571428571430, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.76923076923076927, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.76923076923076938, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.83333333333333337, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.90909090909090906, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.1111111111111112, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 1.2500000000000000, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2500000000000002, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.4285714285714286, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 1.6666666666666663, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.6666666666666670, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 2.0000000000000000, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
-  { 2.5000000000000004, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 3.3333333333333330, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 2.5000000000000009, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 3.3333333333333348, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 5.0000000000000009, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 9.9999999999999929, 1.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 10.000000000000011, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler100 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 1024.0000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.7510400000000382e-15
+// max(|f - f_GSL|): 1024.0000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7510399999999635e-15
+// mean(f - f_GSL): 53.894788252704814
+// variance(f - f_GSL): 55188.204676932175
+// stddev(f - f_GSL): 234.92169903381034
 const testcase_hyperg<double>
 data101[19] =
 {
   { 0.058479236576646311, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.065788544763137821, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.075184824937824482, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.087707688693157121, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.10521567442213345, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.13135877960541550, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.17423854066297098, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.13135877960541509, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.17423854066297137, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.25492082527223520, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.44025895219654843, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 3.3698615820910360, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 17.997089220808483, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 17.997089220808562, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 153.73298291118951, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 2159.1667587825627, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2159.1667587825768, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 55188.105263157879, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 3191209.3921857267, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 646910975.29152656, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 646910975.29153574, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1254834626850.2659, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 5.8479532163741414e+17, 1.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.8479532163743910e+17, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler101 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.21875000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.5452521875000274e-15
+// max(|f - f_GSL|): 0.21875000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5452521874999694e-15
+// mean(f - f_GSL): 0.011513220685868108
+// variance(f - f_GSL): 0.0025185017633005862
+// stddev(f - f_GSL): 0.050184676578618956
 const testcase_hyperg<double>
 data102[19] =
 {
   { 0.15519511120894958, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.17197165701692893, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.19276847315207329, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.21920107206179093, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.25386158960390576, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.30115970686600674, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.36916408142057106, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.30115970686600663, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.36916408142057128, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.47406175901569547, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.65237908266239919, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.8227213362622299, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 4.3716358339791332, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 4.3716358339791430, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 15.670841312959222, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 94.742651122760179, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 94.742651122760662, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1081.7275541795671, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 27809.787731465960, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 2329811.1715181042, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2329811.1715181284, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1537787532.6780224, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 141562653506999.88, 1.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 141562653507005.19, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler102 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.00024414062500000000
-// max(|f - f_GSL| / |f_GSL|): 1.6763226855512825e-15
+// max(|f - f_GSL|): 0.00024414062500000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6763226855512285e-15
+// mean(f - f_GSL): 1.2849899481406474e-05
+// variance(f - f_GSL): 3.1370759089735494e-09
+// stddev(f - f_GSL): 5.6009605506319623e-05
 const testcase_hyperg<double>
 data103[19] =
 {
   { 0.23253645591196551, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.25484220947068342, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.28181987881113812, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.31508211677735770, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.35706285886959610, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.41160053409238206, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.48508083111181960, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.41160053409238190, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.48508083111181938, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.58885194371375260, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.74482241684585782, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.4700356864367146, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 2.4955144453055143, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.4955144453055174, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 5.3506594845833471, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 16.618413752184221, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 16.618413752184267, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 89.310629514963878, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1029.3439900542960, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 35659.847863372350, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 35659.847863372670, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 8009309.6233230168, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 145640590027.39731, 1.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 145640590027.40201, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler103 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 7.1525573730468750e-07
-// max(|f - f_GSL| / |f_GSL|): 1.7237966704608456e-15
+// max(|f - f_GSL|): 7.1525573730468750e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7237966704607975e-15
+// mean(f - f_GSL): 3.7648905700618082e-08
+// variance(f - f_GSL): 2.6925522674362989e-14
+// stddev(f - f_GSL): 1.6408998346749562e-07
 const testcase_hyperg<double>
 data104[19] =
 {
   { 0.29614148314592509, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.32176277356430805, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.35217870475550511, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.38885270445515113, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.43389978380608418, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.49048612522269458, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.49048612522269414, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.56355539635634599, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.66123153239117671, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.79773363961895416, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3245132157016595, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 1.9065148749742076, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.9065148749742094, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 3.1328798652457452, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 6.4172532944033476, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 6.4172532944033636, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 19.071683734222436, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 104.41989641582512, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 1510.5743992324240, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1510.5743992324351, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 115518.14360562043, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 414930455.29173034, 1.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 414930455.29174191, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler104 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=20.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 4.6566128730773926e-09
-// max(|f - f_GSL| / |f_GSL|): 1.6665618165272271e-15
+// max(|f - f_GSL|): 4.6566128730773926e-09 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6665618165271877e-15
+// mean(f - f_GSL): 2.4523176471958370e-10
+// variance(f - f_GSL): 1.1411894517911952e-18
+// stddev(f - f_GSL): 1.0682646918208967e-09
 const testcase_hyperg<double>
 data105[19] =
 {
   { 0.34954259539177701, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.37714038609235134, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.40942091659748781, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.44767109606846422, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.49368984777532227, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.55006638216982295, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.62065830207408890, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.55006638216982318, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.62065830207408901, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.71145554513583764, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.83223839666914623, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.2466748028187731, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 1.6386752725021749, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.6386752725021760, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 2.3340068725479681, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 3.7848108613132054, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 3.7848108613132099, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 7.6754638550304133, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 23.344217312927277, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 149.83491198246921, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 149.83491198246998, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 3936.9253501916060, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 2794143.5036480185, 1.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 2794143.5036480846, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler105 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data106[19] =
 {
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler106 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data107[19] =
 {
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler107 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data108[19] =
 {
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler108 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data109[19] =
 {
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler109 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data110[19] =
 {
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler110 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 1.5700924586837752e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8577584504832499e-16
+// mean(f - f_GSL): 5.8432790769745078e-18
+// variance(f - f_GSL): 1.1262748212790853e-32
+// stddev(f - f_GSL): 1.0612609581432294e-16
 const testcase_hyperg<double>
 data111[19] =
 {
-  { 0.72547625011001171, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+  { 0.72547625011001160, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.74535599249992990, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.76696498884737041, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.79056941504209477, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.81649658092772603, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.84515425472851657, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.87705801930702920, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.84515425472851669, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.87705801930702931, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.91287092917527690, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.95346258924559224, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0540925533894598, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.1180339887498949, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.1952286093343938, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 1.2909944487358056, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
-  { 1.4142135623730949, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2909944487358058, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.4142135623730951, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.5811388300841900, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 1.8257418583505536, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.8257418583505542, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 2.2360679774997898, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 3.1622776601683782, 2.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 3.1622776601683809, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler111 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.0893602609058104e-16
+// max(|f - f_GSL|): 6.6613381477509392e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.6340403913587147e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 2.0425119025543020e-32
+// stddev(f - f_GSL): 1.4291647569662155e-16
 const testcase_hyperg<double>
 data112[19] =
 {
   { 0.83664260086443765, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.85046584300227079, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.86509574979651649, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.88062082573041911, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.89714464248521597, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.91478946588967591, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.93370105322348573, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91478946588967569, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93370105322348607, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.95405511057700887, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.97606616007978142, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0261916902334731, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0550723519434702, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0872106588188091, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 1.1233801699379020, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1233801699379022, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.1646752981725688, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.2127272514219511, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.2701518651068637, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.3416407864998725, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 1.4374795179111102, 2.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.4374795179111106, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler112 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 3.3306690738754696e-16
+// max(|f - f_GSL|): 3.3306690738754696e-16 at index 8
 // max(|f - f_GSL| / |f_GSL|): 3.3853500746952663e-16
+// mean(f - f_GSL): 1.1686558153949016e-17
+// variance(f - f_GSL): 2.5949371882270124e-33
+// stddev(f - f_GSL): 5.0940525990875012e-17
 const testcase_hyperg<double>
 data113[19] =
 {
   { 0.88195381730235822, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.89265078469555081, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.90382937908303673, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.91553161389880600, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.92780530349281509, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.94070521140346008, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.95429450630523383, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.94070521140346020, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.95429450630523349, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.96864663325785849, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.98384775588541795, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0172258496884334, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.0356742479163459, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0356742479163461, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0555293036908924, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0770231491562379, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.1004557416484888, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.1262270515731978, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 1.1548932919125086, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1548932919125088, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.1872757758134724, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.2247091713458949, 2.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler113 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2746445692007949e-16
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.9683492716399738e-16
+// mean(f - f_GSL): 1.7529837230923523e-17
+// variance(f - f_GSL): 2.4527762774522302e-33
+// stddev(f - f_GSL): 4.9525511380017369e-17
 const testcase_hyperg<double>
 data114[19] =
 {
   { 0.90716919697107279, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.91592299407142508, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.92500027075874192, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.93442464185467122, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.94422248683737076, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.95442341810133324, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.95442341810133347, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.96506085725516355, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.97617275213704069, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.98780247986309799, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0128233505813447, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0263406246541855, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0406326381700366, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0557966239802845, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0719515075786321, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0892457392422055, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.1078695188000958, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.1280752258974340, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.1502152002706476, 2.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler114 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.4848478782807992e-16
+// max(|f - f_GSL|): 3.3306690738754696e-16 at index 8
+// max(|f - f_GSL| / |f_GSL|): 3.3636359087105992e-16
+// mean(f - f_GSL): 2.9216395384872539e-17
+// variance(f - f_GSL): 2.1804680539963092e-33
+// stddev(f - f_GSL): 4.6695482158302094e-17
 const testcase_hyperg<double>
 data115[19] =
 {
   { 0.92336416053263082, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.93078397248364542, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.93843714333600259, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.94633837784068098, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.95450388104967876, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 0.96295158125742752, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.97170139827854318, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.97170139827854329, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.98077556918512687, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.99019904777750845, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0102104261941198, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0208669540935695, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0320118665407505, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0436944599504387, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0559728828278145, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0689166967761712, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0826105758119842, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0971599106346146, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.1126998828023964, 2.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler115 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 1.7763568394002505e-15
-// max(|f - f_GSL| / |f_GSL|): 2.1094237467877971e-16
+// max(|f - f_GSL|): 1.7763568394002505e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9984014443252816e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 1.6955391669463862e-31
+// stddev(f - f_GSL): 4.1176925175957300e-16
 const testcase_hyperg<double>
 data116[19] =
 {
   { 0.52631578947368429, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.55555555555555558, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.58823529411764708, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.62500000000000000, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.66666666666666663, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.71428571428571430, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.76923076923076927, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.76923076923076938, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.83333333333333337, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.90909090909090906, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1111111111111112, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 1.2500000000000000, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2500000000000002, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.4285714285714286, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 1.6666666666666663, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.6666666666666670, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 2.0000000000000000, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
-  { 2.5000000000000004, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 3.3333333333333330, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2.5000000000000009, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3.3333333333333348, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 5.0000000000000009, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 9.9999999999999929, 2.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 10.000000000000011, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler116 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 2.6645352591003757e-15
-// max(|f - f_GSL| / |f_GSL|): 1.2228571846595251e-15
+// max(|f - f_GSL|): 2.6645352591003757e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2228571846595245e-15
+// mean(f - f_GSL): 1.9282820954015878e-16
+// variance(f - f_GSL): 3.5826351554959189e-31
+// stddev(f - f_GSL): 5.9855118039278136e-16
 const testcase_hyperg<double>
 data117[19] =
 {
   { 0.70351947549341554, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.72637503722092756, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.75099661564391240, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.77761647796730871, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.80651221621216473, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.83801894346580241, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.83801894346580275, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.87254582050258456, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.91059888544083678, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.95281329145592386, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0532154477379738, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.1138692114741471, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.1838976095305187, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 1.2660586631630237, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2660586631630240, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.3644676665613118, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.4856585347316102, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.6409590443536872, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.8528798927325769, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 2.1789423102929644, 2.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.1789423102929653, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler117 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3538225385592644e-16
+// max(|f - f_GSL|): 8.8817841970012523e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.8050967180790176e-16
+// mean(f - f_GSL): 5.8432790769745078e-17
+// variance(f - f_GSL): 4.0373698660038179e-32
+// stddev(f - f_GSL): 2.0093207474178476e-16
 const testcase_hyperg<double>
 data118[19] =
 {
   { 0.78068027379106275, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.79924541976981278, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.81891305585650975, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.83979799626213247, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.86203315303160111, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.88577352485361693, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.91120135738402230, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.93853291956703588, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.96802755388922956, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0348375559194773, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0730246119544820, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.1151788396279341, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.1621066403893472, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.2148922218710421, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.2750496810838674, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.3448048570872917, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.4276833109859521, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 1.5299976259379788, 2.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5299976259379793, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler118 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.3297369954770822e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.4946054932156233e-16
+// mean(f - f_GSL): 3.5059674461847047e-17
+// variance(f - f_GSL): 9.8111051098089209e-33
+// stddev(f - f_GSL): 9.9051022760034738e-17
 const testcase_hyperg<double>
 data119[19] =
 {
   { 0.82510759951857615, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.84072786892782070, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.85710884896562356, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.87431674418118244, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.89242659229726995, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.91152392685930350, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91152392685930339, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.93170685950993570, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.95308871926790661, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.97580144325325802, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0258682619030324, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0536269616706000, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0835447330793833, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.1159538758396654, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.1512736659291880, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.1900463690116090, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.2329961591622411, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.2811334345669059, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 1.3359629014132051, 2.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.3359629014132053, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler119 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 7
 // max(|f - f_GSL| / |f_GSL|): 4.6160879869309861e-16
+// mean(f - f_GSL): -2.9216395384872539e-17
+// variance(f - f_GSL): 3.7021904791911625e-33
+// stddev(f - f_GSL): 6.0845628266878486e-17
 const testcase_hyperg<double>
 data120[19] =
 {
   { 0.85426123653345876, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.86774543390930414, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.88178859537254239, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.89643269097060951, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.91172456687216819, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.92771674975966123, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.94446842993888647, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.92771674975966134, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.94446842993888669, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.96204667481937678, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.98052794339012128, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0205643671068179, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0423395201078882, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0654651277885334, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0901078068101382, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.1164691415928940, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.1447972335326551, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 1.1754040384534161, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1754040384534163, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.2086928679893112, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.2452055640510711, 2.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler120 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 4.2632564145606011e-14
-// max(|f - f_GSL| / |f_GSL|): 4.2632564145606064e-16
+// max(|f - f_GSL|): 4.2632564145606011e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.2632564145605916e-16
+// mean(f - f_GSL): 2.3636063866361887e-15
+// variance(f - f_GSL): 9.5093179694074762e-29
+// stddev(f - f_GSL): 9.7515731907254209e-15
 const testcase_hyperg<double>
 data121[19] =
 {
   { 0.27700831024930750, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.30864197530864196, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.34602076124567477, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
-  { 0.39062499999999994, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.39062500000000000, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.44444444444444442, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.51020408163265307, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.59171597633136097, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
-  { 0.69444444444444453, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.51020408163265318, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.59171597633136108, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.69444444444444442, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.82644628099173545, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
-  { 1.2345679012345681, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 1.5624999999999998, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.2345679012345683, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.5625000000000007, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 2.0408163265306127, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 2.7777777777777768, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.7777777777777795, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 4.0000000000000000, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
-  { 6.2500000000000036, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 11.111111111111109, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 6.2500000000000027, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 11.111111111111125, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 25.000000000000007, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 99.999999999999872, 2.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 100.00000000000023, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler121 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 7.9936057773011271e-15
-// max(|f - f_GSL| / |f_GSL|): 1.3252801810681365e-15
+// max(|f - f_GSL|): 7.9936057773011271e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3252801810681345e-15
+// mean(f - f_GSL): 6.3107414031324687e-16
+// variance(f - f_GSL): 3.1787980555780903e-30
+// stddev(f - f_GSL): 1.7829184096806254e-15
 const testcase_hyperg<double>
 data122[19] =
 {
   { 0.50515448477320835, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.53674994210078020, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.57194655162437413, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.61137322330312327, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.65581297297972585, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.70625323977290944, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.70625323977290955, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.76395739449542666, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.83056871002513311, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.90826553449323655, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1098784992198341, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 1.2437942741831700, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2437942741831702, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.4105343768544543, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 1.6238435648986016, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.6238435648986023, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.9065970003160624, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 2.3001951284393627, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 2.8891774744673464, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.8891774744673469, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 3.8827206436045336, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 6.0316345867773542, 2.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 6.0316345867773640, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler122 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 3.1086244689504383e-15
-// max(|f - f_GSL| / |f_GSL|): 1.2095468681839719e-15
+// max(|f - f_GSL|): 3.1086244689504383e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2095468681839713e-15
+// mean(f - f_GSL): 2.5126100030990384e-16
+// variance(f - f_GSL): 4.7878393162502431e-31
+// stddev(f - f_GSL): 6.9194214470938558e-16
 const testcase_hyperg<double>
 data123[19] =
 {
   { 0.61824560969673270, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.64645665839161026, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.67712272792612116, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.71058076074636822, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.74723387423852838, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.78756892188863170, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.83218012557592713, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.83218012557592669, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.88180144818204143, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.93735184459468934, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0712594799044883, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.1531330932162096, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1531330932162098, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.2483404191094898, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 1.3606934909972501, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.3606934909972506, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.4957544469027071, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.6620777107871287, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 1.8738132387064506, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.8738132387064512, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 2.1570670242247409, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 2.5700735959225494, 2.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.5700735959225507, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler123 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 1.1102230246251565e-15
-// max(|f - f_GSL| / |f_GSL|): 6.1065577401595934e-16
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 7.1401110547148366e-16
+// mean(f - f_GSL): 1.0517902338554114e-16
+// variance(f - f_GSL): 8.8299945988280290e-32
+// stddev(f - f_GSL): 2.9715306828010425e-16
 const testcase_hyperg<double>
 data124[19] =
 {
   { 0.68776713859043437, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.71280582849489893, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.73962983054724896, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.76844343025262063, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.79948476671182900, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.83303347721461263, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.86942060391338771, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.83303347721461252, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.86942060391338805, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.90904161711581655, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.95237381468647742, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0526413941912305, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.1112045278881502, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.1768500306393046, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 1.2510971588297888, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2510971588297890, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.3359896747789315, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.4343740183432725, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.5504011881337365, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.6905307012604318, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 1.8658920279264424, 2.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.8658920279264428, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler124 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 2.7923027351444343e-16
+// max(|f - f_GSL|): 6.6613381477509392e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.1884541027166499e-16
+// mean(f - f_GSL): 5.8432790769745078e-17
+// variance(f - f_GSL): 2.1656512830141486e-32
+// stddev(f - f_GSL): 1.4716151952919448e-16
 const testcase_hyperg<double>
 data125[19] =
 {
   { 0.73530262886958797, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.75768898977673649, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.78143483544640080, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.80667428603297209, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.83356078772438313, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.86227093001346189, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.86227093001346156, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 0.89300925500556971, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.92601438873425990, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.96156696230910810, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0417127776179342, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0871896789480930, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.1370264514689949, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 1.1919677804049154, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1919677804049158, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.2529628761065934, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.3212511796458866, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.3985017309668506, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.4870567523847895, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 1.5904049523738040, 2.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5904049523738044, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler125 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 1.1641532182693481e-10
-// max(|f - f_GSL| / |f_GSL|): 1.4551915228366856e-15
+// max(|f - f_GSL|): 1.0186340659856796e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.1641532182693482e-15
+// mean(f - f_GSL): 5.5487040400966458e-12
+// variance(f - f_GSL): 5.4399356990620132e-22
+// stddev(f - f_GSL): 2.3323669734975269e-11
 const testcase_hyperg<double>
 data126[19] =
 {
-  { 0.040386107340619266, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+  { 0.040386107340619273, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.052922149401344633, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.070429627772374270, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
-  { 0.095367431640624972, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
-  { 0.13168724279835387, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.18593443208187066, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.26932907434290437, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
-  { 0.40187757201646096, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.095367431640624986, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.13168724279835389, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.18593443208187072, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.26932907434290460, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.40187757201646102, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.62092132305915493, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.6935087808430296, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 3.0517578124999991, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.0517578125000036, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 5.9499018266198629, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 12.860082304526737, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 12.860082304526767, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 32.000000000000000, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 97.656250000000114, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 411.52263374485580, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
-  { 3124.9999999999991, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 99999.999999999665, 2.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 411.52263374485722, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 3124.9999999999995, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 100000.00000000055, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler126 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 6.8212102632969618e-13
-// max(|f - f_GSL| / |f_GSL|): 1.2402200478721823e-15
+// max(|f - f_GSL|): 6.8212102632969618e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2402200478721734e-15
+// mean(f - f_GSL): 3.8828589466495609e-14
+// variance(f - f_GSL): 2.4267524775254640e-26
+// stddev(f - f_GSL): 1.5578037352392837e-13
 const testcase_hyperg<double>
 data127[19] =
 {
   { 0.21140107887447138, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.24005486968449927, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.27478119275391810, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.31738281250000006, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.37037037037037024, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.43731778425655959, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.43731778425655982, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.52344105598543467, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.63657407407407429, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.78888054094665638, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3031550068587108, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 1.7578125000000002, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.7578125000000011, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 2.4781341107871717, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 3.7037037037037037, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 3.7037037037037073, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 5.9999999999999982, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 10.937500000000005, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 24.074074074074076, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 24.074074074074115, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 74.999999999999957, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 549.99999999999670, 2.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 550.00000000000068, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler127 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 4.9737991503207013e-14
-// max(|f - f_GSL| / |f_GSL|): 1.6580642616864663e-15
+// max(|f - f_GSL|): 4.9737991503207013e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6580642616864621e-15
+// mean(f - f_GSL): 3.1670572597201835e-15
+// variance(f - f_GSL): 1.2718576052442072e-28
+// stddev(f - f_GSL): 1.1277666448535384e-14
 const testcase_hyperg<double>
 data128[19] =
 {
   { 0.33250915203252129, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.36566851047721943, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.40414812182437959, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.44916943268118498, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.50233081077479547, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.56575808728873334, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.64233106844971433, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.56575808728873322, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.64233106844971455, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.73603371116919514, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.85251256240112439, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1909065696197674, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.4447095285569311, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.4447095285569318, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.7935243137840653, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 2.2937035820494454, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.2937035820494467, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 3.0524711083016687, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 4.2976512669354259, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 6.5977107563194677, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 6.5977107563194739, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 11.793747206577530, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 29.997625937982058, 2.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 29.997625937982132, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler128 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 1.1546319456101628e-14
-// max(|f - f_GSL| / |f_GSL|): 1.4852319937858947e-15
+// max(|f - f_GSL|): 1.1546319456101628e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4852319937858925e-15
+// mean(f - f_GSL): 8.5896202431525265e-16
+// variance(f - f_GSL): 6.6980634833963886e-30
+// stddev(f - f_GSL): 2.5880617232586221e-15
 const testcase_hyperg<double>
 data129[19] =
 {
   { 0.42108197362250294, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.45503172013983040, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.49345609813624314, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.53720880551221295, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.58736431524847466, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.64529222467897973, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.71276337354393937, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.64529222467897995, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.71276337354393959, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.79210466220795306, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.88643063455510596, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1387832139040652, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 1.3114025920844752, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3114025920844754, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.5307655016768162, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 1.8170727950333345, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.8170727950333352, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 2.2037865486700836, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 2.7506766056439380, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 3.5764534935716972, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3.5764534935716998, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 4.9587762302155403, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 7.7740847924166800, 2.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 7.7740847924166907, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler129 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-15
-// max(|f - f_GSL| / |f_GSL|): 1.0721199711322771e-15
+// max(|f - f_GSL|): 4.4408920985006262e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.0721199711322765e-15
+// mean(f - f_GSL): 3.5059674461847049e-16
+// variance(f - f_GSL): 9.8111051098089205e-31
+// stddev(f - f_GSL): 9.9051022760034740e-16
 const testcase_hyperg<double>
 data130[19] =
 {
   { 0.48860241312958436, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.52193382517068487, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.55902375003954219, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.60049055150230324, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.64709127927203469, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.69976233335368987, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.75967529501080999, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.69976233335368998, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.75967529501080988, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.82831498895254407, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.90759090169653933, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.1088712278667465, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 1.2387445478440853, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2387445478440855, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.3959812720437546, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 1.5897930661091164, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.5897930661091169, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.8340789380307454, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 2.1509548085970764, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 2.5782406951207504, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 2.5782406951207526, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 3.1877847194242737, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 4.1421596631676900, 2.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 4.1421596631676918, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler130 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 2.2888183593750000e-05
-// max(|f - f_GSL| / |f_GSL|): 2.8610229492187516e-15
+// max(|f - f_GSL|): 2.2888183593750000e-05 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.4795532226562509e-15
+// mean(f - f_GSL): 1.2059140510950354e-06
+// variance(f - f_GSL): 2.7568813079896666e-11
+// stddev(f - f_GSL): 5.2506012112801583e-06
 const testcase_hyperg<double>
 data131[19] =
 {
   { 0.0016310376661280216, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.0028007538972582421, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.0049603324681551939, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.0090949470177292789, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.017341529915832606, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.034571613033607777, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.072538150286405714, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.034571613033607791, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.072538150286405839, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.16150558288984579, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
-  { 0.38554328942953148, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.38554328942953142, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 2.8679719907924444, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 9.3132257461547816, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 9.3132257461548065, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 35.401331746414378, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 165.38171687920172, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 165.38171687920246, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1024.0000000000000, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
-  { 9536.7431640625200, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 169350.87808430271, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
-  { 9765624.9999999944, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 9999999999.9999332, 2.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 9536.7431640625218, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 169350.87808430390, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 9765624.9999999963, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 10000000000.000111, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler131 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 1.4901161193847656e-08
-// max(|f - f_GSL| / |f_GSL|): 1.4958811384436855e-15
+// max(|f - f_GSL|): 1.4901161193847656e-08 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4958811384436608e-15
+// mean(f - f_GSL): 7.8582773037277017e-10
+// variance(f - f_GSL): 1.1683981904064149e-17
+// stddev(f - f_GSL): 3.4181840067591665e-09
 const testcase_hyperg<double>
 data132[19] =
 {
   { 0.071191280690193537, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.085646504654238384, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.10478215656371109, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.13074816337653578, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.16701141666848118, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.21939323375313968, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.29813515331786616, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.21939323375313963, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.29813515331786639, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.42225974638874397, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.62942145962174878, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.7218685262373197, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 3.2855760483514689, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.2855760483514738, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 7.1616652508907093, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 18.612326808485907, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 18.612326808485950, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 61.476190476190474, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 286.27580915178623, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 2274.9441142102296, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2274.9441142102414, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 47229.761904761865, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 9961460.7142856438, 2.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 9961460.7142858077, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler132 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 8.7311491370201111e-11
-// max(|f - f_GSL| / |f_GSL|): 1.5843951771650368e-15
+// max(|f - f_GSL|): 8.7311491370201111e-11 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5843951771650161e-15
+// mean(f - f_GSL): 4.6467391338242840e-12
+// variance(f - f_GSL): 4.0072766661644994e-22
+// stddev(f - f_GSL): 2.0018183399510804e-11
 const testcase_hyperg<double>
 data133[19] =
 {
   { 0.14747230019381058, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.17073600100690609, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.19982795745135354, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.23681776864188053, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.28475624360398011, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.34827500743063133, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.34827500743063161, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.43464829159684687, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.55576053438064787, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.73195020913445530, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.4310223867822929, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 2.1742563399057540, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.1742563399057566, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 3.5769231236256043, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 6.5620441134844363, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 6.5620441134844469, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 14.063492063492063, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 38.085937500000036, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 150.92973632068282, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 150.92973632068330, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1212.3015873015852, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 55107.142857142389, 2.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 55107.142857143110, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler133 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 1.8189894035458565e-12
-// max(|f - f_GSL| / |f_GSL|): 1.4848893090170350e-15
+// max(|f - f_GSL|): 1.8189894035458565e-12 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4848893090170230e-15
+// mean(f - f_GSL): 1.0027066896088256e-13
+// variance(f - f_GSL): 1.7322804840633983e-25
+// stddev(f - f_GSL): 4.1620673757922257e-13
 const testcase_hyperg<double>
 data134[19] =
 {
   { 0.21658059714090577, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.24513539602702861, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.27967018274845046, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.32196044921875022, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.37448559670781911, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.44078856032208824, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.44078856032208802, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.52606701446027793, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.63818158436213956, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.78944971882612769, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3044251384443430, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 1.7659505208333335, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.7659505208333344, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 2.5093710953769270, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 3.8065843621399158, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 3.8065843621399202, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 6.3333333333333313, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 12.109375000000004, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 29.115226337448540, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 29.115226337448608, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 108.33333333333330, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 1224.9999999999923, 2.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1225.0000000000023, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler134 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=10.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 4.2632564145606011e-14
-// max(|f - f_GSL| / |f_GSL|): 4.2632564145606064e-16
+// max(|f - f_GSL|): 4.2632564145606011e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.2632564145605916e-16
+// mean(f - f_GSL): 2.3636063866361887e-15
+// variance(f - f_GSL): 9.5093179694074762e-29
+// stddev(f - f_GSL): 9.7515731907254209e-15
 const testcase_hyperg<double>
 data135[19] =
 {
   { 0.27700831024930750, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.30864197530864196, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.34602076124567477, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
-  { 0.39062499999999994, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.39062500000000000, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.44444444444444442, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.51020408163265307, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.59171597633136097, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
-  { 0.69444444444444453, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.51020408163265318, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.59171597633136108, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.69444444444444442, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.82644628099173545, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
-  { 1.2345679012345681, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 1.5624999999999998, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.2345679012345683, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.5625000000000007, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 2.0408163265306127, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 2.7777777777777768, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 2.7777777777777795, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 4.0000000000000000, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
-  { 6.2500000000000036, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 11.111111111111109, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 6.2500000000000027, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 11.111111111111125, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 25.000000000000007, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 99.999999999999872, 2.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 100.00000000000023, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler135 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 425984.00000000000
+// max(|f - f_GSL|): 475136.00000000000 at index 18
 // max(|f - f_GSL| / |f_GSL|): 5.4067200000000052e-15
+// mean(f - f_GSL): 25007.185032091642
+// variance(f - f_GSL): 11881799540.814577
+// stddev(f - f_GSL): 109003.66755671379
 const testcase_hyperg<double>
 data136[19] =
 {
   { 2.6602838683283435e-06, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 7.8442223930072316e-06, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 2.4604898194634598e-05, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 8.2718061255302686e-05, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.00030072865982171723, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.0011951964277455193, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.0052617832469731814, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
-  { 0.026084053304588847, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0011951964277455204, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0052617832469731996, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.026084053304588850, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.14864362802414346, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 8.2252633399699757, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 86.736173798840269, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
-  { 1253.2542894196865, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 27351.112277912434, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 86.736173798840738, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1253.2542894196868, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 27351.112277912678, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1048576.0000000000, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 90949470.177293226, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 28679719907.924358, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 28679719907.924767, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 95367431640624.906, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 9.9999999999998657e+19, 2.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000220e+20, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler136 = 5.0000000000000039e-13;
 
 // Test data for a=2.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 40.000000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8712609271523571e-15
+// max(|f - f_GSL|): 40.000000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8712609271522778e-15
+// mean(f - f_GSL): 2.1052671749403089
+// variance(f - f_GSL): 84.210508462254538
+// stddev(f - f_GSL): 9.1766283820504881
 const testcase_hyperg<double>
 data137[19] =
 {
   { 0.018828092583720632, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.023381944060455365, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.029789623984280887, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.039191021482500567, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.053727813036721528, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.077762010061669079, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.12110505620123306, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.077762010061668857, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.12110505620123323, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.20870149809080582, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.41429234328785763, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 3.1308087404153113, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 13.586180626453050, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 13.586180626453100, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 87.117304082784415, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 889.26474381242826, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 889.26474381243384, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 16231.913312693494, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 653537.51168945129, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 87756230.793848589, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 87756230.793849647, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 101493977171.74945, 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 21375960679556916., 2.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 21375960679557820., 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler137 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.031250000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.6379336164122315e-15
+// max(|f - f_GSL|): 0.031250000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6379336164121759e-15
+// mean(f - f_GSL): 0.0016447556893365942
+// variance(f - f_GSL): 5.1397960874034849e-05
+// stddev(f - f_GSL): 0.0071692371193896806
 const testcase_hyperg<double>
 data138[19] =
 {
   { 0.049200410661854238, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.059460876757152607, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.073244762686653225, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.092334626017932769, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.11976760350696856, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.16102414609169408, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.22670456785796225, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.16102414609169405, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.22670456785796236, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.33912903252727361, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.55049794600858049, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 2.1254722872032232, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 5.6261213886736172, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 5.6261213886736314, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 20.137315891130996, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 108.04381584643853, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 108.04381584643900, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 992.41692466460245, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 19055.363816004465, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 1105471.9504312086, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1105471.9504312191, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 448521363.90608919, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 19078917293639.004, 2.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 19078917293639.652, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler138 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 8.3923339843750000e-05
-// max(|f - f_GSL| / |f_GSL|): 1.8221514326727084e-15
+// max(|f - f_GSL|): 8.3923339843750000e-05 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8221514326726564e-15
+// mean(f - f_GSL): 4.4172143495227617e-06
+// variance(f - f_GSL): 3.7068906120670492e-10
+// stddev(f - f_GSL): 1.9253287023433297e-05
 const testcase_hyperg<double>
 data139[19] =
 {
   { 0.083753547015334884, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.099238444687035743, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.11938294012867748, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.14622683905023329, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.18303556733713028, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.23527764069382412, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.31261681740827085, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.23527764069382415, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.31261681740827069, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.43327581880538862, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.63445840637296680, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.7438842395813297, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 3.5070840938209269, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.5070840938209331, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 8.6573372006089713, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 28.779342118408906, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 28.779342118408998, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 147.50178613955714, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1427.1686016136398, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 36780.643714655642, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 36780.643714655955, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 5313869.6058585485, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 46057280607.381966, 2.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 46057280607.383286, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler139 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=20.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 5.0663948059082031e-07
-// max(|f - f_GSL| / |f_GSL|): 1.9925479281070174e-15
+// max(|f - f_GSL|): 5.0663948059082031e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9925479281069681e-15
+// mean(f - f_GSL): 2.6669880993704522e-08
+// variance(f - f_GSL): 1.3509399735218820e-14
+// stddev(f - f_GSL): 1.1622994336752823e-07
 const testcase_hyperg<double>
 data140[19] =
 {
   { 0.11920045035073676, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.13907946814302777, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.16431439792559696, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.19698796016986989, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.24028510928790547, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.29926031296483113, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.38229327814229153, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.29926031296483130, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.38229327814229175, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.50402047283093132, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.69167261179586526, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.5503152253394308, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 2.6469548193635797, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 2.6469548193635828, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 5.1882631330566813, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 12.476792759124516, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 12.476792759124546, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 41.026391565091259, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 220.92584715988204, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 2677.0834450236207, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 2677.0834450236389, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 141774.31260689779, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 254267148.83196995, 2.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 254267148.83197621, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler140 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data141[19] =
 {
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler141 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data142[19] =
 {
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler142 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data143[19] =
 {
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler143 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data144[19] =
 {
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler144 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data145[19] =
 {
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler145 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 4.5474735088646412e-13
-// max(|f - f_GSL| / |f_GSL|): 1.5124797514980704e-15
+// max(|f - f_GSL|): 4.5474735088646412e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5124797514980592e-15
+// mean(f - f_GSL): 2.5336458077761468e-14
+// variance(f - f_GSL): 1.0813211674051158e-26
+// stddev(f - f_GSL): 1.0398659372270619e-13
 const testcase_hyperg<double>
 data146[19] =
 {
   { 0.52275983209457544, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.54700336898143009, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.57468955512602038, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.60665490543315048, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.64403057859056190, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.68838183648623730, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.74193265039311129, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.68838183648623719, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.74193265039311118, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.80794095908995300, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.89135275749639320, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1469266219310688, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 1.3552340708357489, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3552340708357493, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.6690840478838305, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 2.1815415453174483, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.1815415453174500, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 3.1156892546032235, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 5.1109077417760416, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 10.560352936466296, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 10.560352936466318, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 33.541019662496815, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 300.66343065819501, 5.0000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 300.66343065819723, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler146 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-15
-// max(|f - f_GSL| / |f_GSL|): 1.3217255411112326e-15
+// max(|f - f_GSL|): 8.8817841970012523e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3217255411112292e-15
+// mean(f - f_GSL): 6.8950693108299193e-16
+// variance(f - f_GSL): 3.9356627445430313e-30
+// stddev(f - f_GSL): 1.9838504844224102e-15
 const testcase_hyperg<double>
 data147[19] =
 {
   { 0.68252041951139286, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.70394732624993395, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.72748884971552052, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.75351147371199667, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.78247589005573737, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.81497017420249807, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.85175826875009586, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.81497017420249795, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.85175826875009608, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.89385278481745867, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.94262778709507411, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0687327277420910, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.1529725508983291, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.2592587134058799, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 1.3985773194637892, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.3985773194637896, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.5909902576697317, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.8776023607249752, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 2.3582499003694646, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.3582499003694664, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 3.3541019662496838, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 6.7198400278577859, 5.0000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 6.7198400278578028, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler147 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 2.6645352591003757e-15
+// max(|f - f_GSL|): 2.6645352591003757e-15 at index 18
 // max(|f - f_GSL| / |f_GSL|): 1.2228264607471081e-15
+// mean(f - f_GSL): 2.2788788400200583e-16
+// variance(f - f_GSL): 3.4817209315093131e-31
+// stddev(f - f_GSL): 5.9006109272763554e-16
 const testcase_hyperg<double>
 data148[19] =
 {
   { 0.75755211927082600, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.77603550233010965, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.79596241913438504, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.81753360792105212, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.84099165409805532, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.86663303852180895, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.89482475828629970, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.86663303852180906, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.89482475828629915, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.92602774279590350, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.96083064727087386, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0445570841313008, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.0959004638926031, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0959004638926033, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.1560106261370562, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 1.2278121770678145, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2278121770678148, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.3158640214709998, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.4278095344155000, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 1.5778700502946612, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.5778700502946617, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.7972173289196469, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 2.1789970569269732, 5.0000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler148 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2082370290419495e-16
+// max(|f - f_GSL|): 8.8817841970012523e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.6109827053892650e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 3.8685788127881258e-32
+// stddev(f - f_GSL): 1.9668703090921186e-16
 const testcase_hyperg<double>
 data149[19] =
 {
   { 0.80270093579329460, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.81884974572462765, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.83605266330015260, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.85443340762796027, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.87413762182790711, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.89533826626907287, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.91824276674115290, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.89533826626907298, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.91824276674115313, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.94310265050720576, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.97022678857609712, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0329098673199812, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0695865684573389, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.1108642103944570, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.1578795055970506, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.2122394794169442, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.2763274721556934, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.3539179650251021, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.4515986118197148, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 1.5829284571614219, 5.0000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5829284571614224, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler149 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2751041935095266e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.2099086385883890e-16
+// mean(f - f_GSL): 5.8432790769745078e-17
+// variance(f - f_GSL): 8.7218722159852367e-33
+// stddev(f - f_GSL): 9.3390964316604188e-17
 const testcase_hyperg<double>
 data150[19] =
 {
   { 0.83322694172301981, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.84753931604765675, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.86265784532195022, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.87866479300707090, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.89565516540263501, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.91373946207610512, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.93304721345881891, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91373946207610557, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93304721345881914, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.95373159512905148, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.97597554238828121, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0260752851887982, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0545371197996178, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0858099017045830, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.1204416568688709, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.1591587835964847, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.2029564720303347, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.2532588722007874, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.3122319926925459, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 1.3834948587364100, 5.0000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.3834948587364102, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler150 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 4.0927261579781771e-12
-// max(|f - f_GSL| / |f_GSL|): 1.4735287697491276e-15
+// max(|f - f_GSL|): 4.0927261579781771e-12 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4735287697491136e-15
+// mean(f - f_GSL): 2.2385017815981644e-13
+// variance(f - f_GSL): 8.7776489381819171e-25
+// stddev(f - f_GSL): 9.3689107895111895e-13
 const testcase_hyperg<double>
 data151[19] =
 {
   { 0.25646288779245086, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.28273129096174376, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.31438201170962982, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.35308837890625017, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.40123456790123452, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.46230737192836308, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.46230737192836352, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.54156016946185348, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.64718364197530875, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.79246636158732342, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3103947568968148, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 1.8017578125000004, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.8017578125000016, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 2.6374427321949185, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 4.1975308641975282, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 4.1975308641975335, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 7.4999999999999964, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 15.859375000000012, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 43.734567901234513, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 43.734567901234662, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 194.99999999999994, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 2777.4999999999832, 5.0000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2777.5000000000095, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler151 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 4.2632564145606011e-14
-// max(|f - f_GSL| / |f_GSL|): 1.3117712044801915e-15
+// max(|f - f_GSL|): 4.2632564145606011e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3117712044801870e-15
+// mean(f - f_GSL): 2.6879083754082736e-15
+// variance(f - f_GSL): 9.3567700516642700e-29
+// stddev(f - f_GSL): 9.6730398798228218e-15
 const testcase_hyperg<double>
 data152[19] =
 {
   { 0.46398891966759009, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.49382716049382724, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.52768166089965407, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.56640625000000000, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.61111111111111094, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.66326530612244905, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.72485207100591698, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.66326530612244916, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.72485207100591709, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.79861111111111094, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.88842975206611552, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1419753086419753, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 1.3281249999999998, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3281250000000000, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.5816326530612239, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 1.9444444444444444, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.9444444444444458, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 2.5000000000000000, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 3.4374999999999996, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 5.2777777777777715, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 5.2777777777777786, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 9.9999999999999947, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 32.499999999999837, 5.0000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 32.499999999999950, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler152 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 6.2172489379008766e-15
-// max(|f - f_GSL| / |f_GSL|): 1.2433022037532461e-15
+// max(|f - f_GSL|): 6.2172489379008766e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2433022037532449e-15
+// mean(f - f_GSL): 4.9083544246585873e-16
+// variance(f - f_GSL): 1.9229766015225486e-30
+// stddev(f - f_GSL): 1.3867143186404864e-15
 const testcase_hyperg<double>
 data153[19] =
 {
   { 0.57476744883397490, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.60302731682513966, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.63425708719096374, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.66895764182970430, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.70775063063963473, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.75141762103495924, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.80095569442603298, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.75141762103495946, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.80095569442603320, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.85765823887436754, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.92323549576335540, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0911622464839472, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.2013226178607666, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2013226178607672, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.3373332072682687, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 1.5099074378209716, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.5099074378209718, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.7368822229245819, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 2.0505871832661429, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 2.5172389775867967, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.5172389775867976, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 3.3015631983556144, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 5.0005935155044519, 5.0000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.0005935155044563, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler153 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 3.1086244689504383e-15
-// max(|f - f_GSL| / |f_GSL|): 1.1989697058841889e-15
+// max(|f - f_GSL|): 3.1086244689504383e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.1989697058841885e-15
+// mean(f - f_GSL): 2.4541772123292936e-16
+// variance(f - f_GSL): 4.8074415038063715e-31
+// stddev(f - f_GSL): 6.9335715932024320e-16
 const testcase_hyperg<double>
 data154[19] =
 {
   { 0.64582752605387983, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.67184161997264191, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.70012779922368040, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.73100784656910278, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.76486919089091066, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.80218301124334557, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.84352883533234413, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.80218301124334590, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.84352883533234391, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.88962858902212572, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.94139473468584123, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0669812691939897, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.1443996012177726, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.2350966976721314, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.3431264370409088, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.4745266814162399, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.6388137104840066, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 1.8522074849776518, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.8522074849776522, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 2.1458016978417458, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 2.5927464669826339, 5.0000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.5927464669826348, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler154 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 1.1102230246251565e-15
-// max(|f - f_GSL| / |f_GSL|): 5.6896158687269898e-16
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 6.8275390424723874e-16
+// mean(f - f_GSL): 1.0517902338554114e-16
+// variance(f - f_GSL): 8.8299945988280290e-32
+// stddev(f - f_GSL): 2.9715306828010425e-16
 const testcase_hyperg<double>
 data155[19] =
 {
   { 0.69583236336670584, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.71968920666899716, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.74533885416044232, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.77300145361503070, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.80293630810919447, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.83545132638592001, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.83545132638592057, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 0.87091544744412497, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.90977522877919847, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.95257738192069130, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0528968282789379, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.1123617169062123, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.1798254572896132, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 1.2572069000522696, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2572069000522701, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.3471600884974377, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.4535032279573519, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 1.5820245752814948, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.5820245752814950, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.7421756366906538, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 1.9513145531098233, 5.0000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.9513145531098235, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler155 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 1.1641532182693481e-10
-// max(|f - f_GSL| / |f_GSL|): 1.4551915228366856e-15
+// max(|f - f_GSL|): 1.0186340659856796e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.1641532182693482e-15
+// mean(f - f_GSL): 5.5487040400966458e-12
+// variance(f - f_GSL): 5.4399356990620132e-22
+// stddev(f - f_GSL): 2.3323669734975269e-11
 const testcase_hyperg<double>
 data156[19] =
 {
-  { 0.040386107340619266, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+  { 0.040386107340619273, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.052922149401344633, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.070429627772374270, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
-  { 0.095367431640624972, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
-  { 0.13168724279835387, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.18593443208187066, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.26932907434290437, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
-  { 0.40187757201646096, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.095367431640624986, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.13168724279835389, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.18593443208187072, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.26932907434290460, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.40187757201646102, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.62092132305915493, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.6935087808430296, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 3.0517578124999991, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.0517578125000036, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 5.9499018266198629, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 12.860082304526737, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 12.860082304526767, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 32.000000000000000, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 97.656250000000114, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 411.52263374485580, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
-  { 3124.9999999999991, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 99999.999999999665, 5.0000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 411.52263374485722, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 3124.9999999999995, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 100000.00000000055, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler156 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 6.8212102632969618e-13
-// max(|f - f_GSL| / |f_GSL|): 1.2402200478721823e-15
+// max(|f - f_GSL|): 6.8212102632969618e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2402200478721734e-15
+// mean(f - f_GSL): 3.8828589466495609e-14
+// variance(f - f_GSL): 2.4267524775254640e-26
+// stddev(f - f_GSL): 1.5578037352392837e-13
 const testcase_hyperg<double>
 data157[19] =
 {
   { 0.21140107887447138, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.24005486968449927, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.27478119275391810, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.31738281250000006, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.37037037037037024, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.43731778425655959, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.43731778425655982, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.52344105598543467, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.63657407407407429, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.78888054094665638, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3031550068587108, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 1.7578125000000002, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.7578125000000011, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 2.4781341107871717, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 3.7037037037037037, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 3.7037037037037073, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 5.9999999999999982, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 10.937500000000005, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 24.074074074074076, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 24.074074074074115, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 74.999999999999957, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 549.99999999999670, 5.0000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 550.00000000000068, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler157 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 4.9737991503207013e-14
-// max(|f - f_GSL| / |f_GSL|): 1.6580642616864663e-15
+// max(|f - f_GSL|): 4.9737991503207013e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6580642616864621e-15
+// mean(f - f_GSL): 3.1670572597201835e-15
+// variance(f - f_GSL): 1.2718576052442072e-28
+// stddev(f - f_GSL): 1.1277666448535384e-14
 const testcase_hyperg<double>
 data158[19] =
 {
   { 0.33250915203252129, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.36566851047721943, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.40414812182437959, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.44916943268118498, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.50233081077479547, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.56575808728873334, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.64233106844971433, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.56575808728873322, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.64233106844971455, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.73603371116919514, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.85251256240112439, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1909065696197674, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.4447095285569311, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.4447095285569318, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.7935243137840653, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 2.2937035820494454, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.2937035820494467, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 3.0524711083016687, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 4.2976512669354259, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 6.5977107563194677, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 6.5977107563194739, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 11.793747206577530, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 29.997625937982058, 5.0000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 29.997625937982132, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler158 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 1.1546319456101628e-14
-// max(|f - f_GSL| / |f_GSL|): 1.4852319937858947e-15
+// max(|f - f_GSL|): 1.1546319456101628e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4852319937858925e-15
+// mean(f - f_GSL): 8.5896202431525265e-16
+// variance(f - f_GSL): 6.6980634833963886e-30
+// stddev(f - f_GSL): 2.5880617232586221e-15
 const testcase_hyperg<double>
 data159[19] =
 {
   { 0.42108197362250294, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.45503172013983040, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.49345609813624314, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.53720880551221295, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.58736431524847466, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.64529222467897973, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.71276337354393937, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.64529222467897995, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.71276337354393959, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.79210466220795306, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.88643063455510596, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1387832139040652, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 1.3114025920844752, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3114025920844754, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.5307655016768162, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 1.8170727950333345, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.8170727950333352, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 2.2037865486700836, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 2.7506766056439380, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 3.5764534935716972, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3.5764534935716998, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 4.9587762302155403, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 7.7740847924166800, 5.0000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 7.7740847924166907, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler159 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-15
-// max(|f - f_GSL| / |f_GSL|): 1.0721199711322771e-15
+// max(|f - f_GSL|): 4.4408920985006262e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.0721199711322765e-15
+// mean(f - f_GSL): 3.5059674461847049e-16
+// variance(f - f_GSL): 9.8111051098089205e-31
+// stddev(f - f_GSL): 9.9051022760034740e-16
 const testcase_hyperg<double>
 data160[19] =
 {
   { 0.48860241312958436, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.52193382517068487, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.55902375003954219, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.60049055150230324, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.64709127927203469, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.69976233335368987, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.75967529501080999, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.69976233335368998, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.75967529501080988, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.82831498895254407, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.90759090169653933, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.1088712278667465, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 1.2387445478440853, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2387445478440855, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.3959812720437546, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 1.5897930661091164, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.5897930661091169, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.8340789380307454, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 2.1509548085970764, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 2.5782406951207504, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 2.5782406951207526, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 3.1877847194242737, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 4.1421596631676900, 5.0000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 4.1421596631676918, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler160 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 1.3113021850585938e-06
-// max(|f - f_GSL| / |f_GSL|): 2.8467351045253575e-14
+// max(|f - f_GSL|): 1.3113021850585938e-06 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.9699111427019355e-14
+// mean(f - f_GSL): 6.9091057386613658e-08
+// variance(f - f_GSL): 9.0489756878178256e-14
+// stddev(f - f_GSL): 3.0081515400354792e-07
 const testcase_hyperg<double>
 data161[19] =
 {
   { -0.0047236848832209926, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { -0.0073321496427104288, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { -0.010977302557845620, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { -0.015692785382270882, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { -0.020728547477518663, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { -0.022767481479412880, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { -0.010634636868114181, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { -0.022767481479412773, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.010634636868114097, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.050699832580781923, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.27045765367659280, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 3.4387055868901171, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 12.052059173583981, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 12.052059173584013, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 45.565319600798020, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 196.23532998018572, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 196.23532998018635, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1032.0000000000002, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 7376.0986328125073, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 86964.639536655843, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 86964.639536656410, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 2596875.0000000009, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 766224999.99999273, 5.0000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 766225000.00000668, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler161 = 2.5000000000000015e-12;
 
 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 1.8626451492309570e-09
-// max(|f - f_GSL| / |f_GSL|): 1.5205266524334494e-15
+// max(|f - f_GSL|): 1.8626451492309570e-09 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5205266524334267e-15
+// mean(f - f_GSL): 9.8838934113244577e-11
+// variance(f - f_GSL): 1.8243591026317757e-19
+// stddev(f - f_GSL): 4.2712516931594835e-10
 const testcase_hyperg<double>
 data162[19] =
 {
   { 0.016473280625778776, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.023520955289486591, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.034179084066005165, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.050663948059081955, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.076817558299039870, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.11952927776691698, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.19163799520552802, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.11952927776691663, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.19163799520552807, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.31815307784636504, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.55036208180243285, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.9287183337378946, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 4.0054321289062473, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 4.0054321289062544, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 9.1373492337376394, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 23.576817558299005, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 23.576817558299062, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 71.999999999999972, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 280.76171875000023, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 1611.7969821673514, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1611.7969821673578, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 18749.999999999996, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 1224999.9999999879, 5.0000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1225000.0000000061, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler162 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 1.8189894035458565e-11
-// max(|f - f_GSL| / |f_GSL|): 1.5011259042308369e-15
+// max(|f - f_GSL|): 1.8189894035458565e-11 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5011259042308243e-15
+// mean(f - f_GSL): 9.8916196870839876e-13
+// variance(f - f_GSL): 1.7350118793242040e-23
+// stddev(f - f_GSL): 4.1653473796601937e-12
 const testcase_hyperg<double>
 data163[19] =
 {
   { 0.067462409738203527, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.084813629887172531, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.10799223563666395, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.13947766136095380, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.18305927261494301, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.24468431546783440, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.33397274564972929, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.24468431546783478, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.33397274564972962, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.46703323887436765, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.67194346197695642, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.5503148146900136, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 2.5278200136940998, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.5278200136941025, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 4.3933515329658954, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 8.3000308946110888, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 8.3000308946111048, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 17.570215556257921, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 43.847462183266167, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 141.86909082943853, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 141.86909082943893, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 736.63489653168926, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 12117.500593515439, 5.0000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 12117.500593515540, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler163 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 6.8212102632969618e-13
-// max(|f - f_GSL| / |f_GSL|): 1.3038469641917493e-15
+// max(|f - f_GSL|): 6.8212102632969618e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3038469641917422e-15
+// mean(f - f_GSL): 3.9518096397578601e-14
+// variance(f - f_GSL): 2.4215530819720675e-26
+// stddev(f - f_GSL): 1.5561340179984714e-13
 const testcase_hyperg<double>
 data164[19] =
 {
   { 0.12409443806004226, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.14886910375100415, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.18023328876836348, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.22044046981094723, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.27271160690708790, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.34174821195025828, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.43457788826160254, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.34174821195025845, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.43457788826160282, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.56199385898404552, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.74109892753745221, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3869229400096228, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 1.9890168748121255, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.9890168748121269, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 2.9741205609307424, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 4.6924751038237300, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 4.6924751038237345, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 7.9555939380658254, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 14.933102063314404, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 32.780461638447491, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 32.780461638447541, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 94.848124287773530, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 523.16034401517425, 5.0000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 523.16034401517709, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler164 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 9.9475983006414026e-14
-// max(|f - f_GSL| / |f_GSL|): 1.3163001721303592e-15
+// max(|f - f_GSL|): 9.9475983006414026e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3163001721303552e-15
+// mean(f - f_GSL): 6.1880325425160040e-15
+// variance(f - f_GSL): 5.1034009979425656e-28
+// stddev(f - f_GSL): 2.2590708262342210e-14
 const testcase_hyperg<double>
 data165[19] =
 {
   { 0.17885405888526873, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.20861302518993391, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.24504033307244946, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.29007236051133489, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.34635542859732737, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.41756858504598376, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.50892615622124371, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.41756858504598410, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.50892615622124393, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.62798173270509761, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.78595487360378424, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.2972517637384813, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 1.7224028197396388, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.7224028197396399, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 2.3527690438263305, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 3.3305218060101116, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 3.3305218060101147, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 4.9383884076775466, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 7.8007604680775229, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 13.518663719271885, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 13.518663719271903, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 27.285345906502567, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 75.572415101501988, 5.0000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 75.572415101502216, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler165 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.81250000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8182428501096805e-15
+// max(|f - f_GSL|): 0.81250000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8182428501096257e-15
+// mean(f - f_GSL): 0.042765168793266639
+// variance(f - f_GSL): 0.034744884250260212
+// stddev(f - f_GSL): 0.18639979680852714
 const testcase_hyperg<double>
 data166[19] =
 {
   { 0.00063586451658060813, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.0010334743461763829, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.0015326246054669763, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.0019007018181583513, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.0012845577715431562, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { -0.0027213806178057538, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { -0.015121744574954058, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { -0.0027213806178060305, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.015121744574954044, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { -0.036637840562974290, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.019117849062621605, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 9.8116901852350615, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 84.255589172244044, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 84.255589172244427, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 773.87517619421294, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 8556.9725363053585, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 8556.9725363054076, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 129023.99999999996, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 3174543.3807373112, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 175133896.95814410, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 175133896.95814583, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 43564453125.000061, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 446859999999993.50, 5.0000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 446860000000007.00, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler166 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.00039672851562500000
-// max(|f - f_GSL| / |f_GSL|): 1.6882064494681041e-15
+// max(|f - f_GSL|): 0.00039672851562500000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6882064494680641e-15
+// mean(f - f_GSL): 2.0884382210121993e-05
+// variance(f - f_GSL): 8.2836958019297269e-09
+// stddev(f - f_GSL): 9.1014810893226203e-05
 const testcase_hyperg<double>
 data167[19] =
 {
   { -0.00030045430691814646, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { -0.00031119487747322054, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { -0.00014589213141656318, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.00056843418860824636, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.0028902549859721747, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.0098776037238878477, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.030689217428863869, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0098776037238877245, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.030689217428863859, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.094211590019076558, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.29791981455918370, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 3.6646308771236793, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 15.133991837501521, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 15.133991837501567, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 73.331330046144089, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 441.01791167787133, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 441.01791167787303, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 3583.9999999999991, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 45299.530029296984, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 1157231.0002427341, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1157231.0002427436, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 107421875.00000016, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 234999999999.99734, 5.0000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 235000000000.00293, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler167 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 9.5367431640625000e-07
-// max(|f - f_GSL| / |f_GSL|): 1.6314276114917867e-15
+// max(|f - f_GSL|): 9.5367431640625000e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6314276114917587e-15
+// mean(f - f_GSL): 5.0242811922592076e-08
+// variance(f - f_GSL): 4.7862904884501567e-14
+// stddev(f - f_GSL): 2.1877592391417655e-07
 const testcase_hyperg<double>
 data168[19] =
 {
   { 0.0058530497315413248, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.0088526869356855397, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.013770987983442959, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.022108932690960776, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.036786236450921550, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.063750669040426505, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.11577228680714462, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.063750669040426408, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.11577228680714466, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.22197573416125760, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.45361312968415324, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 2.4162889363082747, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 6.5381564791240399, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 6.5381564791240541, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 20.415771011498428, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 76.870682056629221, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 76.870682056629448, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 373.58730158730162, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 2626.2555803571477, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 33060.960671081048, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 33060.960671081237, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1203521.8253968258, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 584564285.71427989, 5.0000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 584564285.71428990, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler168 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 7.4505805969238281e-09
-// max(|f - f_GSL| / |f_GSL|): 1.6196914341138888e-15
+// max(|f - f_GSL|): 7.4505805969238281e-09 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6196914341138665e-15
+// mean(f - f_GSL): 3.9331532183208954e-10
+// variance(f - f_GSL): 2.9206631793126476e-18
+// stddev(f - f_GSL): 1.7089947862157589e-09
 const testcase_hyperg<double>
 data169[19] =
 {
   { 0.020248990107069573, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.027876687750502366, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.039154648888447607, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.056251883506774715, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.082914189910074473, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.12585357817786455, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.19761423206224954, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.12585357817786472, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.19761423206224940, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.32280443863359237, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.55250024062839420, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.9374297986599267, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 4.0849049886067696, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 4.0849049886067759, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 9.5926988633258983, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 25.958314281359531, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 25.958314281359588, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 85.333333333333300, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 372.31445312500028, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 2545.3436976070675, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2545.3436976070780, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 39583.333333333343, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 4599999.9999999627, 5.0000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4600000.0000000261, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler169 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=10.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 1.1641532182693481e-10
-// max(|f - f_GSL| / |f_GSL|): 1.4551915228366856e-15
+// max(|f - f_GSL|): 1.0186340659856796e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.1641532182693482e-15
+// mean(f - f_GSL): 5.5487040400966458e-12
+// variance(f - f_GSL): 5.4399356990620132e-22
+// stddev(f - f_GSL): 2.3323669734975269e-11
 const testcase_hyperg<double>
 data170[19] =
 {
-  { 0.040386107340619266, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+  { 0.040386107340619273, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.052922149401344633, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.070429627772374270, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
-  { 0.095367431640624972, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
-  { 0.13168724279835387, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.18593443208187066, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.26932907434290437, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
-  { 0.40187757201646096, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.095367431640624986, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.13168724279835389, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.18593443208187072, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.26932907434290460, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.40187757201646102, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.62092132305915493, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.6935087808430296, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 3.0517578124999991, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 3.0517578125000036, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 5.9499018266198629, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 12.860082304526737, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 12.860082304526767, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 32.000000000000000, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 97.656250000000114, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 411.52263374485580, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
-  { 3124.9999999999991, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 99999.999999999665, 5.0000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 411.52263374485722, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 3124.9999999999995, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 100000.00000000055, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler170 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 60129542144.000000
-// max(|f - f_GSL| / |f_GSL|): 2.0181355730233454e-15
+// max(|f - f_GSL|): 60129542144.000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.0181355730232468e-15
+// mean(f - f_GSL): 3164712852.2154636
+// variance(f - f_GSL): 1.9029272767041847e+20
+// stddev(f - f_GSL): 13794663014.021708
 const testcase_hyperg<double>
 data171[19] =
 {
   { -1.8650300348790099e-05, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { -3.6488008415371319e-05, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { -6.4614776410961038e-05, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { -8.4495207102246549e-05, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 2.2276197023825424e-05, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.00070736115111447856, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.0027829732057273854, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.00070736115111457809, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0027829732057272588, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.0013283545664371644, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { -0.041767631015048774, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 61.311496556100003, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 2397.4420539085681, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2397.4420539085872, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 103687.60998586559, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 6247196.6451068865, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 6247196.6451069508, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 656408576.00000000, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 165334768098.54715, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 175097125520816.81, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 175097125520819.91, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 2.6818275451660257e+18, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 2.9794599999999321e+25, 5.0000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.9794600000000777e+25, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler171 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 9437184.0000000000
-// max(|f - f_GSL| / |f_GSL|): 2.0515617391304744e-15
+// max(|f - f_GSL|): 9437184.0000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.0515617391303805e-15
+// mean(f - f_GSL): 496693.97369064158
+// variance(f - f_GSL): 4687391593519.1660
+// stddev(f - f_GSL): 2165038.4739119918
 const testcase_hyperg<double>
 data172[19] =
 {
   { -3.6403884516313627e-06, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { -9.5873829246491408e-06, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { -2.6052245147200097e-05, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { -7.2378303598384501e-05, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { -0.00020048577321417379, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { -0.00051222704046227391, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { -0.00080950511491898055, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { -0.00051222704046234439, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.00080950511491888959, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.0043473422174314250, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.081078342558623853, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 12.794854084397739, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 195.15639104739046, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 195.15639104739174, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 3938.7991953190131, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 118521.48653762060, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 118521.48653762160, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 6291455.9999999972, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 773070496.50699198, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 363276452167.04102, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 363276452167.04718, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 2002716064453133.0, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 4.5999999999999109e+21, 5.0000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4.6000000000001222e+21, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler172 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 5120.0000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.7944916193878923e-15
+// max(|f - f_GSL|): 5120.0000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7944916193878173e-15
+// mean(f - f_GSL): 269.47388985302263
+// variance(f - f_GSL): 1379705.1461701661
+// stddev(f - f_GSL): 1174.6085076186730
 const testcase_hyperg<double>
 data173[19] =
 {
   { 0.00014313323624053599, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.00025426183473118769, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.00048255612836437054, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.00099096904674794185, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.0022347805521915616, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.0056271390060292845, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.016109059519227316, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0056271390060294354, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.016109059519227351, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.053453465775609076, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.20995202901839263, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 5.9534372167648799, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 46.157632071205875, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 46.157632071206095, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 494.32074431164915, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 7989.5277611775946, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 7989.5277611776519, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 224179.55830753347, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 13848144.485282511, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 2948587692.8891716, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2948587692.8892150, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 5940513286161.6602, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 2.8531757655945201e+18, 5.0000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.8531757655946394e+18, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler173 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 7.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.5351977183414298e-15
+// max(|f - f_GSL|): 7.0000000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5351977183413728e-15
+// mean(f - f_GSL): 0.36842306154970872
+// variance(f - f_GSL): 2.5789458059294108
+// stddev(f - f_GSL): 1.6059096506122039
 const testcase_hyperg<double>
 data174[19] =
 {
   { 0.0012492049968744917, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.0019931241968014200, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.0033203386861410844, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.0058191894509856774, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.010830090368313864, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.021653062305192875, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.047180821280919043, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.021653062305193541, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.047180821280919195, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.11405637279736212, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.31275468794721017, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 3.8598904658643969, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 18.806301417906667, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 18.806301417906734, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 122.77054465017432, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 1168.4762146808946, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1168.4762146809012, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 18437.511788521082, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 597441.79669264762, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 59390411.369227782, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 59390411.369228527, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 44681668993.361603, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 4559673269683164.0, 5.0000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4559673269683333.0, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler174 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=20.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.029296875000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8717083246628922e-15
+// max(|f - f_GSL|): 0.029296875000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8717083246628342e-15
+// mean(f - f_GSL): 0.0015419659355661440
+// variance(f - f_GSL): 4.5173964710879197e-05
+// stddev(f - f_GSL): 0.0067211579888348996
 const testcase_hyperg<double>
 data175[19] =
 {
   { 0.0038867957051370739, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.0058484892597364235, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.0090987656053758189, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.014714392537270657, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.024900404542056772, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.044460184663785027, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.084638849196356780, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.044460184663785055, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.084638849196357113, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.17409058241291026, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.39357055823580767, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 2.9410794636226596, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 10.417226071414344, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 10.417226071414374, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 46.930585873140835, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 290.76717121814852, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 290.76717121814988, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 2788.1641083374830, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 50228.117718560752, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 2433042.3476752634, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 2433042.3476752895, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 705345246.77141762, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 15652478868616.762, 5.0000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 15652478868617.246, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler175 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data176[19] =
 {
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler176 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data177[19] =
 {
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler177 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data178[19] =
 {
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler178 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data179[19] =
 {
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler179 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data180[19] =
 {
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler180 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 1.4901161193847656e-08
-// max(|f - f_GSL| / |f_GSL|): 1.8229127098648091e-15
+// max(|f - f_GSL|): 1.4901161193847656e-08 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8229127098647768e-15
+// mean(f - f_GSL): 7.8543415046726153e-10
+// variance(f - f_GSL): 1.1684633485497506e-17
+// stddev(f - f_GSL): 3.4182793164832956e-09
 const testcase_hyperg<double>
 data181[19] =
 {
   { 0.37727530159464628, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.39816010922169059, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.42283703041362447, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.45255640448730527, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.48919507154431119, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.53569358917731924, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.59689778897029544, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.53569358917731902, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.59689778897029577, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.68128587569875765, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.80478739308790359, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3408664196153621, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 2.0175364359923860, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.0175364359923882, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 3.6011214553736646, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 8.1799429939495312, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 8.1799429939495489, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 25.644834637536000, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 123.13738891597615, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 1088.7122410321333, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1088.7122410321385, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 27358.291704709951, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 8174369.0266731177, 10.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 8174369.0266732639, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler181 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 2.0008883439004421e-11
-// max(|f - f_GSL| / |f_GSL|): 1.5684473872214654e-15
+// max(|f - f_GSL|): 2.0008883439004421e-11 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5684473872214445e-15
+// mean(f - f_GSL): 1.0626587329385841e-12
+// variance(f - f_GSL): 2.1050090066796454e-23
+// stddev(f - f_GSL): 4.5880377141863658e-12
 const testcase_hyperg<double>
 data182[19] =
 {
   { 0.53905528308450823, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.56235533974376162, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.58887657983263575, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.61941227047262937, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.65504896640793864, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.69731666644529977, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.74844073299399139, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.74844073299399116, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.81178446800105830, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.89266981277598045, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1497248473106778, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 1.3729717112654571, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3729717112654578, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.7374982340374392, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 2.4134479340960580, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.4134479340960602, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 3.9191255240471192, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 8.3316373077761270, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 28.323020339843335, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 28.323020339843417, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 225.84286572747891, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 12757.127591286655, 10.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 12757.127591286826, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler182 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 1.9895196601282805e-13
-// max(|f - f_GSL| / |f_GSL|): 1.4567107859209967e-15
+// max(|f - f_GSL|): 1.9895196601282805e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4567107859209851e-15
+// mean(f - f_GSL): 1.1043797455481820e-14
+// variance(f - f_GSL): 2.0706176432127926e-27
+// stddev(f - f_GSL): 4.5504039855959963e-14
 const testcase_hyperg<double>
 data183[19] =
 {
   { 0.62672622092226027, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.64931010269769840, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.67448067519076293, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.70276306239803643, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.73484179773087521, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.77162761412743874, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.81436116844816564, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.81436116844816553, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.86477994787944579, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.92539820516603888, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0945599448210315, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.2190897395597264, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2190897395597269, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.3916844336856475, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 1.6484497630432013, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.6484497630432020, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 2.0717772717131155, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 2.8893613630810924, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 4.9459404075413529, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 4.9459404075413573, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 13.487394149998716, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 136.57616044013972, 10.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 136.57616044014080, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler183 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 1.2434497875801753e-14
-// max(|f - f_GSL| / |f_GSL|): 1.3245081211977836e-15
+// max(|f - f_GSL|): 1.2434497875801753e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3245081211977792e-15
+// mean(f - f_GSL): 8.5311874523827817e-16
+// variance(f - f_GSL): 7.8655509529357183e-30
+// stddev(f - f_GSL): 2.8045589587198410e-15
 const testcase_hyperg<double>
 data184[19] =
 {
   { 0.68421604440344319, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.70548098055548925, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.72884342311710337, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.75466953437856232, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.78342090924662589, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.81568884278645082, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.85224480241465239, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.81568884278645115, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.85224480241465261, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.89411692571131685, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.94270986892954811, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0688682849120232, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.1537004376097553, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.2615455028370031, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 1.4045541456153436, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.4045541456153443, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.6057216489444517, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.9146603020550739, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 2.4617931307620298, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.4617931307620307, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 3.7267799624996498, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 9.3880118036248401, 10.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 9.3880118036248721, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler184 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.50000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 1.5700924586837752e-16
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8577584504832499e-16
+// mean(f - f_GSL): 5.8432790769745078e-18
+// variance(f - f_GSL): 1.1262748212790853e-32
+// stddev(f - f_GSL): 1.0612609581432294e-16
 const testcase_hyperg<double>
 data185[19] =
 {
-  { 0.72547625011001171, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+  { 0.72547625011001160, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.74535599249992990, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.76696498884737041, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.79056941504209477, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.81649658092772603, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.84515425472851657, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.87705801930702920, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.84515425472851669, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.87705801930702931, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.91287092917527690, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.95346258924559224, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0540925533894598, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.1180339887498949, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.1952286093343938, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 1.2909944487358056, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
-  { 1.4142135623730949, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2909944487358058, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.4142135623730951, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.5811388300841900, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 1.8257418583505536, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.8257418583505542, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 2.2360679774997898, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 3.1622776601683782, 10.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 3.1622776601683809, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler185 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 2.0861625671386719e-07
-// max(|f - f_GSL| / |f_GSL|): 1.6897916810721311e-15
+// max(|f - f_GSL|): 2.0861625671386719e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6897916810721003e-15
+// mean(f - f_GSL): 1.0989192059253727e-08
+// variance(f - f_GSL): 2.2903477685061008e-15
+// stddev(f - f_GSL): 4.7857577963224392e-08
 const testcase_hyperg<double>
 data186[19] =
 {
   { 0.12307420104127866, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.13818870041457434, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.15739165631811705, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.18249038606882081, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.21644171225027795, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.26433326159804132, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.33544459430654539, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.26433326159804149, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.33544459430654527, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.44788516696232511, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.63989153514168373, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.7568608796813312, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 3.5836558871799027, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.5836558871799102, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 8.8077526749963226, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 27.285841702089190, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 27.285841702089265, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 113.55555555555557, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 706.24023437500091, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 8064.1687976651992, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 8064.1687976652511, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 271267.22222222196, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 123456789.99999890, 10.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 123456790.00000113, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler186 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 2.6193447411060333e-10
-// max(|f - f_GSL| / |f_GSL|): 1.6039867544159931e-15
+// max(|f - f_GSL|): 2.6193447411060333e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6039867544159698e-15
+// mean(f - f_GSL): 1.3861192895235850e-11
+// variance(f - f_GSL): 3.6088478524883243e-21
+// stddev(f - f_GSL): 6.0073686856129647e-11
 const testcase_hyperg<double>
 data187[19] =
 {
   { 0.28363728383055781, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.30933003169808387, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.33998437757128797, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.37713553224291113, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.42299736538419669, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.48086597727600067, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.55583495759293045, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.48086597727600089, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.55583495759293033, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.65612850114039678, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.79573668772968142, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3184712058058303, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 1.8576958065941214, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.8576958065941236, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 2.8759509651764228, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 5.1046225531822182, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 5.1046225531822289, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 11.095238095238095, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 32.797154017857174, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 158.01935680536477, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 158.01935680536548, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1815.9523809523814, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 163302.14285714156, 10.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 163302.14285714392, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler187 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 2.0463630789890885e-12
-// max(|f - f_GSL| / |f_GSL|): 1.5238873992472010e-15
+// max(|f - f_GSL|): 2.0463630789890885e-12 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5238873992471854e-15
+// mean(f - f_GSL): 1.1029773585697082e-13
+// variance(f - f_GSL): 2.1981059026132227e-25
+// stddev(f - f_GSL): 4.6883962104468326e-13
 const testcase_hyperg<double>
 data188[19] =
 {
   { 0.39006633302741811, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.41898885698103278, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.45245557983812590, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.49160548618861627, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.53798419230517991, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.59373881442067322, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.66193391357076126, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.66193391357076092, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.74708402736952118, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.85609281019430605, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1974451135148187, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.4820886036706347, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.4820886036706358, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.9201183180477521, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 2.6569338297733336, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.6569338297733367, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 4.0634920634920650, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 7.3102678571428568, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 17.512574302697733, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 17.512574302697782, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 74.206349206349131, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 1342.8571428571363, 10.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1342.8571428571502, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler188 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 7.8159700933611020e-14
-// max(|f - f_GSL| / |f_GSL|): 1.4210854715202060e-15
+// max(|f - f_GSL|): 7.8159700933611020e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4210854715201975e-15
+// mean(f - f_GSL): 4.6629367034256575e-15
+// variance(f - f_GSL): 3.1677071819086927e-28
+// stddev(f - f_GSL): 1.7798053775367387e-14
 const testcase_hyperg<double>
 data189[19] =
 {
   { 0.46726928123633210, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.49687547629934464, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.53045208856322223, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.56884765624999989, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.61316872427983504, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.66488500161969566, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.72598998634501577, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.66488500161969544, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.72598998634501621, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.79925411522633760, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.88863845062192182, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1423563481176653, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 1.3302951388888888, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3302951388888891, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.5889212827988335, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 1.9650205761316870, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.9650205761316886, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 2.5555555555555549, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 3.5937500000000013, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 5.7818930041152203, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 5.7818930041152274, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 12.222222222222220, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 54.999999999999780, 10.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 55.000000000000114, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler189 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=1.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 1.7763568394002505e-15
-// max(|f - f_GSL| / |f_GSL|): 2.1094237467877971e-16
+// max(|f - f_GSL|): 1.7763568394002505e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9984014443252816e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 1.6955391669463862e-31
+// stddev(f - f_GSL): 4.1176925175957300e-16
 const testcase_hyperg<double>
 data190[19] =
 {
   { 0.52631578947368429, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.55555555555555558, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.58823529411764708, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.62500000000000000, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.66666666666666663, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 0.71428571428571430, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.76923076923076927, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.76923076923076938, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.83333333333333337, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.90909090909090906, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.1111111111111112, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 1.2500000000000000, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2500000000000002, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.4285714285714286, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 1.6666666666666663, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.6666666666666670, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 2.0000000000000000, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
-  { 2.5000000000000004, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 3.3333333333333330, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 2.5000000000000009, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 3.3333333333333348, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 5.0000000000000009, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 9.9999999999999929, 10.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 10.000000000000011, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler190 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 2.2888183593750000e-05
-// max(|f - f_GSL| / |f_GSL|): 2.8610229492187516e-15
+// max(|f - f_GSL|): 2.2888183593750000e-05 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.4795532226562509e-15
+// mean(f - f_GSL): 1.2059140510950354e-06
+// variance(f - f_GSL): 2.7568813079896666e-11
+// stddev(f - f_GSL): 5.2506012112801583e-06
 const testcase_hyperg<double>
 data191[19] =
 {
   { 0.0016310376661280216, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.0028007538972582421, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.0049603324681551939, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.0090949470177292789, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.017341529915832606, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.034571613033607777, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.072538150286405714, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.034571613033607791, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.072538150286405839, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.16150558288984579, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
-  { 0.38554328942953148, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.38554328942953142, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 2.8679719907924444, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 9.3132257461547816, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 9.3132257461548065, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 35.401331746414378, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 165.38171687920172, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 165.38171687920246, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1024.0000000000000, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
-  { 9536.7431640625200, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 169350.87808430271, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
-  { 9765624.9999999944, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 9999999999.9999332, 10.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 9536.7431640625218, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 169350.87808430390, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 9765624.9999999963, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 10000000000.000111, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler191 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 1.4901161193847656e-08
-// max(|f - f_GSL| / |f_GSL|): 1.4958811384436855e-15
+// max(|f - f_GSL|): 1.4901161193847656e-08 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4958811384436608e-15
+// mean(f - f_GSL): 7.8582773037277017e-10
+// variance(f - f_GSL): 1.1683981904064149e-17
+// stddev(f - f_GSL): 3.4181840067591665e-09
 const testcase_hyperg<double>
 data192[19] =
 {
   { 0.071191280690193537, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.085646504654238384, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.10478215656371109, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.13074816337653578, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.16701141666848118, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.21939323375313968, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.29813515331786616, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.21939323375313963, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.29813515331786639, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.42225974638874397, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.62942145962174878, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.7218685262373197, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 3.2855760483514689, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.2855760483514738, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 7.1616652508907093, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 18.612326808485907, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 18.612326808485950, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 61.476190476190474, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 286.27580915178623, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 2274.9441142102296, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2274.9441142102414, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 47229.761904761865, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 9961460.7142856438, 10.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 9961460.7142858077, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler192 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 8.7311491370201111e-11
-// max(|f - f_GSL| / |f_GSL|): 1.5843951771650368e-15
+// max(|f - f_GSL|): 8.7311491370201111e-11 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5843951771650161e-15
+// mean(f - f_GSL): 4.6467391338242840e-12
+// variance(f - f_GSL): 4.0072766661644994e-22
+// stddev(f - f_GSL): 2.0018183399510804e-11
 const testcase_hyperg<double>
 data193[19] =
 {
   { 0.14747230019381058, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.17073600100690609, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.19982795745135354, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.23681776864188053, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.28475624360398011, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.34827500743063133, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.34827500743063161, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.43464829159684687, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.55576053438064787, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.73195020913445530, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.4310223867822929, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 2.1742563399057540, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.1742563399057566, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 3.5769231236256043, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 6.5620441134844363, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 6.5620441134844469, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 14.063492063492063, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 38.085937500000036, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 150.92973632068282, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 150.92973632068330, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1212.3015873015852, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 55107.142857142389, 10.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 55107.142857143110, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler193 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 1.8189894035458565e-12
-// max(|f - f_GSL| / |f_GSL|): 1.4848893090170350e-15
+// max(|f - f_GSL|): 1.8189894035458565e-12 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4848893090170230e-15
+// mean(f - f_GSL): 1.0027066896088256e-13
+// variance(f - f_GSL): 1.7322804840633983e-25
+// stddev(f - f_GSL): 4.1620673757922257e-13
 const testcase_hyperg<double>
 data194[19] =
 {
   { 0.21658059714090577, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.24513539602702861, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.27967018274845046, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.32196044921875022, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.37448559670781911, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.44078856032208824, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.44078856032208802, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.52606701446027793, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.63818158436213956, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.78944971882612769, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3044251384443430, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 1.7659505208333335, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.7659505208333344, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 2.5093710953769270, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 3.8065843621399158, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 3.8065843621399202, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 6.3333333333333313, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 12.109375000000004, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 29.115226337448540, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 29.115226337448608, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 108.33333333333330, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 1224.9999999999923, 10.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1225.0000000000023, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler194 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=2.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 4.2632564145606011e-14
-// max(|f - f_GSL| / |f_GSL|): 4.2632564145606064e-16
+// max(|f - f_GSL|): 4.2632564145606011e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.2632564145605916e-16
+// mean(f - f_GSL): 2.3636063866361887e-15
+// variance(f - f_GSL): 9.5093179694074762e-29
+// stddev(f - f_GSL): 9.7515731907254209e-15
 const testcase_hyperg<double>
 data195[19] =
 {
   { 0.27700831024930750, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.30864197530864196, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.34602076124567477, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
-  { 0.39062499999999994, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.39062500000000000, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.44444444444444442, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.51020408163265307, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.59171597633136097, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
-  { 0.69444444444444453, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.51020408163265318, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.59171597633136108, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.69444444444444442, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.82644628099173545, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
-  { 1.2345679012345681, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 1.5624999999999998, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.2345679012345683, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.5625000000000007, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 2.0408163265306127, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 2.7777777777777768, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 2.7777777777777795, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 4.0000000000000000, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
-  { 6.2500000000000036, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 11.111111111111109, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 6.2500000000000027, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 11.111111111111125, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 25.000000000000007, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 99.999999999999872, 10.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 100.00000000000023, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler195 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.81250000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8182428501096805e-15
+// max(|f - f_GSL|): 0.81250000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8182428501096257e-15
+// mean(f - f_GSL): 0.042765168793266639
+// variance(f - f_GSL): 0.034744884250260212
+// stddev(f - f_GSL): 0.18639979680852714
 const testcase_hyperg<double>
 data196[19] =
 {
   { 0.00063586451658060813, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.0010334743461763829, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.0015326246054669763, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.0019007018181583513, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.0012845577715431562, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { -0.0027213806178057538, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { -0.015121744574954058, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { -0.0027213806178060305, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.015121744574954044, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { -0.036637840562974290, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.019117849062621605, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 9.8116901852350615, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 84.255589172244044, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 84.255589172244427, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 773.87517619421294, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 8556.9725363053585, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 8556.9725363054076, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 129023.99999999996, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 3174543.3807373112, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 175133896.95814410, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 175133896.95814583, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 43564453125.000061, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 446859999999993.50, 10.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 446860000000007.00, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler196 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.00039672851562500000
-// max(|f - f_GSL| / |f_GSL|): 1.6882064494681041e-15
+// max(|f - f_GSL|): 0.00039672851562500000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6882064494680641e-15
+// mean(f - f_GSL): 2.0884382210121993e-05
+// variance(f - f_GSL): 8.2836958019297269e-09
+// stddev(f - f_GSL): 9.1014810893226203e-05
 const testcase_hyperg<double>
 data197[19] =
 {
   { -0.00030045430691814646, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { -0.00031119487747322054, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { -0.00014589213141656318, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.00056843418860824636, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.0028902549859721747, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.0098776037238878477, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.030689217428863869, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0098776037238877245, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.030689217428863859, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.094211590019076558, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.29791981455918370, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 3.6646308771236793, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 15.133991837501521, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 15.133991837501567, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 73.331330046144089, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 441.01791167787133, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 441.01791167787303, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 3583.9999999999991, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 45299.530029296984, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 1157231.0002427341, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1157231.0002427436, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 107421875.00000016, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 234999999999.99734, 10.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 235000000000.00293, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler197 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 9.5367431640625000e-07
-// max(|f - f_GSL| / |f_GSL|): 1.6314276114917867e-15
+// max(|f - f_GSL|): 9.5367431640625000e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6314276114917587e-15
+// mean(f - f_GSL): 5.0242811922592076e-08
+// variance(f - f_GSL): 4.7862904884501567e-14
+// stddev(f - f_GSL): 2.1877592391417655e-07
 const testcase_hyperg<double>
 data198[19] =
 {
   { 0.0058530497315413248, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.0088526869356855397, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.013770987983442959, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.022108932690960776, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.036786236450921550, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.063750669040426505, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.11577228680714462, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.063750669040426408, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.11577228680714466, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.22197573416125760, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.45361312968415324, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 2.4162889363082747, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 6.5381564791240399, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 6.5381564791240541, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 20.415771011498428, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 76.870682056629221, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 76.870682056629448, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 373.58730158730162, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 2626.2555803571477, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 33060.960671081048, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 33060.960671081237, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1203521.8253968258, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 584564285.71427989, 10.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 584564285.71428990, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler198 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 7.4505805969238281e-09
-// max(|f - f_GSL| / |f_GSL|): 1.6196914341138888e-15
+// max(|f - f_GSL|): 7.4505805969238281e-09 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6196914341138665e-15
+// mean(f - f_GSL): 3.9331532183208954e-10
+// variance(f - f_GSL): 2.9206631793126476e-18
+// stddev(f - f_GSL): 1.7089947862157589e-09
 const testcase_hyperg<double>
 data199[19] =
 {
   { 0.020248990107069573, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.027876687750502366, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.039154648888447607, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.056251883506774715, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.082914189910074473, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.12585357817786455, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.19761423206224954, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.12585357817786472, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.19761423206224940, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.32280443863359237, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.55250024062839420, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.9374297986599267, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 4.0849049886067696, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 4.0849049886067759, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 9.5926988633258983, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 25.958314281359531, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 25.958314281359588, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 85.333333333333300, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 372.31445312500028, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 2545.3436976070675, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2545.3436976070780, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 39583.333333333343, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 4599999.9999999627, 10.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4600000.0000000261, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler199 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=5.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 1.1641532182693481e-10
-// max(|f - f_GSL| / |f_GSL|): 1.4551915228366856e-15
+// max(|f - f_GSL|): 1.0186340659856796e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.1641532182693482e-15
+// mean(f - f_GSL): 5.5487040400966458e-12
+// variance(f - f_GSL): 5.4399356990620132e-22
+// stddev(f - f_GSL): 2.3323669734975269e-11
 const testcase_hyperg<double>
 data200[19] =
 {
-  { 0.040386107340619266, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+  { 0.040386107340619273, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.052922149401344633, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.070429627772374270, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
-  { 0.095367431640624972, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
-  { 0.13168724279835387, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.18593443208187066, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.26932907434290437, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
-  { 0.40187757201646096, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.095367431640624986, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.13168724279835389, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.18593443208187072, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.26932907434290460, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.40187757201646102, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.62092132305915493, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.6935087808430296, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 3.0517578124999991, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 3.0517578125000036, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 5.9499018266198629, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 12.860082304526737, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 12.860082304526767, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 32.000000000000000, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 97.656250000000114, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 411.52263374485580, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
-  { 3124.9999999999991, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 99999.999999999665, 10.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 411.52263374485722, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 3124.9999999999995, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 100000.00000000055, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler200 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=10.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 3407872.0000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8642431677286335e-15
+// max(|f - f_GSL|): 3407872.0000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8642431677285562e-15
+// mean(f - f_GSL): 179361.84215676156
+// variance(f - f_GSL): 611241601687.40417
+// stddev(f - f_GSL): 781819.41756866348
 const testcase_hyperg<double>
 data201[19] =
 {
   { 2.3388730079478156e-05, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { -2.3204970759764180e-05, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { -0.00016219730505521665, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { -0.00044366962360922366, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { -0.00071863577205453773, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 4.4378596544533363e-05, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.0044446568070623509, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 4.4378596544482927e-05, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0044446568070621991, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.0071045155183571615, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { -0.049961558159890306, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 51.305449964107403, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 1435.9545414461309, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1435.9545414461415, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 39657.913058984115, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 1346016.4468570501, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1346016.4468570619, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 68086556.444444403, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 6646235808.7301531, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 1954852335479.9702, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1954852335479.9958, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 4573796225043418.0, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 1.8280190368899683e+21, 10.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.8280190368900440e+21, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler201 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=10.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 832.00000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.7889121078953977e-15
+// max(|f - f_GSL|): 832.00000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7889121078953330e-15
+// mean(f - f_GSL): 43.789679427686345
+// variance(f - f_GSL): 36432.823085424323
+// stddev(f - f_GSL): 190.87384075725075
 const testcase_hyperg<double>
 data202[19] =
 {
   { 1.3504013648914116e-05, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 3.1753432098506483e-05, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 6.2032098207654132e-05, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 8.8747213942816339e-05, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0478094697613739e-05, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { -0.00055998751005986670, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { -0.0024718654966575881, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { -0.00055998751006022351, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.0024718654966575221, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { -0.0027000264053620069, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.066515394406810743, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 11.579200866389527, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 137.50750548795256, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 137.50750548795330, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1901.3196072993419, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 34210.659507137796, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 34210.659507138007, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 920588.19047619053, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 45876220.933028772, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 6234608574.0963297, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 6234608574.0964050, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 5445391090029.7783, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 4.6508713107142163e+17, 10.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4.6508713107143840e+17, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler202 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=10.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.93750000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8742262123209408e-15
+// max(|f - f_GSL|): 0.93750000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8742262123208804e-15
+// mean(f - f_GSL): 0.049343110712039846
+// variance(f - f_GSL): 0.046258118950011272
+// stddev(f - f_GSL): 0.21507700702309224
 const testcase_hyperg<double>
 data203[19] =
 {
   { -2.6846726901509877e-05, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { -4.7817237144298244e-05, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { -7.2908121941826117e-05, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { -6.0427853197636777e-05, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.00020559720946644960, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.0017056910683366346, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.0088037230970528183, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0017056910683365867, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0088037230970524228, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.041510819735141528, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.19754880805677244, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 5.6130947302779246, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 36.475357196722442, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 36.475357196722619, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 289.29483001400672, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 3010.8676549536503, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 3010.8676549536667, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 45844.317460317419, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1221852.6431492427, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 79585968.928968787, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 79585968.928969592, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 26733475942.460335, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 500206428571421.19, 10.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 500206428571437.38, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler203 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=10.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0024414062500000000
-// max(|f - f_GSL| / |f_GSL|): 1.6580008488964534e-15
+// max(|f - f_GSL|): 0.0024414062500000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6580008488964090e-15
+// mean(f - f_GSL): 0.00012850766473236850
+// variance(f - f_GSL): 3.1370523903989881e-07
+// stddev(f - f_GSL): 0.00056009395554665537
 const testcase_hyperg<double>
 data204[19] =
 {
   { 0.00025866179054283083, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.00053402577739226583, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.0011390075227239291, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.0025224267119482941, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.0058340332124251458, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.014189256143045500, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.036590990011337692, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.014189256143045212, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.036590990011337789, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.10106560781146991, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.30278778538531392, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 3.7187249990350599, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 16.023275545901704, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 16.023275545901761, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 83.265377219882822, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 553.31413918843987, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 553.31413918844225, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 5148.4444444444416, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 78082.084655761908, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 2565874.8781353114, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2565874.8781353347, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 346137152.77777809, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 1472499999999.9834, 10.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1472500000000.0227, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler204 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=10.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 2.2888183593750000e-05
-// max(|f - f_GSL| / |f_GSL|): 2.8610229492187516e-15
+// max(|f - f_GSL|): 2.2888183593750000e-05 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.4795532226562509e-15
+// mean(f - f_GSL): 1.2059140510950354e-06
+// variance(f - f_GSL): 2.7568813079896666e-11
+// stddev(f - f_GSL): 5.2506012112801583e-06
 const testcase_hyperg<double>
 data205[19] =
 {
   { 0.0016310376661280216, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.0028007538972582421, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.0049603324681551939, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.0090949470177292789, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.017341529915832606, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.034571613033607777, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.072538150286405714, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.034571613033607791, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.072538150286405839, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.16150558288984579, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
-  { 0.38554328942953148, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.38554328942953142, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 2.8679719907924444, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 9.3132257461547816, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 9.3132257461548065, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 35.401331746414378, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 165.38171687920172, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 165.38171687920246, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1024.0000000000000, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
-  { 9536.7431640625200, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 169350.87808430271, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
-  { 9765624.9999999944, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 9999999999.9999332, 10.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 9536.7431640625218, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 169350.87808430390, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 9765624.9999999963, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 10000000000.000111, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler205 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=20.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 2.5940733853654057e+18
-// max(|f - f_GSL| / |f_GSL|): 1.8312596334405405e-15
+// max(|f - f_GSL|): 2.5940733853654057e+18 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8312596334404269e-15
+// mean(f - f_GSL): 1.3653017829015250e+17
+// variance(f - f_GSL): 4.1617051640949032e+35
+// stddev(f - f_GSL): 6.4511279355589466e+17
 const testcase_hyperg<double>
 data206[19] =
 {
   { -2.1776535312781759e-07, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { -2.9128833151630439e-06, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { -9.4755553429932710e-06, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { -1.2844297353852837e-05, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 3.6576965483549205e-05, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.00020847453890689954, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { -0.00022868510398160936, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.00020847453890703339, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.00022868510398194936, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { -0.0021855513841943421, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.014662111759334568, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 746.44776348798098, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 136080.48445225612, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 136080.48445225772, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 23094279.597826406, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 5315913395.5545301, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 5315913395.5545979, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 2261935718399.9990, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 2669150854828235.0, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 1.7499363099365994e+19, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.7499363099366351e+19, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 2.8881518494606140e+24, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 1.4165513933661626e+33, 10.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.4165513933662505e+33, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler206 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=20.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 299067162755072.00
-// max(|f - f_GSL| / |f_GSL|): 2.1129345912024644e-15
+// max(|f - f_GSL|): 299067162755072.00 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.1129345912023457e-15
+// mean(f - f_GSL): 15740377042297.895
+// variance(f - f_GSL): 4.7074334083472640e+27
+// stddev(f - f_GSL): 68610738287437.656
 const testcase_hyperg<double>
 data207[19] =
 {
   { 1.7149006966334498e-07, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 3.2399324906563845e-07, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.6015317699713284e-07, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { -2.0500917201273337e-06, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { -1.0175546788592665e-05, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { -1.1720101988158874e-05, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.00014199637113975139, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { -1.1720101988188077e-05, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.00014199637113982382, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.00021263363640641769, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { -0.0072649256698439626, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 90.430293772869618, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 6248.1455940292308, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 6248.1455940292872, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 501143.39852548984, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 58852027.356439680, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 58852027.356440276, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 12942923093.333330, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 7618073993853.6592, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 22630251562549288., 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 22630251562549772., 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.3708372433980356e+21, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 1.4154113619999653e+29, 10.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.4154113620000448e+29, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler207 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=20.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 103079215104.00000
-// max(|f - f_GSL| / |f_GSL|): 1.8869870511942065e-15
+// max(|f - f_GSL|): 103079215104.00000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8869870511941024e-15
+// mean(f - f_GSL): 5425221928.4235201
+// variance(f - f_GSL): 5.5922760890380314e+20
+// stddev(f - f_GSL): 23647993760.651306
 const testcase_hyperg<double>
 data208[19] =
 {
   { -1.6667473284194196e-08, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 8.6214843496406671e-08, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 5.7778331275185146e-07, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 2.1911400502042259e-06, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 4.7440049217199358e-06, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { -1.0564233315113883e-05, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { -0.00017990026051873263, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { -1.0564233314712615e-05, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.00017990026051847404, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { -0.00027618146288724629, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.030606019577723666, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 27.832854169493341, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 874.00624088575228, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 874.00624088575910, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 36049.199340831554, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 2270967.7298624986, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2270967.7298625209, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 266979100.44444439, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 80311224337.493027, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 110111693103799.72, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 110111693103801.77, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 2.4838871426052618e+18, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 5.4626349999998603e+25, 10.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.4626350000001618e+25, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler208 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=20.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 100663296.00000000
-// max(|f - f_GSL| / |f_GSL|): 1.9414329026037087e-15
+// max(|f - f_GSL|): 100663296.00000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9414329026036117e-15
+// mean(f - f_GSL): 5298068.6316046715
+// variance(f - f_GSL): 533321003794731.12
+// stddev(f - f_GSL): 23093743.823701065
 const testcase_hyperg<double>
 data209[19] =
 {
   { -1.5843795889906876e-07, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { -5.4877276002864784e-07, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { -1.7169507967699695e-06, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { -4.5236439749819329e-06, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { -5.5690492560381956e-06, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 5.6914115607022928e-05, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.00082507252097525810, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 5.6914115606653561e-05, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.00082507252097489250, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.0085739249288230429, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.088244357683754687, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 13.387208440156897, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 226.77895441155110, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 226.77895441155252, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 5281.5716482686785, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 189431.77762850464, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 189431.77762850633, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 12408149.333333332, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1966782292.5839682, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 1274123112205.7495, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1274123112205.7700, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 10903676350911508., 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 5.1849999999998819e+22, 10.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.1850000000001411e+22, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler209 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=20.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 425984.00000000000
+// max(|f - f_GSL|): 475136.00000000000 at index 18
 // max(|f - f_GSL| / |f_GSL|): 5.4067200000000052e-15
+// mean(f - f_GSL): 25007.185032091642
+// variance(f - f_GSL): 11881799540.814577
+// stddev(f - f_GSL): 109003.66755671379
 const testcase_hyperg<double>
 data210[19] =
 {
   { 2.6602838683283435e-06, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 7.8442223930072316e-06, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 2.4604898194634598e-05, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 8.2718061255302686e-05, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.00030072865982171723, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.0011951964277455193, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.0052617832469731814, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
-  { 0.026084053304588847, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0011951964277455204, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0052617832469731996, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.026084053304588850, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.14864362802414346, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 8.2252633399699757, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 86.736173798840269, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
-  { 1253.2542894196865, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 27351.112277912434, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 86.736173798840738, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1253.2542894196868, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 27351.112277912678, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1048576.0000000000, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 90949470.177293226, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 28679719907.924358, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 28679719907.924767, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 95367431640624.906, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 9.9999999999998657e+19, 10.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000220e+20, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler210 = 5.0000000000000039e-13;
 
 // Test data for a=20.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data211[19] =
 {
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
+         2.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler211 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data212[19] =
 {
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler212 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data213[19] =
 {
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
+         6.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler213 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data214[19] =
 {
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler214 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hyperg<double>
 data215[19] =
 {
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
+         10.000000000000000, -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler215 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 48.000000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8556481344875154e-15
+// max(|f - f_GSL|): 48.000000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8556481344874416e-15
+// mean(f - f_GSL): 2.5263190030329112
+// variance(f - f_GSL): 121.26314075575490
+// stddev(f - f_GSL): 11.011954447588080
 const testcase_hyperg<double>
 data216[19] =
 {
   { 0.26690449940521549, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.28252302866181833, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.30123616141153836, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.32421384687602633, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.35334630811776774, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.39191793127467028, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.44620488618129195, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.39191793127466995, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.44620488618129212, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.52980896919265719, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.67754711477562324, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.9567557771780317, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 6.1816042148333086, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 6.1816042148333272, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 35.653088618561227, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 377.51482843179906, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 377.51482843180133, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 7645.8816551195359, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 354791.74537980522, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 57009889.966638684, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 57009889.966639392, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 83771357024.863937, 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 25866972896376408., 20.000000000000000, 0.50000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 25866972896377436., 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler216 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.011718750000000000
-// max(|f - f_GSL| / |f_GSL|): 1.7519521419034139e-15
+// max(|f - f_GSL|): 0.011718750000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7519521419033478e-15
+// mean(f - f_GSL): 0.00061678102606403001
+// variance(f - f_GSL): 7.2278413174892008e-06
+// stddev(f - f_GSL): 0.0026884644906506020
 const testcase_hyperg<double>
 data217[19] =
 {
   { 0.40342659436153389, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.42420571192034318, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.44852768286073041, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.47751245808592863, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.51283632632707765, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
   { 0.55713468814894329, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.61481320817757334, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.61481320817757346, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.69383483410097213, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.81012002526006044, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3622225506603911, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 2.2349513086109001, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.2349513086109027, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 5.1864917536761723, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 21.020560423779411, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 21.020560423779497, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 175.19649997100612, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 3467.1587803688708, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 225003.88683445856, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 225003.88683446089, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 110837674.65652709, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 6688966964170.6807, 20.000000000000000, 0.50000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 6688966964170.9326, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler217 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 1.4305114746093750e-05
-// max(|f - f_GSL| / |f_GSL|): 1.9261147266354006e-15
+// max(|f - f_GSL|): 1.4305114746093750e-05 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9261147266353426e-15
+// mean(f - f_GSL): 7.5292535813082699e-07
+// variance(f - f_GSL): 1.0770292922645316e-11
+// stddev(f - f_GSL): 3.2818124447697064e-06
 const testcase_hyperg<double>
 data218[19] =
 {
   { 0.48716309885816822, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.50965859152542337, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.53554809210658938, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.56576689207507136, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.60164849637133655, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.64516711595404364, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.69938278735493520, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.64516711595404408, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.69938278735493553, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.76931621518401860, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.86381808725530662, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.2152051956815531, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 1.6052546785425543, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.6052546785425557, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 2.4765586046012635, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 5.1564492216997486, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 5.1564492216997611, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 18.446158392136365, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 150.44577670123971, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 3862.6317400115768, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3862.6317400116104, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 632428.34833625401, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 7426927663.3808765, 20.000000000000000, 0.50000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 7426927663.3810987, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler218 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 4.0978193283081055e-08
-// max(|f - f_GSL| / |f_GSL|): 1.7692881266931737e-15
+// max(|f - f_GSL|): 4.0978193283081055e-08 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7692881266931270e-15
+// mean(f - f_GSL): 2.1571346930926438e-09
+// variance(f - f_GSL): 8.8377830897836260e-17
+// stddev(f - f_GSL): 9.4009484041683924e-09
 const testcase_hyperg<double>
 data219[19] =
 {
   { 0.54703266209548373, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.56997321774144960, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.59603026159654982, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.62596978851120511, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.66084565876898915, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.70215256667232873, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.75208916592008557, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.70215256667232862, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.75208916592008568, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.81403631111658625, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.89348608489854597, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.1517793185139173, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 1.3878110313656598, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3878110313656606, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 1.8061071794572381, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 2.7148594517859586, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.7148594517859612, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 5.4529435709049361, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 19.487310275377109, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 191.69079165937470, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 191.69079165937592, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 10218.543981792311, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 23160836.646583911, 20.000000000000000, 0.50000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 23160836.646584522, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler219 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.50000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 2.9103830456733704e-10
-// max(|f - f_GSL| / |f_GSL|): 1.6694673196526831e-15
+// max(|f - f_GSL|): 2.9103830456733704e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6694673196526424e-15
+// mean(f - f_GSL): 1.5333453804912193e-11
+// variance(f - f_GSL): 4.4575621294589140e-21
+// stddev(f - f_GSL): 6.6764976817631821e-11
 const testcase_hyperg<double>
 data220[19] =
 {
   { 0.59292067298616025, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.61572496720679892, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.64135339122875590, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.67043457419280461, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.70380956268170969, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.74263251901495220, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.78853555445528256, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.74263251901495264, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.78853555445528289, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.84391122775673755, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.91242401018807373, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.1169059681274873, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 1.2825928301302667, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2825928301302669, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 1.5385937789924939, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 1.9895771187893898, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.9895771187893914, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 2.9707335806970168, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 6.0299506157180467, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 24.259090336955577, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 24.259090336955669, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 406.27267173257223, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 174330.03997220192, 20.000000000000000, 0.50000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 174330.03997220617, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler220 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 1024.0000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.7510400000000382e-15
+// max(|f - f_GSL|): 1024.0000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7510399999999635e-15
+// mean(f - f_GSL): 53.894788252704814
+// variance(f - f_GSL): 55188.204676932175
+// stddev(f - f_GSL): 234.92169903381034
 const testcase_hyperg<double>
 data221[19] =
 {
   { 0.058479236576646311, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.065788544763137821, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.075184824937824482, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.087707688693157121, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.10521567442213345, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.13135877960541550, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.17423854066297098, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.13135877960541509, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.17423854066297137, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.25492082527223520, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.44025895219654843, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 3.3698615820910360, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 17.997089220808483, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 17.997089220808562, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 153.73298291118951, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 2159.1667587825627, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2159.1667587825768, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 55188.105263157879, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 3191209.3921857267, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 646910975.29152656, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 646910975.29153574, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 1254834626850.2659, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 5.8479532163741414e+17, 20.000000000000000, 1.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.8479532163743910e+17, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler221 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 0.21875000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.5452521875000274e-15
+// max(|f - f_GSL|): 0.21875000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5452521874999694e-15
+// mean(f - f_GSL): 0.011513220685868108
+// variance(f - f_GSL): 0.0025185017633005862
+// stddev(f - f_GSL): 0.050184676578618956
 const testcase_hyperg<double>
 data222[19] =
 {
   { 0.15519511120894958, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.17197165701692893, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.19276847315207329, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.21920107206179093, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.25386158960390576, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.30115970686600674, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.36916408142057106, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.30115970686600663, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.36916408142057128, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.47406175901569547, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.65237908266239919, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.8227213362622299, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 4.3716358339791332, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 4.3716358339791430, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 15.670841312959222, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 94.742651122760179, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 94.742651122760662, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 1081.7275541795671, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 27809.787731465960, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 2329811.1715181042, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2329811.1715181284, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1537787532.6780224, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 141562653506999.88, 20.000000000000000, 1.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 141562653507005.19, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler222 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.00024414062500000000
-// max(|f - f_GSL| / |f_GSL|): 1.6763226855512825e-15
+// max(|f - f_GSL|): 0.00024414062500000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6763226855512285e-15
+// mean(f - f_GSL): 1.2849899481406474e-05
+// variance(f - f_GSL): 3.1370759089735494e-09
+// stddev(f - f_GSL): 5.6009605506319623e-05
 const testcase_hyperg<double>
 data223[19] =
 {
   { 0.23253645591196551, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.25484220947068342, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.28181987881113812, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.31508211677735770, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.35706285886959610, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.41160053409238206, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.48508083111181960, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.41160053409238190, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.48508083111181938, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.58885194371375260, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.74482241684585782, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.4700356864367146, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 2.4955144453055143, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.4955144453055174, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 5.3506594845833471, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 16.618413752184221, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 16.618413752184267, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 89.310629514963878, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1029.3439900542960, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 35659.847863372350, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 35659.847863372670, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 8009309.6233230168, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 145640590027.39731, 20.000000000000000, 1.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 145640590027.40201, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler223 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 7.1525573730468750e-07
-// max(|f - f_GSL| / |f_GSL|): 1.7237966704608456e-15
+// max(|f - f_GSL|): 7.1525573730468750e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7237966704607975e-15
+// mean(f - f_GSL): 3.7648905700618082e-08
+// variance(f - f_GSL): 2.6925522674362989e-14
+// stddev(f - f_GSL): 1.6408998346749562e-07
 const testcase_hyperg<double>
 data224[19] =
 {
   { 0.29614148314592509, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.32176277356430805, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.35217870475550511, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.38885270445515113, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.43389978380608418, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.49048612522269458, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.49048612522269414, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
   { 0.56355539635634599, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.66123153239117671, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.79773363961895416, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.3245132157016595, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 1.9065148749742076, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.9065148749742094, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 3.1328798652457452, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 6.4172532944033476, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 6.4172532944033636, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 19.071683734222436, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 104.41989641582512, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 1510.5743992324240, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1510.5743992324351, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 115518.14360562043, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 414930455.29173034, 20.000000000000000, 1.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 414930455.29174191, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler224 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=1.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 4.6566128730773926e-09
-// max(|f - f_GSL| / |f_GSL|): 1.6665618165272271e-15
+// max(|f - f_GSL|): 4.6566128730773926e-09 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6665618165271877e-15
+// mean(f - f_GSL): 2.4523176471958370e-10
+// variance(f - f_GSL): 1.1411894517911952e-18
+// stddev(f - f_GSL): 1.0682646918208967e-09
 const testcase_hyperg<double>
 data225[19] =
 {
   { 0.34954259539177701, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.37714038609235134, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.40942091659748781, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.44767109606846422, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.49368984777532227, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.55006638216982295, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.62065830207408890, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.55006638216982318, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.62065830207408901, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.71145554513583764, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.83223839666914623, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.2466748028187731, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 1.6386752725021749, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.6386752725021760, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 2.3340068725479681, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 3.7848108613132054, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 3.7848108613132099, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 7.6754638550304133, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 23.344217312927277, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 149.83491198246921, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 149.83491198246998, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 3936.9253501916060, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 2794143.5036480185, 20.000000000000000, 1.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 2794143.5036480846, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler225 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 425984.00000000000
+// max(|f - f_GSL|): 475136.00000000000 at index 18
 // max(|f - f_GSL| / |f_GSL|): 5.4067200000000052e-15
+// mean(f - f_GSL): 25007.185032091642
+// variance(f - f_GSL): 11881799540.814577
+// stddev(f - f_GSL): 109003.66755671379
 const testcase_hyperg<double>
 data226[19] =
 {
   { 2.6602838683283435e-06, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 7.8442223930072316e-06, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 2.4604898194634598e-05, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { 8.2718061255302686e-05, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.00030072865982171723, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.0011951964277455193, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.0052617832469731814, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
-  { 0.026084053304588847, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0011951964277455204, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0052617832469731996, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.026084053304588850, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.14864362802414346, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 8.2252633399699757, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 86.736173798840269, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
-  { 1253.2542894196865, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 27351.112277912434, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 86.736173798840738, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1253.2542894196868, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 27351.112277912678, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1048576.0000000000, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 90949470.177293226, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 28679719907.924358, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 28679719907.924767, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 95367431640624.906, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 9.9999999999998657e+19, 20.000000000000000, 2.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000220e+20, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler226 = 5.0000000000000039e-13;
 
 // Test data for a=20.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 40.000000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8712609271523571e-15
+// max(|f - f_GSL|): 40.000000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8712609271522778e-15
+// mean(f - f_GSL): 2.1052671749403089
+// variance(f - f_GSL): 84.210508462254538
+// stddev(f - f_GSL): 9.1766283820504881
 const testcase_hyperg<double>
 data227[19] =
 {
   { 0.018828092583720632, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.023381944060455365, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.029789623984280887, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.039191021482500567, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.053727813036721528, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { 0.077762010061669079, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.12110505620123306, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.077762010061668857, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.12110505620123323, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.20870149809080582, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.41429234328785763, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 3.1308087404153113, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 13.586180626453050, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 13.586180626453100, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 87.117304082784415, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 889.26474381242826, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 889.26474381243384, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 16231.913312693494, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 653537.51168945129, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 87756230.793848589, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 87756230.793849647, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 101493977171.74945, 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 21375960679556916., 20.000000000000000, 2.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 21375960679557820., 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler227 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 0.031250000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.6379336164122315e-15
+// max(|f - f_GSL|): 0.031250000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6379336164121759e-15
+// mean(f - f_GSL): 0.0016447556893365942
+// variance(f - f_GSL): 5.1397960874034849e-05
+// stddev(f - f_GSL): 0.0071692371193896806
 const testcase_hyperg<double>
 data228[19] =
 {
   { 0.049200410661854238, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.059460876757152607, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.073244762686653225, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.092334626017932769, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.11976760350696856, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.16102414609169408, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.22670456785796225, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.16102414609169405, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.22670456785796236, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.33912903252727361, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.55049794600858049, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 2.1254722872032232, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 5.6261213886736172, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 5.6261213886736314, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 20.137315891130996, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 108.04381584643853, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 108.04381584643900, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 992.41692466460245, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 19055.363816004465, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 1105471.9504312086, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1105471.9504312191, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 448521363.90608919, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 19078917293639.004, 20.000000000000000, 2.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 19078917293639.652, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler228 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 8.3923339843750000e-05
-// max(|f - f_GSL| / |f_GSL|): 1.8221514326727084e-15
+// max(|f - f_GSL|): 8.3923339843750000e-05 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8221514326726564e-15
+// mean(f - f_GSL): 4.4172143495227617e-06
+// variance(f - f_GSL): 3.7068906120670492e-10
+// stddev(f - f_GSL): 1.9253287023433297e-05
 const testcase_hyperg<double>
 data229[19] =
 {
   { 0.083753547015334884, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.099238444687035743, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.11938294012867748, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.14622683905023329, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.18303556733713028, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.23527764069382412, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.31261681740827085, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.23527764069382415, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.31261681740827069, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.43327581880538862, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.63445840637296680, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 1.7438842395813297, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 3.5070840938209269, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.5070840938209331, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 8.6573372006089713, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 28.779342118408906, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 28.779342118408998, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 147.50178613955714, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1427.1686016136398, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 36780.643714655642, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 36780.643714655955, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 5313869.6058585485, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 46057280607.381966, 20.000000000000000, 2.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 46057280607.383286, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler229 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=2.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 5.0663948059082031e-07
-// max(|f - f_GSL| / |f_GSL|): 1.9925479281070174e-15
+// max(|f - f_GSL|): 5.0663948059082031e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9925479281069681e-15
+// mean(f - f_GSL): 2.6669880993704522e-08
+// variance(f - f_GSL): 1.3509399735218820e-14
+// stddev(f - f_GSL): 1.1622994336752823e-07
 const testcase_hyperg<double>
 data230[19] =
 {
   { 0.11920045035073676, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.13907946814302777, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.16431439792559696, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.19698796016986989, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.24028510928790547, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.29926031296483113, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.38229327814229153, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.29926031296483130, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.38229327814229175, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.50402047283093132, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.69167261179586526, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 1.5503152253394308, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 2.6469548193635797, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 2.6469548193635828, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 5.1882631330566813, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 12.476792759124516, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 12.476792759124546, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 41.026391565091259, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 220.92584715988204, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 2677.0834450236207, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 2677.0834450236389, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 141774.31260689779, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 254267148.83196995, 20.000000000000000, 2.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 254267148.83197621, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler230 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 60129542144.000000
-// max(|f - f_GSL| / |f_GSL|): 2.0181355730233454e-15
+// max(|f - f_GSL|): 60129542144.000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.0181355730232468e-15
+// mean(f - f_GSL): 3164712852.2154636
+// variance(f - f_GSL): 1.9029272767041847e+20
+// stddev(f - f_GSL): 13794663014.021708
 const testcase_hyperg<double>
 data231[19] =
 {
   { -1.8650300348790099e-05, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { -3.6488008415371319e-05, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { -6.4614776410961038e-05, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { -8.4495207102246549e-05, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 2.2276197023825424e-05, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.00070736115111447856, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { 0.0027829732057273854, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.00070736115111457809, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0027829732057272588, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.0013283545664371644, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { -0.041767631015048774, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 61.311496556100003, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 2397.4420539085681, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2397.4420539085872, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 103687.60998586559, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 6247196.6451068865, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 6247196.6451069508, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 656408576.00000000, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 165334768098.54715, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 175097125520816.81, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 175097125520819.91, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 2.6818275451660257e+18, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 2.9794599999999321e+25, 20.000000000000000, 5.0000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.9794600000000777e+25, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler231 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 9437184.0000000000
-// max(|f - f_GSL| / |f_GSL|): 2.0515617391304744e-15
+// max(|f - f_GSL|): 9437184.0000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.0515617391303805e-15
+// mean(f - f_GSL): 496693.97369064158
+// variance(f - f_GSL): 4687391593519.1660
+// stddev(f - f_GSL): 2165038.4739119918
 const testcase_hyperg<double>
 data232[19] =
 {
   { -3.6403884516313627e-06, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { -9.5873829246491408e-06, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { -2.6052245147200097e-05, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { -7.2378303598384501e-05, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { -0.00020048577321417379, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { -0.00051222704046227391, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { -0.00080950511491898055, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { -0.00051222704046234439, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.00080950511491888959, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.0043473422174314250, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.081078342558623853, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 12.794854084397739, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 195.15639104739046, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 195.15639104739174, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 3938.7991953190131, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 118521.48653762060, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 118521.48653762160, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 6291455.9999999972, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 773070496.50699198, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 363276452167.04102, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 363276452167.04718, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 2002716064453133.0, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 4.5999999999999109e+21, 20.000000000000000, 5.0000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4.6000000000001222e+21, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler232 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 5120.0000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.7944916193878923e-15
+// max(|f - f_GSL|): 5120.0000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7944916193878173e-15
+// mean(f - f_GSL): 269.47388985302263
+// variance(f - f_GSL): 1379705.1461701661
+// stddev(f - f_GSL): 1174.6085076186730
 const testcase_hyperg<double>
 data233[19] =
 {
   { 0.00014313323624053599, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.00025426183473118769, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.00048255612836437054, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.00099096904674794185, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.0022347805521915616, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 0.0056271390060292845, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { 0.016109059519227316, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0056271390060294354, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.016109059519227351, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.053453465775609076, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.20995202901839263, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 5.9534372167648799, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 46.157632071205875, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 46.157632071206095, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 494.32074431164915, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 7989.5277611775946, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 7989.5277611776519, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 224179.55830753347, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 13848144.485282511, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 2948587692.8891716, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2948587692.8892150, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 5940513286161.6602, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 2.8531757655945201e+18, 20.000000000000000, 5.0000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.8531757655946394e+18, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler233 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 7.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.5351977183414298e-15
+// max(|f - f_GSL|): 7.0000000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5351977183413728e-15
+// mean(f - f_GSL): 0.36842306154970872
+// variance(f - f_GSL): 2.5789458059294108
+// stddev(f - f_GSL): 1.6059096506122039
 const testcase_hyperg<double>
 data234[19] =
 {
   { 0.0012492049968744917, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 0.0019931241968014200, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 0.0033203386861410844, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { 0.0058191894509856774, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { 0.010830090368313864, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 0.021653062305192875, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.047180821280919043, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.021653062305193541, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.047180821280919195, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.11405637279736212, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.31275468794721017, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 3.8598904658643969, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 18.806301417906667, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 18.806301417906734, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 122.77054465017432, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 1168.4762146808946, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1168.4762146809012, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 18437.511788521082, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 597441.79669264762, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 59390411.369227782, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 59390411.369228527, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 44681668993.361603, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 4559673269683164.0, 20.000000000000000, 5.0000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4559673269683333.0, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler234 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=5.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 0.029296875000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8717083246628922e-15
+// max(|f - f_GSL|): 0.029296875000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8717083246628342e-15
+// mean(f - f_GSL): 0.0015419659355661440
+// variance(f - f_GSL): 4.5173964710879197e-05
+// stddev(f - f_GSL): 0.0067211579888348996
 const testcase_hyperg<double>
 data235[19] =
 {
   { 0.0038867957051370739, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 0.0058484892597364235, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 0.0090987656053758189, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 0.014714392537270657, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.024900404542056772, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.044460184663785027, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.084638849196356780, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.044460184663785055, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.084638849196357113, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.17409058241291026, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.39357055823580767, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 2.9410794636226596, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 10.417226071414344, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 10.417226071414374, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 46.930585873140835, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 290.76717121814852, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 290.76717121814988, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 2788.1641083374830, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 50228.117718560752, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 2433042.3476752634, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 2433042.3476752895, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 705345246.77141762, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 15652478868616.762, 20.000000000000000, 5.0000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 15652478868617.246, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler235 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=10.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 2.5940733853654057e+18
-// max(|f - f_GSL| / |f_GSL|): 1.8312596334405405e-15
+// max(|f - f_GSL|): 2.5940733853654057e+18 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8312596334404269e-15
+// mean(f - f_GSL): 1.3653017829015250e+17
+// variance(f - f_GSL): 4.1617051640949032e+35
+// stddev(f - f_GSL): 6.4511279355589466e+17
 const testcase_hyperg<double>
 data236[19] =
 {
   { -2.1776535312781759e-07, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { -2.9128833151630439e-06, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { -9.4755553429932710e-06, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { -1.2844297353852837e-05, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { 3.6576965483549205e-05, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 0.00020847453890689954, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { -0.00022868510398160936, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.00020847453890703339, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.00022868510398194936, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { -0.0021855513841943421, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.014662111759334568, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 746.44776348798098, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 136080.48445225612, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 136080.48445225772, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 23094279.597826406, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 5315913395.5545301, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 5315913395.5545979, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 2261935718399.9990, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 2669150854828235.0, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 1.7499363099365994e+19, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.7499363099366351e+19, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 2.8881518494606140e+24, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 1.4165513933661626e+33, 20.000000000000000, 10.000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.4165513933662505e+33, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler236 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=10.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 299067162755072.00
-// max(|f - f_GSL| / |f_GSL|): 2.1129345912024644e-15
+// max(|f - f_GSL|): 299067162755072.00 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.1129345912023457e-15
+// mean(f - f_GSL): 15740377042297.895
+// variance(f - f_GSL): 4.7074334083472640e+27
+// stddev(f - f_GSL): 68610738287437.656
 const testcase_hyperg<double>
 data237[19] =
 {
   { 1.7149006966334498e-07, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { 3.2399324906563845e-07, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.6015317699713284e-07, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { -2.0500917201273337e-06, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { -1.0175546788592665e-05, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { -1.1720101988158874e-05, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 0.00014199637113975139, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { -1.1720101988188077e-05, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.00014199637113982382, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.00021263363640641769, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { -0.0072649256698439626, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 90.430293772869618, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 6248.1455940292308, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 6248.1455940292872, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 501143.39852548984, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 58852027.356439680, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 58852027.356440276, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 12942923093.333330, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 7618073993853.6592, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 22630251562549288., 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 22630251562549772., 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.3708372433980356e+21, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 1.4154113619999653e+29, 20.000000000000000, 10.000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.4154113620000448e+29, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler237 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=10.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 103079215104.00000
-// max(|f - f_GSL| / |f_GSL|): 1.8869870511942065e-15
+// max(|f - f_GSL|): 103079215104.00000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8869870511941024e-15
+// mean(f - f_GSL): 5425221928.4235201
+// variance(f - f_GSL): 5.5922760890380314e+20
+// stddev(f - f_GSL): 23647993760.651306
 const testcase_hyperg<double>
 data238[19] =
 {
   { -1.6667473284194196e-08, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { 8.6214843496406671e-08, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { 5.7778331275185146e-07, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { 2.1911400502042259e-06, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 4.7440049217199358e-06, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { -1.0564233315113883e-05, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { -0.00017990026051873263, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { -1.0564233314712615e-05, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.00017990026051847404, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { -0.00027618146288724629, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.030606019577723666, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 27.832854169493341, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 874.00624088575228, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 874.00624088575910, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 36049.199340831554, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 2270967.7298624986, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2270967.7298625209, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 266979100.44444439, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 80311224337.493027, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 110111693103799.72, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 110111693103801.77, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 2.4838871426052618e+18, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 5.4626349999998603e+25, 20.000000000000000, 10.000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.4626350000001618e+25, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler238 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=10.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 100663296.00000000
-// max(|f - f_GSL| / |f_GSL|): 1.9414329026037087e-15
+// max(|f - f_GSL|): 100663296.00000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9414329026036117e-15
+// mean(f - f_GSL): 5298068.6316046715
+// variance(f - f_GSL): 533321003794731.12
+// stddev(f - f_GSL): 23093743.823701065
 const testcase_hyperg<double>
 data239[19] =
 {
   { -1.5843795889906876e-07, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { -5.4877276002864784e-07, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { -1.7169507967699695e-06, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { -4.5236439749819329e-06, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { -5.5690492560381956e-06, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 5.6914115607022928e-05, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 0.00082507252097525810, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 5.6914115606653561e-05, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.00082507252097489250, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.0085739249288230429, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.088244357683754687, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 13.387208440156897, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 226.77895441155110, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 226.77895441155252, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 5281.5716482686785, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 189431.77762850464, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 189431.77762850633, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 12408149.333333332, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1966782292.5839682, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 1274123112205.7495, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1274123112205.7700, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 10903676350911508., 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 5.1849999999998819e+22, 20.000000000000000, 10.000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.1850000000001411e+22, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler239 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=10.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 425984.00000000000
+// max(|f - f_GSL|): 475136.00000000000 at index 18
 // max(|f - f_GSL| / |f_GSL|): 5.4067200000000052e-15
+// mean(f - f_GSL): 25007.185032091642
+// variance(f - f_GSL): 11881799540.814577
+// stddev(f - f_GSL): 109003.66755671379
 const testcase_hyperg<double>
 data240[19] =
 {
   { 2.6602838683283435e-06, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { 7.8442223930072316e-06, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 2.4604898194634598e-05, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 8.2718061255302686e-05, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 0.00030072865982171723, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { 0.0011951964277455193, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { 0.0052617832469731814, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
-  { 0.026084053304588847, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0011951964277455204, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0052617832469731996, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.026084053304588850, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.14864362802414346, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 8.2252633399699757, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 86.736173798840269, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
-  { 1253.2542894196865, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 27351.112277912434, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 86.736173798840738, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1253.2542894196868, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 27351.112277912678, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 1048576.0000000000, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 90949470.177293226, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 28679719907.924358, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 28679719907.924767, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 95367431640624.906, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 9.9999999999998657e+19, 20.000000000000000, 10.000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000220e+20, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler240 = 5.0000000000000039e-13;
 
 // Test data for a=20.000000000000000, b=20.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 8.1129638414606682e+31
-// max(|f - f_GSL| / |f_GSL|): 2.1657042453581189e-15
+// max(|f - f_GSL|): 8.1129638414606682e+31 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.1657042453579367e-15
+// mean(f - f_GSL): 4.2699809691927378e+30
+// variance(f - f_GSL): 3.3808552803188121e+96
+// stddev(f - f_GSL): 1.8387102219541860e+48
 const testcase_hyperg<double>
 data241[19] =
 {
   { 7.4612991227725660e-09, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.90000000000000002 },
+         2.0000000000000000, -0.90000000000000002, 0.0 },
   { 1.1006588952366092e-07, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.80000000000000004 },
+         2.0000000000000000, -0.80000000000000004, 0.0 },
   { 2.0126933732744113e-07, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.69999999999999996 },
+         2.0000000000000000, -0.69999999999999996, 0.0 },
   { -1.0013775379571396e-06, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.59999999999999998 },
+         2.0000000000000000, -0.59999999999999998, 0.0 },
   { -3.0371956856925611e-06, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.50000000000000000 },
-  { 2.2012669924734483e-05, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.40000000000000002 },
-  { -6.2415598025480351e-05, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.30000000000000004 },
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 2.2012669924829930e-05, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { -6.2415598025411788e-05, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
   { 0.00033551320394368590, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.19999999999999996 },
+         2.0000000000000000, -0.19999999999999996, 0.0 },
   { -0.0062342152641436752, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, -0.099999999999999978 },
+         2.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.0000000000000000 },
+         2.0000000000000000, 0.0000000000000000, 0.0 },
   { 34830.688900741610, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.10000000000000009 },
-  { 67626221.263030857, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.19999999999999996 },
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 67626221.263031960, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
   { 102764604848.69762, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.30000000000000004 },
-  { 220278355222373.38, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.39999999999999991 },
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 220278355222376.97, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
   { 1.0422324699794536e+18, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.50000000000000000 },
+         2.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.9128731788368004e+22, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.60000000000000009 },
-  { 3.5234592919485287e+27, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.69999999999999996 },
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3.5234592919486348e+27, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
   { 5.0867023209025249e+34, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.80000000000000004 },
-  { 3.7461088506658564e+46, 20.000000000000000, 20.000000000000000, 
-         2.0000000000000000, 0.89999999999999991 },
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 3.7461088506661713e+46, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler241 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=20.000000000000000, c=4.0000000000000000.
-// max(|f - f_GSL|): 4.3327901374988310e+27
-// max(|f - f_GSL| / |f_GSL|): 2.2075464057601018e-15
+// max(|f - f_GSL|): 4.3327901374988310e+27 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.2075464057599215e-15
+// mean(f - f_GSL): 2.2804158618486009e+26
+// variance(f - f_GSL): 1.7798116217456159e+67
+// stddev(f - f_GSL): 4.2187813663967183e+33
 const testcase_hyperg<double>
 data242[19] =
 {
   { -1.5895901122487120e-09, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.90000000000000002 },
+         4.0000000000000000, -0.90000000000000002, 0.0 },
   { -2.4403576191590296e-09, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.80000000000000004 },
+         4.0000000000000000, -0.80000000000000004, 0.0 },
   { 1.1622915284663225e-08, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.69999999999999996 },
+         4.0000000000000000, -0.69999999999999996, 0.0 },
   { 6.3899796223275262e-08, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.59999999999999998 },
+         4.0000000000000000, -0.59999999999999998, 0.0 },
   { -1.3503608350984134e-07, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.50000000000000000 },
-  { -1.2198533623363349e-06, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.40000000000000002 },
-  { 9.9086618119887468e-06, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.30000000000000004 },
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { -1.2198533624395468e-06, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 9.9086618121819025e-06, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
   { -7.6797020080190715e-05, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.19999999999999996 },
+         4.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.0013196405087170897, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, -0.099999999999999978 },
+         4.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.0000000000000000 },
+         4.0000000000000000, 0.0000000000000000, 0.0 },
   { 2274.2044768143564, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.10000000000000009 },
-  { 1611640.1560475440, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.19999999999999996 },
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1611640.1560475677, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
   { 1147063984.7359734, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.30000000000000004 },
-  { 1253162497163.8311, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.39999999999999991 },
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1253162497163.8503, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
   { 3071321673390476.0, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.50000000000000000 },
+         4.0000000000000000, 0.50000000000000000, 0.0 },
   { 2.8221123559124324e+19, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.60000000000000009 },
-  { 2.3658463807419519e+24, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.69999999999999996 },
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.3658463807420230e+24, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.2596553731345468e+31, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.80000000000000004 },
-  { 1.9627175792062075e+42, 20.000000000000000, 20.000000000000000, 
-         4.0000000000000000, 0.89999999999999991 },
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.9627175792063675e+42, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler242 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=20.000000000000000, c=6.0000000000000000.
-// max(|f - f_GSL|): 7.5557863725914323e+23
-// max(|f - f_GSL| / |f_GSL|): 1.9837376456390635e-15
+// max(|f - f_GSL|): 7.5557863725914323e+23 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9837376456389093e-15
+// mean(f - f_GSL): 3.9767296698428338e+22
+// variance(f - f_GSL): 4.6773832769218855e+49
+// stddev(f - f_GSL): 6.8391397682178457e+24
 const testcase_hyperg<double>
 data243[19] =
 {
   { 8.0159783892777232e-11, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.90000000000000002 },
+         6.0000000000000000, -0.90000000000000002, 0.0 },
   { -6.4422705184649393e-10, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.80000000000000004 },
+         6.0000000000000000, -0.80000000000000004, 0.0 },
   { -3.7526132950808576e-09, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.69999999999999996 },
+         6.0000000000000000, -0.69999999999999996, 0.0 },
   { -1.7692034036274638e-09, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.59999999999999998 },
+         6.0000000000000000, -0.59999999999999998, 0.0 },
   { 7.9304558764774354e-08, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.50000000000000000 },
-  { 5.9348070191507617e-08, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.40000000000000002 },
-  { -3.5827694518409289e-06, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.30000000000000004 },
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 5.9348070417710214e-08, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { -3.5827694518623355e-06, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
   { 4.4951490418031519e-05, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.19999999999999996 },
+         6.0000000000000000, -0.19999999999999996, 0.0 },
   { -0.0013716249406309328, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, -0.099999999999999978 },
+         6.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.0000000000000000 },
+         6.0000000000000000, 0.0000000000000000, 0.0 },
   { 415.32493304415505, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.10000000000000009 },
-  { 121300.42991518594, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.19999999999999996 },
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 121300.42991518755, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
   { 42725673.833462097, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.30000000000000004 },
-  { 24588915328.261719, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.39999999999999991 },
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 24588915328.262096, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
   { 31929082412503.652, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.50000000000000000 },
+         6.0000000000000000, 0.50000000000000000, 0.0 },
   { 1.4934954443280477e+17, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.60000000000000009 },
-  { 5.7726220597696125e+21, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.69999999999999996 },
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 5.7726220597697614e+21, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
   { 1.1454387824049374e+28, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.80000000000000004 },
-  { 3.8088637321581534e+38, 20.000000000000000, 20.000000000000000, 
-         6.0000000000000000, 0.89999999999999991 },
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 3.8088637321584496e+38, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler243 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=20.000000000000000, c=8.0000000000000000.
-// max(|f - f_GSL|): 3.3204139332677193e+20
-// max(|f - f_GSL| / |f_GSL|): 1.9148846081415644e-15
+// max(|f - f_GSL|): 3.3204139332677193e+20 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9148846081414276e-15
+// mean(f - f_GSL): 1.7475862807802462e+19
+// variance(f - f_GSL): 6.4226791492038630e+39
+// stddev(f - f_GSL): 8.0141619332303634e+19
 const testcase_hyperg<double>
 data244[19] =
 {
   { 1.0699067880816065e-10, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.90000000000000002 },
+         8.0000000000000000, -0.90000000000000002, 0.0 },
   { 5.4297771645951943e-10, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.80000000000000004 },
+         8.0000000000000000, -0.80000000000000004, 0.0 },
   { 9.7625476382187751e-10, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.69999999999999996 },
+         8.0000000000000000, -0.69999999999999996, 0.0 },
   { -6.7257763949908548e-09, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.59999999999999998 },
+         8.0000000000000000, -0.59999999999999998, 0.0 },
   { -5.4634571496409877e-08, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.50000000000000000 },
-  { 1.4595644213797847e-07, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.40000000000000002 },
-  { 3.3515966494792549e-06, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.30000000000000004 },
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.4595644217972025e-07, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 3.3515966496921257e-06, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
   { -6.5848086985738461e-05, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.19999999999999996 },
+         8.0000000000000000, -0.19999999999999996, 0.0 },
   { 0.0034800171306214847, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, -0.099999999999999978 },
+         8.0000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.0000000000000000 },
+         8.0000000000000000, 0.0000000000000000, 0.0 },
   { 130.93865856750304, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.10000000000000009 },
-  { 17850.203502975532, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.19999999999999996 },
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 17850.203502975721, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
   { 3307058.5655149994, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.30000000000000004 },
-  { 1041065396.2302787, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.39999999999999991 },
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1041065396.2302928, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
   { 735221357488.41736, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.50000000000000000 },
+         8.0000000000000000, 0.50000000000000000, 0.0 },
   { 1785176805049585.2, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.60000000000000009 },
-  { 3.2302829930269192e+19, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.69999999999999996 },
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3.2302829930269979e+19, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
   { 2.4184909805178299e+25, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.80000000000000004 },
-  { 1.7340021007794567e+35, 20.000000000000000, 20.000000000000000, 
-         8.0000000000000000, 0.89999999999999991 },
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.7340021007795807e+35, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler244 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=20.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 3.4227357168015770e+17
-// max(|f - f_GSL| / |f_GSL|): 2.2509396750115090e-15
+// max(|f - f_GSL|): 3.4227357168015770e+17 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.2509396750113666e-15
+// mean(f - f_GSL): 18014398513897048.
+// variance(f - f_GSL): 6.1659968607222131e+33
+// stddev(f - f_GSL): 78523861728281120.
 const testcase_hyperg<double>
 data245[19] =
 {
   { -1.7945360901577764e-10, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.90000000000000002 },
+         10.000000000000000, -0.90000000000000002, 0.0 },
   { -4.4440665776938741e-10, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.80000000000000004 },
+         10.000000000000000, -0.80000000000000004, 0.0 },
   { 6.6171615263373664e-10, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.69999999999999996 },
+         10.000000000000000, -0.69999999999999996, 0.0 },
   { 1.5453889374050929e-08, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.59999999999999998 },
+         10.000000000000000, -0.59999999999999998, 0.0 },
   { 7.5754083909301490e-08, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.50000000000000000 },
-  { -4.1113628642452120e-07, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.40000000000000002 },
-  { -9.5300704264471230e-06, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.30000000000000004 },
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { -4.1113628650335901e-07, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { -9.5300704263777713e-06, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
   { 0.00016081533175773833, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.19999999999999996 },
+         10.000000000000000, -0.19999999999999996, 0.0 },
   { 0.017684650940379586, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, -0.099999999999999978 },
+         10.000000000000000, -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.0000000000000000 },
+         10.000000000000000, 0.0000000000000000, 0.0 },
   { 57.562247312454403, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.10000000000000009 },
-  { 4124.4159820362511, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.19999999999999996 },
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 4124.4159820362947, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
   { 428774.21436196787, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.30000000000000004 },
-  { 76996819.900892526, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.39999999999999991 },
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 76996819.900893494, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
   { 30473174828.943691, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.50000000000000000 },
+         10.000000000000000, 0.50000000000000000, 0.0 },
   { 39291970835753.094, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.60000000000000009 },
-  { 3.3890331048069018e+17, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.69999999999999996 },
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 3.3890331048069786e+17, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
   { 9.7157373454594049e+22, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.80000000000000004 },
-  { 1.5205808288860858e+32, 20.000000000000000, 20.000000000000000, 
-         10.000000000000000, 0.89999999999999991 },
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5205808288861820e+32, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
 };
 const double toler245 = 2.5000000000000020e-13;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_hyperg<Tp> (&data)[Num], Tp toler)
+  test(const testcase_hyperg<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = __gnu_cxx::hyperg(data[i].a, data[i].b,
+       const Ret f = __gnu_cxx::hyperg(data[i].a, data[i].b,
                     data[i].c, data[i].x);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index 96618f2..fd01765 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for n=0, m=0.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data001[11] =
 {
   { 1.0000000000000000, 0, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
 // Test data for n=0, m=1.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data002[11] =
 {
   { 1.0000000000000000, 0, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0, 1, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 1, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 1, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 1, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 1, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 1, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 1, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 1, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 1, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 1, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
 // Test data for n=0, m=2.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data003[11] =
 {
   { 1.0000000000000000, 0, 2, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0, 2, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 2, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 2, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 2, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 2, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 2, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 2, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 2, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 2, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 2, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler003 = 2.5000000000000020e-13;
 
 // Test data for n=0, m=5.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data004[11] =
 {
   { 1.0000000000000000, 0, 5, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0, 5, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 5, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 5, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 5, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 5, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 5, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 5, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 5, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 5, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 5, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler004 = 2.5000000000000020e-13;
 
 // Test data for n=0, m=10.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data005[11] =
 {
   { 1.0000000000000000, 0, 10, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0, 10, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 10, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 10, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 10, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 10, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 10, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 10, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 10, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 10, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 10, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler005 = 2.5000000000000020e-13;
 
 // Test data for n=0, m=20.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data006[11] =
 {
   { 1.0000000000000000, 0, 20, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0, 20, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 20, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 20, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 20, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 20, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 20, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 20, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 20, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 20, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 20, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler006 = 2.5000000000000020e-13;
 
 // Test data for n=0, m=50.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data007[11] =
 {
   { 1.0000000000000000, 0, 50, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0, 50, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 50, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 50, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 50, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 50, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 50, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 50, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 50, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 50, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 50, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler007 = 2.5000000000000020e-13;
 
 // Test data for n=0, m=100.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data008[11] =
 {
   { 1.0000000000000000, 0, 100, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0, 100, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 100, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 100, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 100, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 100, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 100, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 100, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 100, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 100, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 1.0000000000000000, 0, 100, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler008 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=0.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data009[11] =
 {
   { 1.0000000000000000, 1, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -9.0000000000000000, 1, 0, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -19.000000000000000, 1, 0, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -29.000000000000000, 1, 0, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -39.000000000000000, 1, 0, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -49.000000000000000, 1, 0, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -59.000000000000000, 1, 0, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -69.000000000000000, 1, 0, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -79.000000000000000, 1, 0, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -89.000000000000000, 1, 0, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -99.000000000000000, 1, 0, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler009 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=1.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data010[11] =
 {
   { 2.0000000000000000, 1, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -8.0000000000000000, 1, 1, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -18.000000000000000, 1, 1, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -28.000000000000000, 1, 1, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -38.000000000000000, 1, 1, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -48.000000000000000, 1, 1, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -58.000000000000000, 1, 1, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -68.000000000000000, 1, 1, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -78.000000000000000, 1, 1, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -88.000000000000000, 1, 1, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -98.000000000000000, 1, 1, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler010 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=2.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data011[11] =
 {
   { 3.0000000000000000, 1, 2, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -7.0000000000000000, 1, 2, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -17.000000000000000, 1, 2, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -27.000000000000000, 1, 2, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -37.000000000000000, 1, 2, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -47.000000000000000, 1, 2, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -57.000000000000000, 1, 2, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -67.000000000000000, 1, 2, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -77.000000000000000, 1, 2, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -87.000000000000000, 1, 2, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -97.000000000000000, 1, 2, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler011 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=5.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data012[11] =
 {
   { 6.0000000000000000, 1, 5, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -4.0000000000000000, 1, 5, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -14.000000000000000, 1, 5, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -24.000000000000000, 1, 5, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -34.000000000000000, 1, 5, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -44.000000000000000, 1, 5, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -54.000000000000000, 1, 5, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -64.000000000000000, 1, 5, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -74.000000000000000, 1, 5, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -84.000000000000000, 1, 5, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -94.000000000000000, 1, 5, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler012 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=10.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data013[11] =
 {
   { 11.000000000000000, 1, 10, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 1, 10, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -9.0000000000000000, 1, 10, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -19.000000000000000, 1, 10, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -29.000000000000000, 1, 10, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -39.000000000000000, 1, 10, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -49.000000000000000, 1, 10, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -59.000000000000000, 1, 10, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -69.000000000000000, 1, 10, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -79.000000000000000, 1, 10, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -89.000000000000000, 1, 10, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler013 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=20.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data014[11] =
 {
   { 21.000000000000000, 1, 20, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 11.000000000000000, 1, 20, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 1.0000000000000000, 1, 20, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -9.0000000000000000, 1, 20, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -19.000000000000000, 1, 20, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -29.000000000000000, 1, 20, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -39.000000000000000, 1, 20, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -49.000000000000000, 1, 20, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -59.000000000000000, 1, 20, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -69.000000000000000, 1, 20, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -79.000000000000000, 1, 20, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler014 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=50.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data015[11] =
 {
   { 51.000000000000000, 1, 50, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 41.000000000000000, 1, 50, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 31.000000000000000, 1, 50, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 21.000000000000000, 1, 50, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 11.000000000000000, 1, 50, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1.0000000000000000, 1, 50, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -9.0000000000000000, 1, 50, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -19.000000000000000, 1, 50, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -29.000000000000000, 1, 50, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -39.000000000000000, 1, 50, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -49.000000000000000, 1, 50, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler015 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=100.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data016[11] =
 {
   { 101.00000000000000, 1, 100, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 91.000000000000000, 1, 100, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 81.000000000000000, 1, 100, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 71.000000000000000, 1, 100, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 61.000000000000000, 1, 100, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 51.000000000000000, 1, 100, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 41.000000000000000, 1, 100, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 31.000000000000000, 1, 100, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 21.000000000000000, 1, 100, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 11.000000000000000, 1, 100, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 1.0000000000000000, 1, 100, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler016 = 2.5000000000000020e-13;
 
 // Test data for n=2, m=0.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data017[11] =
 {
   { 1.0000000000000000, 2, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 31.000000000000000, 2, 0, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 161.00000000000000, 2, 0, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 391.00000000000000, 2, 0, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 721.00000000000000, 2, 0, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1151.0000000000000, 2, 0, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1681.0000000000000, 2, 0, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 2311.0000000000000, 2, 0, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 3041.0000000000000, 2, 0, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 3871.0000000000000, 2, 0, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 4801.0000000000000, 2, 0, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler017 = 2.5000000000000020e-13;
 
 // Test data for n=2, m=1.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data018[11] =
 {
   { 3.0000000000000000, 2, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 23.000000000000000, 2, 1, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 143.00000000000000, 2, 1, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 363.00000000000000, 2, 1, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 683.00000000000000, 2, 1, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1103.0000000000000, 2, 1, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1623.0000000000000, 2, 1, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 2243.0000000000000, 2, 1, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 2963.0000000000000, 2, 1, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 3783.0000000000000, 2, 1, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 4703.0000000000000, 2, 1, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler018 = 2.5000000000000020e-13;
 
 // Test data for n=2, m=2.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data019[11] =
 {
   { 6.0000000000000000, 2, 2, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 16.000000000000000, 2, 2, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 126.00000000000000, 2, 2, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 336.00000000000000, 2, 2, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 646.00000000000000, 2, 2, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1056.0000000000000, 2, 2, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1566.0000000000000, 2, 2, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 2176.0000000000000, 2, 2, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 2886.0000000000000, 2, 2, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 3696.0000000000000, 2, 2, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 4606.0000000000000, 2, 2, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler019 = 2.5000000000000020e-13;
 
 // Test data for n=2, m=5.
-// max(|f - f_GSL|): 4.5519144009631418e-15
+// max(|f - f_GSL|): 4.5519144009631418e-15 at index 1
 // max(|f - f_GSL| / |f_GSL|): 4.5519144009631623e-15
+// mean(f - f_GSL): 4.1381040008755832e-16
+// variance(f - f_GSL): 1.8836295194268761e-32
+// stddev(f - f_GSL): 1.3724538314372823e-16
 const testcase_assoc_laguerre<double>
 data020[11] =
 {
   { 21.000000000000000, 2, 5, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 0.99999999999999545, 2, 5, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 81.000000000000000, 2, 5, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 261.00000000000000, 2, 5, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 541.00000000000000, 2, 5, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 921.00000000000000, 2, 5, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1401.0000000000000, 2, 5, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 1981.0000000000000, 2, 5, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 2661.0000000000000, 2, 5, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 3441.0000000000000, 2, 5, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 4321.0000000000000, 2, 5, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler020 = 2.5000000000000020e-13;
 
 // Test data for n=2, m=10.
-// max(|f - f_GSL|): 3.5527136788005009e-14
+// max(|f - f_GSL|): 3.5527136788005009e-14 at index 2
 // max(|f - f_GSL| / |f_GSL|): 2.4424906541753385e-15
+// mean(f - f_GSL): 4.1179181277005809e-15
+// variance(f - f_GSL): 1.8652974677089562e-30
+// stddev(f - f_GSL): 1.3657589346985639e-15
 const testcase_assoc_laguerre<double>
 data021[11] =
 {
   { 66.000000000000000, 2, 10, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -4.0000000000000098, 2, 10, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 25.999999999999964, 2, 10, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 156.00000000000000, 2, 10, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 386.00000000000000, 2, 10, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 716.00000000000000, 2, 10, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1146.0000000000000, 2, 10, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 1676.0000000000000, 2, 10, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 2306.0000000000000, 2, 10, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 3036.0000000000000, 2, 10, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 3866.0000000000000, 2, 10, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler021 = 2.5000000000000020e-13;
 
 // Test data for n=2, m=20.
-// max(|f - f_GSL|): 5.6843418860808015e-13
+// max(|f - f_GSL|): 5.6843418860808015e-13 at index 4
 // max(|f - f_GSL| / |f_GSL|): 5.9211894646674663e-15
+// mean(f - f_GSL): -6.0557619525008543e-14
+// variance(f - f_GSL): 4.0339478107892650e-28
+// stddev(f - f_GSL): 2.0084690216155350e-14
 const testcase_assoc_laguerre<double>
 data022[11] =
 {
   { 231.00000000000000, 2, 20, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 61.000000000000206, 2, 20, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -9.0000000000000053, 2, 20, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 21.000000000000124, 2, 20, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 151.00000000000057, 2, 20, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 381.00000000000000, 2, 20, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 711.00000000000000, 2, 20, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 1141.0000000000000, 2, 20, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 1670.9999999999998, 2, 20, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 2301.0000000000000, 2, 20, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 3031.0000000000000, 2, 20, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler022 = 5.0000000000000039e-13;
 
 // Test data for n=2, m=50.
-// max(|f - f_GSL|): 3.6379788070917130e-12
+// max(|f - f_GSL|): 3.6379788070917130e-12 at index 10
 // max(|f - f_GSL| / |f_GSL|): 1.9243865760169750e-14
+// mean(f - f_GSL): 1.1085274112784562e-12
+// variance(f - f_GSL): 7.0379368001597960e-25
+// stddev(f - f_GSL): 8.3892412053533160e-13
 const testcase_assoc_laguerre<double>
 data023[11] =
 {
   { 1326.0000000000000, 2, 50, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 855.99999999999693, 2, 50, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 485.99999999999835, 2, 50, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 215.99999999999937, 2, 50, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 45.999999999999829, 2, 50, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -23.999999999999538, 2, 50, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 6.0000000000001057, 2, 50, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 135.99999999999963, 2, 50, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 365.99999999999892, 2, 50, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 695.99999999999784, 2, 50, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 1125.9999999999964, 2, 50, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler023 = 1.0000000000000008e-12;
 
 // Test data for n=2, m=100.
-// max(|f - f_GSL|): 6.5483618527650833e-11
+// max(|f - f_GSL|): 6.5483618527650833e-11 at index 1
 // max(|f - f_GSL| / |f_GSL|): 1.6416871873157281e-14
+// mean(f - f_GSL): -2.0930328177696950e-11
+// variance(f - f_GSL): 4.7796831888707054e-23
+// stddev(f - f_GSL): 6.9135252866180405e-12
 const testcase_assoc_laguerre<double>
 data024[11] =
 {
   { 5151.0000000000000, 2, 100, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 4181.0000000000655, 2, 100, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 3311.0000000000518, 2, 100, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 2541.0000000000400, 2, 100, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 1871.0000000000291, 2, 100, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1301.0000000000207, 2, 100, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 831.00000000001364, 2, 100, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 461.00000000000682, 2, 100, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 191.00000000000250, 2, 100, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 21.000000000000046, 2, 100, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -48.999999999999915, 2, 100, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler024 = 1.0000000000000008e-12;
 
 // Test data for n=5, m=0.
-// max(|f - f_GSL|): 7.4505805969238281e-09
+// max(|f - f_GSL|): 7.4505805969238281e-09 at index 10
 // max(|f - f_GSL| / |f_GSL|): 1.9501553136894460e-16
+// mean(f - f_GSL): -5.1328573714603078e-10
+// variance(f - f_GSL): 5.2938665968649395e-18
+// stddev(f - f_GSL): 2.3008404109944130e-09
 const testcase_assoc_laguerre<double>
 data025[11] =
 {
   { 1.0000000000000000, 5, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 34.333333333333329, 5, 0, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -4765.6666666666670, 5, 0, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -74399.000000000000, 5, 0, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -418865.66666666663, 5, 0, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -1498165.6666666665, 5, 0, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -4122299.0000000000, 5, 0, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -9551265.6666666679, 5, 0, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -19595065.666666664, 5, 0, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -36713699.000000000, 5, 0, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -64117165.666666664, 5, 0, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler025 = 2.5000000000000020e-13;
 
 // Test data for n=5, m=1.
-// max(|f - f_GSL|): 3.7252902984619141e-09
+// max(|f - f_GSL|): 3.7252902984619141e-09 at index 8
 // max(|f - f_GSL| / |f_GSL|): 3.1347473636475015e-16
+// mean(f - f_GSL): -3.6516147681388907e-10
+// variance(f - f_GSL): 1.4667719456379050e-20
+// stddev(f - f_GSL): 1.2111036064837331e-10
 const testcase_assoc_laguerre<double>
 data026[11] =
 {
   { 6.0000000000000000, 5, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 22.666666666666661, 5, 1, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -2960.6666666666661, 5, 1, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -58944.000000000000, 5, 1, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -357927.33333333326, 5, 1, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -1329910.6666666665, 5, 1, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -3744894.0000000000, 5, 1, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -8812877.3333333321, 5, 1, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -18283860.666666664, 5, 1, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -34547844.000000000, 5, 1, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -60734827.333333336, 5, 1, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler026 = 2.5000000000000020e-13;
 
 // Test data for n=5, m=2.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_laguerre<double>
 data027[11] =
 {
   { 21.000000000000000, 5, 2, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 4.3333333333333339, 5, 2, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -1679.0000000000000, 5, 2, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -46029.000000000000, 5, 2, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -304045.66666666669, 5, 2, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -1176729.0000000002, 5, 2, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -3395079.0000000000, 5, 2, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -8120095.6666666660, 5, 2, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -17042778.999999996, 5, 2, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -32484129.000000000, 5, 2, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -57495145.666666664, 5, 2, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler027 = 2.5000000000000020e-13;
 
 // Test data for n=5, m=5.
-// max(|f - f_GSL|): 7.4505805969238281e-09
+// max(|f - f_GSL|): 7.4505805969238281e-09 at index 9
 // max(|f - f_GSL| / |f_GSL|): 1.7763568394002536e-15
+// mean(f - f_GSL): -1.0450849882462617e-09
+// variance(f - f_GSL): 1.2014228959234583e-19
+// stddev(f - f_GSL): 3.4661547800458338e-10
 const testcase_assoc_laguerre<double>
 data028[11] =
 {
   { 252.00000000000000, 5, 5, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -14.666666666666654, 5, 5, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 51.999999999999908, 5, 5, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -19548.000000000000, 5, 5, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -178814.66666666660, 5, 5, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -797747.99999999977, 5, 5, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -2496348.0000000000, 5, 5, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -6294614.6666666660, 5, 5, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -13712547.999999996, 5, 5, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -26870147.999999993, 5, 5, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -48587414.666666672, 5, 5, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler028 = 2.5000000000000020e-13;
 
 // Test data for n=5, m=10.
-// max(|f - f_GSL|): 7.4505805969238281e-09
+// max(|f - f_GSL|): 7.4505805969238281e-09 at index 10
 // max(|f - f_GSL| / |f_GSL|): 1.9556222085140405e-15
+// mean(f - f_GSL): -9.4849348577306296e-10
+// variance(f - f_GSL): 4.6504850481092197e-18
+// stddev(f - f_GSL): 2.1564983301892953e-09
 const testcase_assoc_laguerre<double>
 data029[11] =
 {
   { 3003.0000000000000, 5, 10, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 19.666666666666668, 5, 10, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 36.333333333333272, 5, 10, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -1947.0000000000000, 5, 10, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -60930.333333333314, 5, 10, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -381913.66666666651, 5, 10, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -1419897.0000000000, 5, 10, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -3979880.3333333330, 5, 10, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -9316863.6666666642, 5, 10, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -19235847.000000000, 5, 10, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -36191830.333333328, 5, 10, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler029 = 2.5000000000000020e-13;
 
 // Test data for n=5, m=20.
-// max(|f - f_GSL|): 1.8626451492309570e-09
+// max(|f - f_GSL|): 1.8626451492309570e-09 at index 8
 // max(|f - f_GSL| / |f_GSL|): 2.8421709430404088e-15
+// mean(f - f_GSL): 1.8654330605469030e-10
+// variance(f - f_GSL): 3.8278245537195241e-21
+// stddev(f - f_GSL): 6.1869415333584047e-11
 const testcase_assoc_laguerre<double>
 data030[11] =
 {
   { 53130.000000000000, 5, 20, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1213.3333333333335, 5, 20, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 129.99999999999963, 5, 20, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -119.99999999999974, 5, 20, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 463.33333333333320, 5, 20, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -48120.000000000015, 5, 20, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -345870.00000000017, 5, 20, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -1342786.6666666667, 5, 20, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -3838870.0000000009, 5, 20, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -9084120.0000000000, 5, 20, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -18878536.666666668, 5, 20, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler030 = 2.5000000000000020e-13;
 
 // Test data for n=5, m=50.
-// max(|f - f_GSL|): 5.8207660913467407e-11
+// max(|f - f_GSL|): 5.8207660913467407e-11 at index 9
 // max(|f - f_GSL| / |f_GSL|): 8.3212917817998576e-15
+// mean(f - f_GSL): 2.5837917664003642e-12
+// variance(f - f_GSL): 7.3435778813301465e-25
+// stddev(f - f_GSL): 8.5694678255596164e-13
 const testcase_assoc_laguerre<double>
 data031[11] =
 {
   { 3478761.0000000000, 5, 50, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1154544.3333333335, 5, 50, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 264661.00000000006, 5, 50, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 24111.000000000033, 5, 50, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -2105.6666666666665, 5, 50, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1010.9999999999916, 5, 50, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -1538.9999999999955, 5, 50, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 5244.3333333333449, 5, 50, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -13639.000000000011, 5, 50, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -243189.00000000006, 5, 50, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -1118405.6666666667, 5, 50, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler031 = 5.0000000000000039e-13;
 
 // Test data for n=5, m=100.
-// max(|f - f_GSL|): 1.4901161193847656e-08
+// max(|f - f_GSL|): 1.4901161193847656e-08 at index 1
 // max(|f - f_GSL| / |f_GSL|): 4.3934583843896481e-16
+// mean(f - f_GSL): 9.3181866263462735e-10
+// variance(f - f_GSL): 9.5511462203760402e-20
+// stddev(f - f_GSL): 3.0904928766098203e-10
 const testcase_assoc_laguerre<double>
 data032[11] =
 {
   { 96560646.000000000, 5, 100, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 57264262.666666649, 5, 100, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 31841379.333333332, 5, 100, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 16281996.000000000, 5, 100, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 7426112.6666666670, 5, 100, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 2863729.3333333330, 5, 100, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 834846.00000000000, 5, 100, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 129462.66666666663, 5, 100, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -12420.666666666668, 5, 100, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -804.00000000000000, 5, 100, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 4312.6666666666670, 5, 100, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler032 = 2.5000000000000020e-13;
 
 // Test data for n=10, m=0.
-// max(|f - f_GSL|): 6.1035156250000000e-05
+// max(|f - f_GSL|): 6.1035156250000000e-05 at index 7
 // max(|f - f_GSL| / |f_GSL|): 6.1315986390500118e-15
+// mean(f - f_GSL): -5.5892985322068194e-06
+// variance(f - f_GSL): 3.4364283890538241e-12
+// stddev(f - f_GSL): 1.8537606072667053e-06
 const testcase_assoc_laguerre<double>
 data033[11] =
 {
   { 1.0000000000000000, 10, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 27.984126984126977, 10, 0, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 3227.8077601410932, 10, 0, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 15129.571428571455, 10, 0, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 79724066.608465582, 10, 0, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 2037190065.3738980, 10, 0, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 21804200401.000000, 10, 0, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 144688291819.51855, 10, 0, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 703324772760.08276, 10, 0, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 2741055412243.8569, 10, 0, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 9051283795429.5723, 10, 0, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler033 = 5.0000000000000039e-13;
 
 // Test data for n=10, m=1.
-// max(|f - f_GSL|): 0.0019531250000000000
+// max(|f - f_GSL|): 0.0019531250000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 3.2082933888884751e-16
+// mean(f - f_GSL): -0.00017647174536266681
+// variance(f - f_GSL): 3.4721464659347714e-07
+// stddev(f - f_GSL): 0.00058924922281957846
 const testcase_assoc_laguerre<double>
 data034[11] =
 {
   { 11.000000000000000, 10, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 14.791887125220455, 10, 1, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 2704.6507936507933, 10, 1, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -182924.71428571423, 10, 1, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 48066036.749559075, 10, 1, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1486264192.2169311, 10, 1, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 17239562282.428574, 10, 1, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 119837491630.13579, 10, 1, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 600681375251.21167, 10, 1, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 2392908405632.4287, 10, 1, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 8033035722509.2373, 10, 1, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler034 = 2.5000000000000020e-13;
 
 // Test data for n=10, m=2.
-// max(|f - f_GSL|): 0.00012207031250000000
+// max(|f - f_GSL|): 0.00012207031250000000 at index 8
 // max(|f - f_GSL| / |f_GSL|): 3.0884259455918855e-16
+// mean(f - f_GSL): 1.4045021730039894e-05
+// variance(f - f_GSL): 2.1698889894483716e-11
+// stddev(f - f_GSL): 4.6582067251769446e-06
 const testcase_assoc_laguerre<double>
 data035[11] =
 {
   { 66.000000000000000, 10, 2, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -14.511463844797181, 10, 2, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 1064.5890652557316, 10, 2, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -194569.71428571429, 10, 2, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 27343569.350970022, 10, 2, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1067807661.6790125, 10, 2, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 13529451580.285711, 10, 2, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 98812724224.641937, 10, 2, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 511482736187.34021, 10, 2, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 2084478393087.4285, 10, 2, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 7117724862237.0752, 10, 2, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler035 = 2.5000000000000020e-13;
 
 // Test data for n=10, m=5.
-// max(|f - f_GSL|): 0.0019531250000000000
+// max(|f - f_GSL|): 0.0019531250000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 5.4929549774030811e-15
+// mean(f - f_GSL): 0.00020540323628249655
+// variance(f - f_GSL): 3.3599844999940669e-07
+// stddev(f - f_GSL): 0.00057965373284350253
 const testcase_assoc_laguerre<double>
 data036[11] =
 {
   { 3003.0000000000000, 10, 5, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 11.641975308642031, 10, 5, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -1137.5643738977069, 10, 5, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -9254.1428571428605, 10, 5, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 2121878.8377425023, 10, 5, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 352060171.43033499, 10, 5, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 6212028560.1428576, 10, 5, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 53782171674.604919, 10, 5, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 309720255837.56775, 10, 5, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 1359043035731.5713, 10, 5, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 4900625954398.9434, 10, 5, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler036 = 5.0000000000000039e-13;
 
 // Test data for n=10, m=10.
-// max(|f - f_GSL|): 0.00048828125000000000
+// max(|f - f_GSL|): 0.00048828125000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 1.2999856205575476e-15
+// mean(f - f_GSL): 3.5049890987631279e-05
+// variance(f - f_GSL): 2.2596053129284716e-08
+// stddev(f - f_GSL): 0.00015031983611381671
 const testcase_assoc_laguerre<double>
 data037[11] =
 {
   { 184756.00000000000, 10, 10, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -210.84303350970018, 10, 10, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 508.38095238095184, 10, 10, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 2098.8571428571431, 10, 10, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -536338.88536155177, 10, 10, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 24865988.804232784, 10, 10, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1343756013.1428571, 10, 10, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 17298791247.358025, 10, 10, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 124528450897.79892, 10, 10, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 632674413641.71423, 10, 10, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 2533008935405.0298, 10, 10, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler037 = 2.5000000000000020e-13;
 
 // Test data for n=10, m=20.
-// max(|f - f_GSL|): 1.1444091796875000e-05
+// max(|f - f_GSL|): 1.1444091796875000e-05 at index 8
 // max(|f - f_GSL| / |f_GSL|): 1.3165826881543491e-14
+// mean(f - f_GSL): -1.0290407937480433e-06
+// variance(f - f_GSL): 1.1648174507175886e-13
+// stddev(f - f_GSL): 3.4129422068320885e-07
 const testcase_assoc_laguerre<double>
 data038[11] =
 {
   { 30045014.999999993, 10, 20, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -23087.733686067022, 10, 20, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 207.23985890652330, 10, 20, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 1407.8571428571508, 10, 20, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -44618.156966490322, 10, 20, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 158690.04409171100, 10, 20, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -6870413.5714285728, 10, 20, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 793841351.41975331, 10, 20, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 13358288958.562618, 10, 20, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 106073722407.85715, 10, 20, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 566337213392.42493, 10, 20, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler038 = 1.0000000000000008e-12;
 
 // Test data for n=10, m=50.
-// max(|f - f_GSL|): 1.7881393432617188e-07
+// max(|f - f_GSL|): 1.7881393432617188e-07 at index 2
 // max(|f - f_GSL| / |f_GSL|): 1.9220038158581863e-14
+// mean(f - f_GSL): -1.7959874557246538e-08
+// variance(f - f_GSL): 1.5426792767859101e-17
+// stddev(f - f_GSL): 3.9276956052956932e-09
 const testcase_assoc_laguerre<double>
 data039[11] =
 {
   { 75394027566.000000, 10, 50, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 8048106183.3721361, 10, 50, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 328045023.84832460, 10, 50, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -2568769.7142857178, 10, 50, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 6971.9964726631533, 10, 50, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 136111.41446207993, 10, 50, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -62462.571428570242, 10, 50, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -248167.95061728527, 10, 50, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 1941270.4091710770, 10, 50, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -8643512.5714285765, 10, 50, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -140863522.18342152, 10, 50, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler039 = 1.0000000000000008e-12;
 
 // Test data for n=10, m=100.
-// max(|f - f_GSL|): 0.0019531250000000000
+// max(|f - f_GSL|): 0.0019531250000000000 at index 1
 // max(|f - f_GSL| / |f_GSL|): 8.5796208358610616e-15
+// mean(f - f_GSL): 0.00016085392880168828
+// variance(f - f_GSL): 2.8461549974308565e-09
+// stddev(f - f_GSL): 5.3349367357362886e-05
 const testcase_assoc_laguerre<double>
 data040[11] =
 {
   { 46897636623981.000, 10, 100, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 16444031323272.084, 10, 100, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 5020343986463.5391, 10, 100, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 1270977490645.2859, 10, 100, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 244835756822.62262, 10, 100, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 29786827693.962959, 10, 100, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1127612095.2857144, 10, 100, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -66370555.419753075, 10, 100, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 10420852.957671870, 10, 100, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -3373097.5714285718, 10, 100, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 2065423.6807760145, 10, 100, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler040 = 5.0000000000000039e-13;
 
 // Test data for n=20, m=0.
-// max(|f - f_GSL|): 20.000000000000000
+// max(|f - f_GSL|): 20.000000000000000 at index 8
 // max(|f - f_GSL| / |f_GSL|): 4.7350442720305269e-15
+// mean(f - f_GSL): -1.8323417989965736
+// variance(f - f_GSL): 2754690.9677631622
+// stddev(f - f_GSL): 1659.7261725246012
 const testcase_assoc_laguerre<double>
 data041[11] =
 {
   { 1.0000000000000000, 20, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -11.961333867812119, 20, 0, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 2829.4728613531743, 20, 0, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -18439.424502520938, 20, 0, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 24799805.877530713, 20, 0, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 7551960453.7672548, 20, 0, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -1379223608444.9155, 20, 0, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 165423821874449.94, 20, 0, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 29500368536981676., 20, 0, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 1.1292309514432901e+18, 20, 0, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 2.2061882785931735e+19, 20, 0, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler041 = 2.5000000000000020e-13;
 
 // Test data for n=20, m=1.
-// max(|f - f_GSL|): 8192.0000000000000
+// max(|f - f_GSL|): 8192.0000000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 2.0583579235866667e-15
+// mean(f - f_GSL): -744.54973777790485
+// variance(f - f_GSL): 6101096.7248424273
+// stddev(f - f_GSL): 2470.0398225215777
 const testcase_assoc_laguerre<double>
 data042[11] =
 {
   { 21.000000000000000, 20, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 19.900488129734079, 20, 1, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 2208.0318569557585, 20, 1, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 263690.96303121914, 20, 1, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 40667285.630564235, 20, 1, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 1737442572.8115399, 20, 1, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -588280953643.28125, 20, 1, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 45617733778241.328, 20, 1, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 17293487114876864., 20, 1, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 7.6219135858585062e+17, 20, 1, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 1.6037288204336759e+19, 20, 1, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler042 = 2.5000000000000020e-13;
 
 // Test data for n=20, m=2.
-// max(|f - f_GSL|): 6144.0000000000000
+// max(|f - f_GSL|): 6144.0000000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 9.3068805041852228e-15
+// mean(f - f_GSL): 610.73011506755233
+// variance(f - f_GSL): 995562063.33027601
+// stddev(f - f_GSL): 31552.528636074101
 const testcase_assoc_laguerre<double>
 data043[11] =
 {
   { 231.00000000000003, 20, 2, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 47.009338065112921, 20, 2, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -652.51305461728589, 20, 2, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 285388.25895069109, 20, 2, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 28664069.685624730, 20, 2, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -1399631966.3144732, 20, 2, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -115357373248.28194, 20, 2, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -3357730872975.8750, 20, 2, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 9765808962855122.0, 20, 2, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 5.0717292945559181e+17, 20, 2, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 1.1564665701334456e+19, 20, 2, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler043 = 5.0000000000000039e-13;
 
 // Test data for n=20, m=5.
-// max(|f - f_GSL|): 16.000000000000000
+// max(|f - f_GSL|): 16.000000000000000 at index 9
 // max(|f - f_GSL| / |f_GSL|): 3.5731302592472765e-15
+// mean(f - f_GSL): -1.4092810048974798
+// variance(f - f_GSL): 598.27450725320409
+// stddev(f - f_GSL): 24.459650595484884
 const testcase_assoc_laguerre<double>
 data044[11] =
 {
   { 53130.000000000000, 20, 5, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -158.69554500944142, 20, 5, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 334.08012288038952, 20, 5, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -198372.47662554163, 20, 5, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -13627144.088579426, 20, 5, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -780579985.44731510, 20, 5, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 116648634237.73535, 20, 5, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -12347348707739.742, 20, 5, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 1199516248034090.8, 20, 5, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 1.3451503195078531e+17, 20, 5, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 4.1058904276111483e+18, 20, 5, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler044 = 2.5000000000000020e-13;
 
 // Test data for n=20, m=10.
-// max(|f - f_GSL|): 64.000000000000000
+// max(|f - f_GSL|): 64.000000000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 1.0709209504860220e-15
+// mean(f - f_GSL): -5.5440786440316181
+// variance(f - f_GSL): 376.60778837733284
+// stddev(f - f_GSL): 19.406385247575933
 const testcase_assoc_laguerre<double>
 data045[11] =
 {
   { 30045015.000000000, 20, 10, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -1755.6226861258601, 20, 10, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -9081.6726644737901, 20, 10, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 95771.650912113109, 20, 10, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 5089151.9272779236, 20, 10, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 97400399.450206712, 20, 10, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -16009352450.477026, 20, 10, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 842271286905.01050, 20, 10, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -79901725466796.938, 20, 10, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 7944103675858637.0, 20, 10, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 5.7429821893388288e+17, 20, 10, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler045 = 2.5000000000000020e-13;
 
 // Test data for n=20, m=20.
-// max(|f - f_GSL|): 2.1250000000000000
+// max(|f - f_GSL|): 2.1250000000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 1.1968937782285294e-14
+// mean(f - f_GSL): 0.19344895682429938
+// variance(f - f_GSL): 0.41039783756558101
+// stddev(f - f_GSL): 0.64062300736515931
 const testcase_assoc_laguerre<double>
 data046[11] =
 {
   { 137846528819.99994, 20, 20, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -136976.49571333229, 20, 20, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 113878.49908041643, 20, 20, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -342529.21778796182, 20, 20, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -350112.66981443466, 20, 20, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -10791735.172977809, 20, 20, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -1038073940.0811402, 20, 20, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 667312550.63616335, 20, 20, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 741537869902.29028, 20, 20, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -32378376755737.418, 20, 20, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -601760332167937.62, 20, 20, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler046 = 1.0000000000000008e-12;
 
 // Test data for n=20, m=50.
-// max(|f - f_GSL|): 0.25000000000000000
+// max(|f - f_GSL|): 0.25000000000000000 at index 1
 // max(|f - f_GSL| / |f_GSL|): 1.2103144092558234e-14
+// mean(f - f_GSL): -0.022849527272311123
+// variance(f - f_GSL): 5.7130155161570465e-05
+// stddev(f - f_GSL): 0.0075584492563997852
 const testcase_assoc_laguerre<double>
 data047[11] =
 {
   { 1.6188460366265789e+17, 20, 50, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1599011936804291.5, 20, 50, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -131273880831.42432, 20, 50, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -3133213093.6903548, 20, 50, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -213935628.04985175, 20, 50, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -47375578.495921060, 20, 50, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -115731015.14034876, 20, 50, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -737415147.29420292, 20, 50, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -2123455626.8621769, 20, 50, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 29801266858.608929, 20, 50, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -132886631026.82553, 20, 50, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler047 = 1.0000000000000008e-12;
 
 // Test data for n=20, m=100.
-// max(|f - f_GSL|): 1572864.0000000000
+// max(|f - f_GSL|): 1572864.0000000000 at index 1
 // max(|f - f_GSL| / |f_GSL|): 3.6621229371267356e-14
+// mean(f - f_GSL): 137262.28072981400
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_assoc_laguerre<double>
 data048[11] =
 {
   { 2.9462227291176643e+22, 20, 100, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 3.5777890748701244e+21, 20, 100, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 3.1584925521456759e+20, 20, 100, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 1.7389599388424864e+19, 20, 100, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 4.1401342745980634e+17, 20, 100, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -79359706102062.594, 20, 100, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 22736203650743.145, 20, 100, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 65679006380.095703, 20, 100, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -236263257610.77792, 20, 100, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -38072644585.303101, 20, 100, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 68236474365.173973, 20, 100, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler048 = 2.5000000000000015e-12;
 
 // Test data for n=50, m=0.
-// max(|f - f_GSL|): 196608.00000000000
+// max(|f - f_GSL|): 196608.00000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 4.2910775919271532e-15
+// mean(f - f_GSL): -17990.447398879332
+// variance(f - f_GSL): 27618453284.204639
+// stddev(f - f_GSL): 166188.00583737876
 const testcase_assoc_laguerre<double>
 data049[11] =
 {
   { 1.0000000000000000, 50, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 17.534183446338233, 50, 0, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 980.26961889791028, 50, 0, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 293000.50735962362, 50, 0, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -14896937.968694873, 50, 0, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 2513677852.6916871, 50, 0, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -883876565337.99219, 50, 0, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -80967880733583.234, 50, 0, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -8217471769564841.0, 50, 0, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -2.1140031308048891e+18, 50, 0, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -3.9710103487094692e+20, 50, 0, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler049 = 2.5000000000000020e-13;
 
 // Test data for n=50, m=1.
-// max(|f - f_GSL|): 311296.00000000000
+// max(|f - f_GSL|): 311296.00000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 4.3113718426975911e-14
+// mean(f - f_GSL): 28417.096591423862
+// variance(f - f_GSL): 32927254885.825413
+// stddev(f - f_GSL): 181458.68644356879
 const testcase_assoc_laguerre<double>
 data050[11] =
 {
   { 51.000000000000021, 50, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.4214573271639575, 50, 1, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -2574.8072295127827, 50, 1, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 35846.479728359205, 50, 1, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -48263698.768318526, 50, 1, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 6161525870.2738533, 50, 1, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -382655486658.47125, 50, 1, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -109635579833241.72, 50, 1, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -14623805817283490., 50, 1, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -2.0666847190878152e+18, 50, 1, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -1.4385187953997626e+20, 50, 1, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler050 = 2.5000000000000015e-12;
 
 // Test data for n=50, m=2.
-// max(|f - f_GSL|): 139264.00000000000
+// max(|f - f_GSL|): 139264.00000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 2.5437687254653283e-15
+// mean(f - f_GSL): 12649.078840684118
+// variance(f - f_GSL): 1765904219.6855280
+// stddev(f - f_GSL): 42022.663167456769
 const testcase_assoc_laguerre<double>
 data051[11] =
 {
   { 1326.0000000000000, 50, 2, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -87.860732516444529, 50, 2, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -5203.2351191780917, 50, 2, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -461059.50012538867, 50, 2, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -30476695.327440590, 50, 2, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 3720804977.9338136, 50, 2, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 362262002434.51453, 50, 2, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -52210917867820.227, 50, 2, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -9567965136901914.0, 50, 2, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -8.9171277517712883e+17, 50, 2, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 5.7231129448806982e+19, 50, 2, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler051 = 2.5000000000000020e-13;
 
 // Test data for n=50, m=5.
-// max(|f - f_GSL|): 81920.000000000000
+// max(|f - f_GSL|): 81920.000000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 2.6215979818234617e-15
+// mean(f - f_GSL): -7423.7222822287622
+// variance(f - f_GSL): 648926959.11275744
+// stddev(f - f_GSL): 25474.044812568685
 const testcase_assoc_laguerre<double>
 data052[11] =
 {
   { 3478761.0000000000, 50, 5, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1055.8381917651498, 50, 5, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 15264.646660345055, 50, 5, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 1229651.8966600848, 50, 5, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 39270451.823656842, 50, 5, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -4424062601.1152029, 50, 5, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -186017434284.19223, 50, 5, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 50972853949302.609, 50, 5, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 6530702754012517.0, 50, 5, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 6.8387592714678029e+17, 50, 5, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 3.9198742504338391e+19, 50, 5, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler052 = 2.5000000000000020e-13;
 
 // Test data for n=50, m=10.
-// max(|f - f_GSL|): 192.00000000000000
+// max(|f - f_GSL|): 192.00000000000000 at index 9
 // max(|f - f_GSL| / |f_GSL|): 3.6229303412867937e-15
+// mean(f - f_GSL): -17.490024036237049
+// variance(f - f_GSL): 12219580.275082903
+// stddev(f - f_GSL): 3495.6516238153513
 const testcase_assoc_laguerre<double>
 data053[11] =
 {
   { 75394027565.999985, 50, 10, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 91833.924098770178, 50, 10, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 330501.87929778261, 50, 10, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 3625088.1635972536, 50, 10, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 213954727.28632012, 50, 10, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -9381006937.7517681, 50, 10, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 535333683777.48615, 50, 10, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 18824406573722.172, 50, 10, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -533858276780013.12, 50, 10, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -52995774666704016., 50, 10, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 6.0504182862448783e+18, 50, 10, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler053 = 2.5000000000000020e-13;
 
 // Test data for n=50, m=20.
-// max(|f - f_GSL|): 512.00000000000000
+// max(|f - f_GSL|): 512.00000000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 9.6616871455409171e-14
+// mean(f - f_GSL): -47.364405233074315
+// variance(f - f_GSL): 23782.450110032125
+// stddev(f - f_GSL): 154.21559619581973
 const testcase_assoc_laguerre<double>
 data054[11] =
 {
   { 1.6188460366265779e+17, 50, 20, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -307637087.25169408, 50, 20, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 12524651.102974586, 50, 20, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -315460483.86210561, 50, 20, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -1889683587.3459988, 50, 20, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 37457044404.200348, 50, 20, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -843831858224.71802, 50, 20, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -92231643172.307495, 50, 20, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 904211757769501.00, 50, 20, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 46508193600283272., 50, 20, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 2.3216887928162719e+18, 50, 20, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler054 = 5.0000000000000029e-12;
 
 // Test data for n=50, m=50.
-// max(|f - f_GSL|): 989855744.00000000
+// max(|f - f_GSL|): 989855744.00000000 at index 1
 // max(|f - f_GSL| / |f_GSL|): 1.1139535389485780e-14
+// mean(f - f_GSL): 89986812.018465906
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_assoc_laguerre<double>
 data055[11] =
 {
   { 1.0089134454556417e+29, 50, 50, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.3822795753070493e+23, 50, 50, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 95817260381628336., 50, 50, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -910798580856015.38, 50, 50, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 50513254049166.922, 50, 50, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 84159703903348.938, 50, 50, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -138805244691822.72, 50, 50, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 181046391269246.25, 50, 50, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 2086884905317107.5, 50, 50, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -2765620139862428.0, 50, 50, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -1.3706751678146290e+17, 50, 50, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler055 = 1.0000000000000008e-12;
 
 // Test data for n=50, m=100.
-// max(|f - f_GSL|): 1.8889465931478581e+22
+// max(|f - f_GSL|): 1.8889465931478581e+22 at index 1
 // max(|f - f_GSL| / |f_GSL|): 2.2737143709403468e-14
+// mean(f - f_GSL): -1.7004551248566624e+21
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_assoc_laguerre<double>
 data056[11] =
 {
   { 2.0128660909731929e+40, 50, 100, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 9.3675094807695474e+37, 50, 100, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 1.3009321481877196e+35, 50, 100, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 7.3720026893233823e+30, 50, 100, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -6.0824679079634667e+25, 50, 100, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -6.0053188793543450e+23, 50, 100, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 1.4178129287264692e+22, 50, 100, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -5.4652099341566706e+20, 50, 100, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -1.0817271759263274e+20, 50, 100, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 3.8058734007924195e+19, 50, 100, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 4.7439240848028344e+19, 50, 100, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler056 = 2.5000000000000015e-12;
 
 // Test data for n=100, m=0.
-// max(|f - f_GSL|): 98304.000000000000
+// max(|f - f_GSL|): 98304.000000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 3.8776197831393928e-15
+// mean(f - f_GSL): -8865.4606155926431
+// variance(f - f_GSL): 4058808072.1721206
+// stddev(f - f_GSL): 63708.775472238682
 const testcase_assoc_laguerre<double>
 data057[11] =
 {
   { 1.0000000000000000, 100, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 13.277662844303450, 100, 0, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 1854.0367283243388, 100, 0, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 170141.86987046551, 100, 0, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -7272442.3156006960, 100, 0, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 4847420871.2690506, 100, 0, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 693492765740.29688, 100, 0, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 17125518672239.770, 100, 0, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -13763178176383768., 100, 0, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 2.1307220490380173e+18, 100, 0, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -2.6292260693068916e+20, 100, 0, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler057 = 2.5000000000000020e-13;
 
 // Test data for n=100, m=1.
-// max(|f - f_GSL|): 245760.00000000000
+// max(|f - f_GSL|): 245760.00000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 1.4500034612453474e-14
+// mean(f - f_GSL): 22224.249977270934
+// variance(f - f_GSL): 29644360933.494530
+// stddev(f - f_GSL): 172175.37841832824
 const testcase_assoc_laguerre<double>
 data058[11] =
 {
   { 101.00000000000003, 100, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -14.650661983680420, 100, 1, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 1626.5010939361582, 100, 1, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 417884.77658268728, 100, 1, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -55617646.951649837, 100, 1, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 884829874.26626217, 100, 1, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 154466082750.32202, 100, 1, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -101423973484646.00, 100, 1, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -1388352348671756.8, 100, 1, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 7.8048705513268582e+17, 100, 1, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 1.6948925059042755e+19, 100, 1, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler058 = 1.0000000000000008e-12;
 
 // Test data for n=100, m=2.
-// max(|f - f_GSL|): 557056.00000000000
+// max(|f - f_GSL|): 557056.00000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 5.1603746667135714e-15
+// mean(f - f_GSL): 50294.883489425141
+// variance(f - f_GSL): 2009492413242.1035
+// stddev(f - f_GSL): 1417565.6645256698
 const testcase_assoc_laguerre<double>
 data059[11] =
 {
   { 5151.0000000000055, 100, 2, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -150.22012290951324, 100, 2, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { -7655.0593294049449, 100, 2, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -140996.69276179091, 100, 2, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -38645171.278549351, 100, 2, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -8889263688.2118931, 100, 2, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -1010338971533.3400, 100, 2, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -127582564332943.91, 100, 2, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 15970305694654312., 100, 2, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -1.6019844992862820e+18, 100, 2, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 2.8267024730962955e+20, 100, 2, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler059 = 5.0000000000000039e-13;
 
 // Test data for n=100, m=5.
-// max(|f - f_GSL|): 393216.00000000000
+// max(|f - f_GSL|): 393216.00000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 8.0946565190235238e-15
+// mean(f - f_GSL): 35883.277835871675
+// variance(f - f_GSL): 72845813363.438187
+// stddev(f - f_GSL): 269899.63572305575
 const testcase_assoc_laguerre<double>
 data060[11] =
 {
   { 96560646.000000030, 100, 5, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 2430.6732236677612, 100, 5, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 111162.32026994647, 100, 5, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 4036708.2599413628, 100, 5, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -34055982.664405443, 100, 5, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 30110688343.562328, 100, 5, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 2651429940558.2974, 100, 5, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 192108556058943.09, 100, 5, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -25410533973455528., 100, 5, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 2.1072955633564431e+18, 100, 5, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -2.9434005355877289e+20, 100, 5, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler060 = 5.0000000000000039e-13;
 
 // Test data for n=100, m=10.
-// max(|f - f_GSL|): 155648.00000000000
+// max(|f - f_GSL|): 155648.00000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 5.1685581852917721e-15
+// mean(f - f_GSL): 13707.238286828961
+// variance(f - f_GSL): 5037793089646.2549
+// stddev(f - f_GSL): 2244502.8602446141
 const testcase_assoc_laguerre<double>
 data061[11] =
 {
   { 46897636623981.039, 100, 10, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 529208.11550990329, 100, 10, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 7402892.1748803817, 100, 10, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { 88369632.083243579, 100, 10, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 822187797.59096563, 100, 10, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { 180231446033.06866, 100, 10, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { 7922942703798.1309, 100, 10, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { 784424250559042.12, 100, 10, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -16325634720239370., 100, 10, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -1.0879588307443162e+18, 100, 10, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 3.0114394463610642e+19, 100, 10, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler061 = 5.0000000000000039e-13;
 
 // Test data for n=100, m=20.
-// max(|f - f_GSL|): 524288.00000000000
+// max(|f - f_GSL|): 524288.00000000000 at index 10
 // max(|f - f_GSL| / |f_GSL|): 3.7005989410347388e-14
+// mean(f - f_GSL): -46766.623212640938
+// variance(f - f_GSL): 55764004614002920.
+// stddev(f - f_GSL): 236144033.61932081
 const testcase_assoc_laguerre<double>
 data062[11] =
 {
   { 2.9462227291176614e+22, 100, 20, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 313694958939.90405, 100, 20, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 45396489338.096191, 100, 20, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -7215826758.0081253, 100, 20, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 825949194005.88855, 100, 20, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -2764742119971.0811, 100, 20, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -219802198273516.03, 100, 20, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -1699053306145262.0, 100, 20, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { 3.5495709345023846e+17, 100, 20, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { -9.6128675110292419e+18, 100, 20, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 4.3619868422072212e+20, 100, 20, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler062 = 2.5000000000000015e-12;
 
 // Test data for n=100, m=50.
-// max(|f - f_GSL|): 316659348799488.00
+// max(|f - f_GSL|): 316659348799488.00 at index 1
 // max(|f - f_GSL| / |f_GSL|): 1.1554040570270351e-14
+// mean(f - f_GSL): -28787238841995.637
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_assoc_laguerre<double>
 data063[11] =
 {
   { 2.0128660909731931e+40, 100, 50, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -4.0151443913473373e+28, 100, 50, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 3.2199632594551924e+22, 100, 50, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -2.7568702092659756e+20, 100, 50, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { 7.5553066015421563e+19, 100, 50, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -2.7651625252387734e+19, 100, 50, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -5.8963680147283804e+19, 100, 50, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -1.8082798163033106e+20, 100, 50, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -3.9044276986817249e+20, 100, 50, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 6.9926310700401904e+21, 100, 50, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { -5.5727272809923646e+22, 100, 50, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler063 = 1.0000000000000008e-12;
 
 // Test data for n=100, m=100.
-// max(|f - f_GSL|): 2.3819765684465692e+39
+// max(|f - f_GSL|): 2.3819765684465692e+39 at index 1
 // max(|f - f_GSL| / |f_GSL|): 1.9897039067343855e-14
+// mean(f - f_GSL): 2.1654330573519588e+38
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_assoc_laguerre<double>
 data064[11] =
 {
   { 9.0548514656103225e+58, 100, 100, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.3334078033060556e+54, 100, 100, 
-         10.000000000000000 },
+         10.000000000000000, 0.0 },
   { 2.1002639254211340e+46, 100, 100, 
-         20.000000000000000 },
+         20.000000000000000, 0.0 },
   { -1.1073158068796292e+39, 100, 100, 
-         30.000000000000000 },
+         30.000000000000000, 0.0 },
   { -8.3640937363981346e+35, 100, 100, 
-         40.000000000000000 },
+         40.000000000000000, 0.0 },
   { -6.5879339429312686e+32, 100, 100, 
-         50.000000000000000 },
+         50.000000000000000, 0.0 },
   { -2.4190645077698771e+30, 100, 100, 
-         60.000000000000000 },
+         60.000000000000000, 0.0 },
   { -7.9224960465662171e+29, 100, 100, 
-         70.000000000000000 },
+         70.000000000000000, 0.0 },
   { -2.8605772478408694e+29, 100, 100, 
-         80.000000000000000 },
+         80.000000000000000, 0.0 },
   { 2.4149589189609957e+28, 100, 100, 
-         90.000000000000000 },
+         90.000000000000000, 0.0 },
   { 5.1146476014859021e+28, 100, 100, 
-         100.00000000000000 },
+         100.00000000000000, 0.0 },
 };
 const double toler064 = 1.0000000000000008e-12;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_assoc_laguerre<Tp> (&data)[Num], Tp toler)
+  test(const testcase_assoc_laguerre<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
         {
-       const Tp f = std::assoc_laguerre(data[i].n, data[i].m,
+       const Ret f = std::assoc_laguerre(data[i].n, data[i].m,
                     data[i].x);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index 3812795..3c87f52 100644 (file)
@@ -1,6 +1,6 @@
 // { dg-do run { target c++11 } }
-// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__ -ffp-contract=off" }
-
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
+//
 // Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for l=0, m=0.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_legendre<double>
 data001[21] =
 {
   { 1.0000000000000000, 0, 0, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         -0.50000000000000000 },
+         -0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         -0.40000000000000002 },
+         -0.39999999999999991, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         -0.30000000000000004 },
+         -0.29999999999999993, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         0.10000000000000009 },
+         0.10000000000000009, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         0.19999999999999996 },
+         0.20000000000000018, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         0.30000000000000004 },
+         0.30000000000000004, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         0.39999999999999991 },
+         0.40000000000000013, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         0.60000000000000009 },
+         0.60000000000000009, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         0.69999999999999996 },
+         0.70000000000000018, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         0.80000000000000004 },
+         0.80000000000000004, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         0.89999999999999991 },
+         0.90000000000000013, 0.0 },
   { 1.0000000000000000, 0, 0, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
 // Test data for l=1, m=0.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_legendre<double>
 data002[21] =
 {
   { -1.0000000000000000, 1, 0, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { -0.90000000000000002, 1, 0, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { -0.80000000000000004, 1, 0, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { -0.69999999999999996, 1, 0, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -0.59999999999999998, 1, 0, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -0.50000000000000000, 1, 0, 
-         -0.50000000000000000 },
-  { -0.40000000000000002, 1, 0, 
-         -0.40000000000000002 },
-  { -0.30000000000000004, 1, 0, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { -0.39999999999999991, 1, 0, 
+         -0.39999999999999991, 0.0 },
+  { -0.29999999999999993, 1, 0, 
+         -0.29999999999999993, 0.0 },
   { -0.19999999999999996, 1, 0, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -0.099999999999999978, 1, 0, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 0.0000000000000000, 1, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 0.10000000000000009, 1, 0, 
-         0.10000000000000009 },
-  { 0.19999999999999996, 1, 0, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { 0.20000000000000018, 1, 0, 
+         0.20000000000000018, 0.0 },
   { 0.30000000000000004, 1, 0, 
-         0.30000000000000004 },
-  { 0.39999999999999991, 1, 0, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 0.40000000000000013, 1, 0, 
+         0.40000000000000013, 0.0 },
   { 0.50000000000000000, 1, 0, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 0.60000000000000009, 1, 0, 
-         0.60000000000000009 },
-  { 0.69999999999999996, 1, 0, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 0.70000000000000018, 1, 0, 
+         0.70000000000000018, 0.0 },
   { 0.80000000000000004, 1, 0, 
-         0.80000000000000004 },
-  { 0.89999999999999991, 1, 0, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 0.90000000000000013, 1, 0, 
+         0.90000000000000013, 0.0 },
   { 1.0000000000000000, 1, 0, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
 // Test data for l=1, m=1.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 12
+// max(|f - f_GSL| / |f_GSL|): 2.4227052612512390e-16
+// mean(f - f_GSL): 1.0573552615477681e-17
+// variance(f - f_GSL): 5.8695007828944331e-36
+// stddev(f - f_GSL): 2.4227052612512388e-18
 const testcase_assoc_legendre<double>
 data003[21] =
 {
   { -0.0000000000000000, 1, 1, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { -0.43588989435406728, 1, 1, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { -0.59999999999999987, 1, 1, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { -0.71414284285428509, 1, 1, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -0.80000000000000004, 1, 1, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -0.86602540378443860, 1, 1, 
-         -0.50000000000000000 },
+         -0.50000000000000000, 0.0 },
   { -0.91651513899116799, 1, 1, 
-         -0.40000000000000002 },
-  { -0.95393920141694577, 1, 1, 
-         -0.30000000000000004 },
+         -0.39999999999999991, 0.0 },
+  { -0.95393920141694555, 1, 1, 
+         -0.29999999999999993, 0.0 },
   { -0.97979589711327120, 1, 1, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -0.99498743710661997, 1, 1, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -1.0000000000000000, 1, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -0.99498743710661997, 1, 1, 
-         0.10000000000000009 },
+         0.10000000000000009, 0.0 },
   { -0.97979589711327120, 1, 1, 
-         0.19999999999999996 },
+         0.20000000000000018, 0.0 },
   { -0.95393920141694577, 1, 1, 
-         0.30000000000000004 },
-  { -0.91651513899116799, 1, 1, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -0.91651513899116788, 1, 1, 
+         0.40000000000000013, 0.0 },
   { -0.86602540378443860, 1, 1, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { -0.79999999999999993, 1, 1, 
-         0.60000000000000009 },
-  { -0.71414284285428509, 1, 1, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { -0.71414284285428475, 1, 1, 
+         0.70000000000000018, 0.0 },
   { -0.59999999999999987, 1, 1, 
-         0.80000000000000004 },
-  { -0.43588989435406750, 1, 1, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { -0.43588989435406711, 1, 1, 
+         0.90000000000000013, 0.0 },
   { -0.0000000000000000, 1, 1, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler003 = 2.5000000000000020e-13;
 
 // Test data for l=2, m=0.
-// max(|f - f_GSL|): 1.1102230246251565e-16
+// max(|f - f_GSL|): 1.1102230246251565e-16 at index 17
 // max(|f - f_GSL| / |f_GSL|): 1.3877787807814482e-15
+// mean(f - f_GSL): 1.8503717077085941e-17
+// variance(f - f_GSL): 1.7975346147614202e-35
+// stddev(f - f_GSL): 4.2397342071896678e-18
 const testcase_assoc_legendre<double>
 data004[21] =
 {
   { 1.0000000000000000, 2, 0, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 0.71500000000000008, 2, 0, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 0.46000000000000019, 2, 0, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 0.23499999999999988, 2, 0, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 0.039999999999999925, 2, 0, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -0.12500000000000000, 2, 0, 
-         -0.50000000000000000 },
-  { -0.25999999999999995, 2, 0, 
-         -0.40000000000000002 },
-  { -0.36499999999999999, 2, 0, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { -0.26000000000000012, 2, 0, 
+         -0.39999999999999991, 0.0 },
+  { -0.36500000000000005, 2, 0, 
+         -0.29999999999999993, 0.0 },
   { -0.44000000000000006, 2, 0, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -0.48499999999999999, 2, 0, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -0.50000000000000000, 2, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -0.48499999999999999, 2, 0, 
-         0.10000000000000009 },
-  { -0.44000000000000006, 2, 0, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -0.43999999999999989, 2, 0, 
+         0.20000000000000018, 0.0 },
   { -0.36499999999999999, 2, 0, 
-         0.30000000000000004 },
-  { -0.26000000000000012, 2, 0, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -0.25999999999999984, 2, 0, 
+         0.40000000000000013, 0.0 },
   { -0.12500000000000000, 2, 0, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 0.040000000000000147, 2, 0, 
-         0.60000000000000009 },
-  { 0.23499999999999988, 2, 0, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 0.23500000000000032, 2, 0, 
+         0.70000000000000018, 0.0 },
   { 0.46000000000000019, 2, 0, 
-         0.80000000000000004 },
-  { 0.71499999999999986, 2, 0, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 0.71500000000000030, 2, 0, 
+         0.90000000000000013, 0.0 },
   { 1.0000000000000000, 2, 0, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler004 = 2.5000000000000020e-13;
 
 // Test data for l=2, m=1.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 3
+// max(|f - f_GSL| / |f_GSL|): 3.7770554319736585e-16
+// mean(f - f_GSL): -1.0573552615477681e-17
+// variance(f - f_GSL): 5.8695007828944331e-36
+// stddev(f - f_GSL): 2.4227052612512388e-18
 const testcase_assoc_legendre<double>
 data005[21] =
 {
   { 0.0000000000000000, 2, 1, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.1769027147559816, 2, 1, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 1.4399999999999999, 2, 1, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 1.4996999699939983, 2, 1, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 1.4399999999999999, 2, 1, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 1.2990381056766580, 2, 1, 
-         -0.50000000000000000 },
-  { 1.0998181667894018, 2, 1, 
-         -0.40000000000000002 },
-  { 0.85854528127525132, 2, 1, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { 1.0998181667894014, 2, 1, 
+         -0.39999999999999991, 0.0 },
+  { 0.85854528127525076, 2, 1, 
+         -0.29999999999999993, 0.0 },
   { 0.58787753826796263, 2, 1, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 0.29849623113198592, 2, 1, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -0.0000000000000000, 2, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -0.29849623113198626, 2, 1, 
-         0.10000000000000009 },
-  { -0.58787753826796263, 2, 1, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -0.58787753826796330, 2, 1, 
+         0.20000000000000018, 0.0 },
   { -0.85854528127525132, 2, 1, 
-         0.30000000000000004 },
-  { -1.0998181667894014, 2, 1, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -1.0998181667894018, 2, 1, 
+         0.40000000000000013, 0.0 },
   { -1.2990381056766580, 2, 1, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { -1.4400000000000002, 2, 1, 
-         0.60000000000000009 },
+         0.60000000000000009, 0.0 },
   { -1.4996999699939983, 2, 1, 
-         0.69999999999999996 },
+         0.70000000000000018, 0.0 },
   { -1.4399999999999999, 2, 1, 
-         0.80000000000000004 },
-  { -1.1769027147559821, 2, 1, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { -1.1769027147559812, 2, 1, 
+         0.90000000000000013, 0.0 },
   { -0.0000000000000000, 2, 1, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler005 = 2.5000000000000020e-13;
 
 // Test data for l=2, m=2.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 5.2867763077388426e-16
+// mean(f - f_GSL): -8.4588420923821446e-17
+// variance(f - f_GSL): 3.7564805010524372e-34
+// stddev(f - f_GSL): 1.9381642090009910e-17
 const testcase_assoc_legendre<double>
 data006[21] =
 {
   { 0.0000000000000000, 2, 2, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 0.56999999999999984, 2, 2, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 1.0799999999999996, 2, 2, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 1.5300000000000005, 2, 2, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 1.9200000000000004, 2, 2, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 2.2500000000000000, 2, 2, 
-         -0.50000000000000000 },
+         -0.50000000000000000, 0.0 },
   { 2.5200000000000000, 2, 2, 
-         -0.40000000000000002 },
-  { 2.7300000000000004, 2, 2, 
-         -0.30000000000000004 },
+         -0.39999999999999991, 0.0 },
+  { 2.7299999999999995, 2, 2, 
+         -0.29999999999999993, 0.0 },
   { 2.8799999999999999, 2, 2, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 2.9700000000000002, 2, 2, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 3.0000000000000000, 2, 2, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 2.9700000000000002, 2, 2, 
-         0.10000000000000009 },
+         0.10000000000000009, 0.0 },
   { 2.8799999999999999, 2, 2, 
-         0.19999999999999996 },
+         0.20000000000000018, 0.0 },
   { 2.7300000000000004, 2, 2, 
-         0.30000000000000004 },
-  { 2.5200000000000000, 2, 2, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 2.5199999999999991, 2, 2, 
+         0.40000000000000013, 0.0 },
   { 2.2500000000000000, 2, 2, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 1.9199999999999997, 2, 2, 
-         0.60000000000000009 },
-  { 1.5300000000000005, 2, 2, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 1.5299999999999989, 2, 2, 
+         0.70000000000000018, 0.0 },
   { 1.0799999999999996, 2, 2, 
-         0.80000000000000004 },
-  { 0.57000000000000040, 2, 2, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 0.56999999999999929, 2, 2, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 2, 2, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler006 = 2.5000000000000020e-13;
 
 // Test data for l=5, m=0.
-// max(|f - f_GSL|): 2.0122792321330962e-16
-// max(|f - f_GSL| / |f_GSL|): 4.8911475274404243e-15
+// max(|f - f_GSL|): 2.0122792321330962e-16 at index 19
+// max(|f - f_GSL| / |f_GSL|): 4.8911475274405560e-15
+// mean(f - f_GSL): -2.3129646346357427e-18
+// variance(f - f_GSL): 2.8086478355647191e-37
+// stddev(f - f_GSL): 5.2996677589870847e-19
 const testcase_assoc_legendre<double>
 data007[21] =
 {
   { -1.0000000000000000, 5, 0, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 0.041141250000000087, 5, 0, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 0.39951999999999993, 5, 0, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 0.36519874999999991, 5, 0, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 0.15263999999999994, 5, 0, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -0.089843750000000000, 5, 0, 
-         -0.50000000000000000 },
-  { -0.27063999999999994, 5, 0, 
-         -0.40000000000000002 },
-  { -0.34538625000000001, 5, 0, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { -0.27064000000000010, 5, 0, 
+         -0.39999999999999991, 0.0 },
+  { -0.34538624999999995, 5, 0, 
+         -0.29999999999999993, 0.0 },
   { -0.30751999999999996, 5, 0, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -0.17882874999999995, 5, 0, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 0.0000000000000000, 5, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 0.17882875000000015, 5, 0, 
-         0.10000000000000009 },
-  { 0.30751999999999996, 5, 0, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { 0.30752000000000013, 5, 0, 
+         0.20000000000000018, 0.0 },
   { 0.34538625000000001, 5, 0, 
-         0.30000000000000004 },
-  { 0.27064000000000010, 5, 0, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 0.27063999999999988, 5, 0, 
+         0.40000000000000013, 0.0 },
   { 0.089843750000000000, 5, 0, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { -0.15264000000000016, 5, 0, 
-         0.60000000000000009 },
-  { -0.36519874999999991, 5, 0, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { -0.36519875000000024, 5, 0, 
+         0.70000000000000018, 0.0 },
   { -0.39951999999999993, 5, 0, 
-         0.80000000000000004 },
-  { -0.041141250000000261, 5, 0, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { -0.041141249999999151, 5, 0, 
+         0.90000000000000013, 0.0 },
   { 1.0000000000000000, 5, 0, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler007 = 2.5000000000000020e-13;
 
 // Test data for l=5, m=1.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 6.6613381477509392e-16 at index 14
+// max(|f - f_GSL| / |f_GSL|): 5.5186908001167120e-16
+// mean(f - f_GSL): -1.0573552615477681e-17
+// variance(f - f_GSL): 5.8695007828944331e-36
+// stddev(f - f_GSL): 2.4227052612512388e-18
 const testcase_assoc_legendre<double>
 data008[21] =
 {
   { 0.0000000000000000, 5, 1, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { -2.8099369608350981, 5, 1, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { -0.72180000000000089, 5, 1, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 1.0951826834447254, 5, 1, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 1.9775999999999998, 5, 1, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 1.9282596881137892, 5, 1, 
-         -0.50000000000000000 },
-  { 1.2070504380513685, 5, 1, 
-         -0.40000000000000002 },
-  { 0.16079837663884422, 5, 1, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { 1.2070504380513671, 5, 1, 
+         -0.39999999999999991, 0.0 },
+  { 0.16079837663884300, 5, 1, 
+         -0.29999999999999993, 0.0 },
   { -0.87005875663658538, 5, 1, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -1.6083350053680323, 5, 1, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -1.8750000000000000, 5, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -1.6083350053680314, 5, 1, 
-         0.10000000000000009 },
-  { -0.87005875663658538, 5, 1, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -0.87005875663658327, 5, 1, 
+         0.20000000000000018, 0.0 },
   { 0.16079837663884422, 5, 1, 
-         0.30000000000000004 },
-  { 1.2070504380513671, 5, 1, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 1.2070504380513694, 5, 1, 
+         0.40000000000000013, 0.0 },
   { 1.9282596881137892, 5, 1, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 1.9775999999999998, 5, 1, 
-         0.60000000000000009 },
-  { 1.0951826834447254, 5, 1, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 1.0951826834447216, 5, 1, 
+         0.70000000000000018, 0.0 },
   { -0.72180000000000089, 5, 1, 
-         0.80000000000000004 },
-  { -2.8099369608350973, 5, 1, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { -2.8099369608350999, 5, 1, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 5, 1, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler008 = 2.5000000000000020e-13;
 
 // Test data for l=5, m=2.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 3.5527136788005009e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 5.4136589391245733e-16
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_assoc_legendre<double>
 data009[21] =
 {
   { 0.0000000000000000, 5, 2, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { -12.837825000000000, 5, 2, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { -13.910400000000001, 5, 2, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { -8.8089749999999967, 5, 2, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -1.6128000000000000, 5, 2, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 4.9218750000000000, 5, 2, 
-         -0.50000000000000000 },
+         -0.50000000000000000, 0.0 },
   { 9.1728000000000005, 5, 2, 
-         -0.40000000000000002 },
-  { 10.462725000000001, 5, 2, 
-         -0.30000000000000004 },
+         -0.39999999999999991, 0.0 },
+  { 10.462724999999997, 5, 2, 
+         -0.29999999999999993, 0.0 },
   { 8.8703999999999983, 5, 2, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 5.0415749999999990, 5, 2, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -0.0000000000000000, 5, 2, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -5.0415750000000044, 5, 2, 
-         0.10000000000000009 },
-  { -8.8703999999999983, 5, 2, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -8.8704000000000054, 5, 2, 
+         0.20000000000000018, 0.0 },
   { -10.462725000000001, 5, 2, 
-         0.30000000000000004 },
-  { -9.1728000000000005, 5, 2, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -9.1727999999999970, 5, 2, 
+         0.40000000000000013, 0.0 },
   { -4.9218750000000000, 5, 2, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 1.6128000000000047, 5, 2, 
-         0.60000000000000009 },
-  { 8.8089749999999967, 5, 2, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 8.8089750000000109, 5, 2, 
+         0.70000000000000018, 0.0 },
   { 13.910400000000001, 5, 2, 
-         0.80000000000000004 },
-  { 12.837825000000004, 5, 2, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 12.837824999999990, 5, 2, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 5, 2, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler009 = 2.5000000000000020e-13;
 
 // Test data for l=5, m=5.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 1.0231815394945443e-12 at index 12
+// max(|f - f_GSL| / |f_GSL|): 1.1990652164995755e-15
+// mean(f - f_GSL): 3.1128538899966297e-14
+// variance(f - f_GSL): 5.0871761537452526e-29
+// stddev(f - f_GSL): 7.1324442891236469e-15
 const testcase_assoc_legendre<double>
 data010[21] =
 {
   { -0.0000000000000000, 5, 5, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { -14.870165800941818, 5, 5, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { -73.483199999999925, 5, 5, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { -175.53238298794764, 5, 5, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -309.65760000000006, 5, 5, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -460.34662869916559, 5, 5, 
-         -0.50000000000000000 },
+         -0.50000000000000000, 0.0 },
   { -611.12496255819883, 5, 5, 
-         -0.40000000000000002 },
-  { -746.50941479523760, 5, 5, 
-         -0.30000000000000004 },
+         -0.39999999999999991, 0.0 },
+  { -746.50941479523703, 5, 5, 
+         -0.29999999999999993, 0.0 },
   { -853.31600434671316, 5, 5, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -921.55189181724734, 5, 5, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -945.00000000000000, 5, 5, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -921.55189181724734, 5, 5, 
-         0.10000000000000009 },
+         0.10000000000000009, 0.0 },
   { -853.31600434671316, 5, 5, 
-         0.19999999999999996 },
+         0.20000000000000018, 0.0 },
   { -746.50941479523760, 5, 5, 
-         0.30000000000000004 },
-  { -611.12496255819883, 5, 5, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -611.12496255819838, 5, 5, 
+         0.40000000000000013, 0.0 },
   { -460.34662869916559, 5, 5, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { -309.65759999999989, 5, 5, 
-         0.60000000000000009 },
-  { -175.53238298794764, 5, 5, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { -175.53238298794724, 5, 5, 
+         0.70000000000000018, 0.0 },
   { -73.483199999999925, 5, 5, 
-         0.80000000000000004 },
-  { -14.870165800941855, 5, 5, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { -14.870165800941789, 5, 5, 
+         0.90000000000000013, 0.0 },
   { -0.0000000000000000, 5, 5, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler010 = 2.5000000000000020e-13;
 
 // Test data for l=10, m=0.
-// max(|f - f_GSL|): 2.7755575615628914e-16
-// max(|f - f_GSL| / |f_GSL|): 1.0547610802636413e-15
+// max(|f - f_GSL|): 3.8857805861880479e-16 at index 19
+// max(|f - f_GSL| / |f_GSL|): 1.4766655123690915e-15
+// mean(f - f_GSL): -2.5112187461759493e-17
+// variance(f - f_GSL): 3.3107652853513909e-35
+// stddev(f - f_GSL): 5.7539249954716919e-18
 const testcase_assoc_legendre<double>
 data011[21] =
 {
   { 1.0000000000000000, 10, 0, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { -0.26314561785585960, 10, 0, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 0.30052979560000004, 10, 0, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 0.085805795531640333, 10, 0, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -0.24366274560000001, 10, 0, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -0.18822860717773438, 10, 0, 
-         -0.50000000000000000 },
-  { 0.096839064399999925, 10, 0, 
-         -0.40000000000000002 },
+         -0.50000000000000000, 0.0 },
+  { 0.096839064400000258, 10, 0, 
+         -0.39999999999999991, 0.0 },
   { 0.25147634951601561, 10, 0, 
-         -0.30000000000000004 },
+         -0.29999999999999993, 0.0 },
   { 0.12907202559999983, 10, 0, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -0.12212499738710943, 10, 0, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -0.24609375000000000, 10, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -0.12212499738710922, 10, 0, 
-         0.10000000000000009 },
-  { 0.12907202559999983, 10, 0, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { 0.12907202560000042, 10, 0, 
+         0.20000000000000018, 0.0 },
   { 0.25147634951601561, 10, 0, 
-         0.30000000000000004 },
-  { 0.096839064400000258, 10, 0, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 0.096839064399999633, 10, 0, 
+         0.40000000000000013, 0.0 },
   { -0.18822860717773438, 10, 0, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { -0.24366274559999984, 10, 0, 
-         0.60000000000000009 },
-  { 0.085805795531640333, 10, 0, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 0.085805795531641277, 10, 0, 
+         0.70000000000000018, 0.0 },
   { 0.30052979560000004, 10, 0, 
-         0.80000000000000004 },
-  { -0.26314561785585899, 10, 0, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { -0.26314561785586010, 10, 0, 
+         0.90000000000000013, 0.0 },
   { 1.0000000000000000, 10, 0, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler011 = 2.5000000000000020e-13;
 
 // Test data for l=10, m=1.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 14
+// max(|f - f_GSL| / |f_GSL|): 5.3672431731635395e-16
+// mean(f - f_GSL): 6.3441315692866085e-17
+// variance(f - f_GSL): 2.1130202818419960e-34
+// stddev(f - f_GSL): 1.4536231567507432e-17
 const testcase_assoc_legendre<double>
 data012[21] =
 {
   { -0.0000000000000000, 10, 1, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { -3.0438748781479039, 10, 1, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { -0.87614260800000254, 10, 1, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 2.9685359952934527, 10, 1, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 1.2511825919999997, 10, 1, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -2.0066877394361260, 10, 1, 
-         -0.50000000000000000 },
-  { -2.4822196173476661, 10, 1, 
-         -0.40000000000000002 },
-  { -0.12309508907433910, 10, 1, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { -2.4822196173476647, 10, 1, 
+         -0.39999999999999991, 0.0 },
+  { -0.12309508907433593, 10, 1, 
+         -0.29999999999999993, 0.0 },
   { 2.2468221751958413, 10, 1, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 2.2472659777983512, 10, 1, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -0.0000000000000000, 10, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -2.2472659777983535, 10, 1, 
-         0.10000000000000009 },
-  { -2.2468221751958413, 10, 1, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -2.2468221751958377, 10, 1, 
+         0.20000000000000018, 0.0 },
   { 0.12309508907433910, 10, 1, 
-         0.30000000000000004 },
-  { 2.4822196173476647, 10, 1, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 2.4822196173476669, 10, 1, 
+         0.40000000000000013, 0.0 },
   { 2.0066877394361260, 10, 1, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { -1.2511825920000037, 10, 1, 
-         0.60000000000000009 },
-  { -2.9685359952934527, 10, 1, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { -2.9685359952934505, 10, 1, 
+         0.70000000000000018, 0.0 },
   { 0.87614260800000254, 10, 1, 
-         0.80000000000000004 },
-  { 3.0438748781479115, 10, 1, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 3.0438748781478981, 10, 1, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 10, 1, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler012 = 2.5000000000000020e-13;
 
 // Test data for l=10, m=2.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 1.2434497875801753e-14 at index 12
+// max(|f - f_GSL| / |f_GSL|): 1.9632900580960751e-15
+// mean(f - f_GSL): -8.4588420923821446e-17
+// variance(f - f_GSL): 3.7564805010524372e-34
+// stddev(f - f_GSL): 1.9381642090009910e-17
 const testcase_assoc_legendre<double>
 data013[21] =
 {
   { 0.0000000000000000, 10, 2, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 16.376387762496137, 10, 2, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { -35.394657804000005, 10, 2, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { -3.6191429423788648, 10, 2, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 28.679675904000014, 10, 2, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 18.388023376464844, 10, 2, 
-         -0.50000000000000000 },
-  { -12.818955995999994, 10, 2, 
-         -0.40000000000000002 },
-  { -27.739821675972664, 10, 2, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { -12.818955996000021, 10, 2, 
+         -0.39999999999999991, 0.0 },
+  { -27.739821675972646, 10, 2, 
+         -0.29999999999999993, 0.0 },
   { -13.280661503999987, 10, 2, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 13.885467170308601, 10, 2, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 27.070312500000000, 10, 2, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 13.885467170308573, 10, 2, 
-         0.10000000000000009 },
-  { -13.280661503999987, 10, 2, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -13.280661504000051, 10, 2, 
+         0.20000000000000018, 0.0 },
   { -27.739821675972664, 10, 2, 
-         0.30000000000000004 },
-  { -12.818955996000021, 10, 2, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -12.818955995999961, 10, 2, 
+         0.40000000000000013, 0.0 },
   { 18.388023376464844, 10, 2, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 28.679675904000000, 10, 2, 
-         0.60000000000000009 },
-  { -3.6191429423788648, 10, 2, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { -3.6191429423789856, 10, 2, 
+         0.70000000000000018, 0.0 },
   { -35.394657804000005, 10, 2, 
-         0.80000000000000004 },
-  { 16.376387762496009, 10, 2, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 16.376387762496201, 10, 2, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 10, 2, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler013 = 2.5000000000000020e-13;
 
 // Test data for l=10, m=5.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 2.9103830456733704e-11 at index 12
+// max(|f - f_GSL| / |f_GSL|): 1.4825078449301893e-15
+// mean(f - f_GSL): 2.4253192047278085e-12
+// variance(f - f_GSL): 3.0881409535313035e-25
+// stddev(f - f_GSL): 5.5571044200476413e-13
 const testcase_assoc_legendre<double>
 data014[21] =
 {
   { 0.0000000000000000, 10, 5, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 21343.618518164680, 10, 5, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 40457.016407807983, 10, 5, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 20321.279317331315, 10, 5, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -14410.820616192004, 10, 5, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -30086.169706116176, 10, 5, 
-         -0.50000000000000000 },
-  { -17177.549337582859, 10, 5, 
-         -0.40000000000000002 },
-  { 9272.5119495412364, 10, 5, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { -17177.549337582834, 10, 5, 
+         -0.39999999999999991, 0.0 },
+  { 9272.5119495412546, 10, 5, 
+         -0.29999999999999993, 0.0 },
   { 26591.511184414714, 10, 5, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 21961.951238504211, 10, 5, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -0.0000000000000000, 10, 5, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -21961.951238504229, 10, 5, 
-         0.10000000000000009 },
-  { -26591.511184414714, 10, 5, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -26591.511184414703, 10, 5, 
+         0.20000000000000018, 0.0 },
   { -9272.5119495412364, 10, 5, 
-         0.30000000000000004 },
-  { 17177.549337582834, 10, 5, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 17177.549337582877, 10, 5, 
+         0.40000000000000013, 0.0 },
   { 30086.169706116176, 10, 5, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 14410.820616191972, 10, 5, 
-         0.60000000000000009 },
-  { -20321.279317331315, 10, 5, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { -20321.279317331391, 10, 5, 
+         0.70000000000000018, 0.0 },
   { -40457.016407807983, 10, 5, 
-         0.80000000000000004 },
-  { -21343.618518164694, 10, 5, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { -21343.618518164636, 10, 5, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 10, 5, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler014 = 2.5000000000000020e-13;
 
 // Test data for l=10, m=10.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 1.1920928955078125e-06 at index 12
+// max(|f - f_GSL| / |f_GSL|): 2.3944993944674592e-15
+// mean(f - f_GSL): -1.5610740298316593e-08
+// variance(f - f_GSL): 1.2793998664727994e-17
+// stddev(f - f_GSL): 3.5768699535666649e-09
 const testcase_assoc_legendre<double>
 data015[21] =
 {
   { 0.0000000000000000, 10, 10, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 162117.40078784220, 10, 10, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 3958896.3481267113, 10, 10, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 22589806.343887307, 10, 10, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 70300999.121633321, 10, 10, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 155370278.54003900, 10, 10, 
-         -0.50000000000000000 },
+         -0.50000000000000000, 0.0 },
   { 273815518.20150518, 10, 10, 
-         -0.40000000000000002 },
-  { 408571989.13158917, 10, 10, 
-         -0.30000000000000004 },
+         -0.39999999999999991, 0.0 },
+  { 408571989.13158852, 10, 10, 
+         -0.29999999999999993, 0.0 },
   { 533848212.07990247, 10, 10, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 622640835.70523083, 10, 10, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 654729075.00000000, 10, 10, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 622640835.70523083, 10, 10, 
-         0.10000000000000009 },
+         0.10000000000000009, 0.0 },
   { 533848212.07990247, 10, 10, 
-         0.19999999999999996 },
+         0.20000000000000018, 0.0 },
   { 408571989.13158917, 10, 10, 
-         0.30000000000000004 },
-  { 273815518.20150518, 10, 10, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 273815518.20150483, 10, 10, 
+         0.40000000000000013, 0.0 },
   { 155370278.54003900, 10, 10, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 70300999.121633217, 10, 10, 
-         0.60000000000000009 },
-  { 22589806.343887307, 10, 10, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 22589806.343887202, 10, 10, 
+         0.70000000000000018, 0.0 },
   { 3958896.3481267113, 10, 10, 
-         0.80000000000000004 },
-  { 162117.40078784304, 10, 10, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 162117.40078784159, 10, 10, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 10, 10, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler015 = 2.5000000000000020e-13;
 
 // Test data for l=20, m=0.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2307336678138069e-15
+// max(|f - f_GSL|): 3.6082248300317588e-16 at index 19
+// max(|f - f_GSL| / |f_GSL|): 2.4166281401316513e-15
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 4.9424644697959907e-65
+// stddev(f - f_GSL): 7.0302663319365015e-33
 const testcase_assoc_legendre<double>
 data016[21] =
 {
   { 1.0000000000000000, 20, 0, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { -0.14930823530984835, 20, 0, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 0.22420460541741347, 20, 0, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { -0.20457394463834172, 20, 0, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 0.15916752910098109, 20, 0, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -0.048358381067373557, 20, 0, 
-         -0.50000000000000000 },
-  { -0.10159261558628156, 20, 0, 
-         -0.40000000000000002 },
-  { 0.18028715947998042, 20, 0, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { -0.10159261558628112, 20, 0, 
+         -0.39999999999999991, 0.0 },
+  { 0.18028715947998047, 20, 0, 
+         -0.29999999999999993, 0.0 },
   { -0.098042194344594796, 20, 0, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -0.082077130944527663, 20, 0, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 0.17619705200195312, 20, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -0.082077130944528023, 20, 0, 
-         0.10000000000000009 },
-  { -0.098042194344594796, 20, 0, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -0.098042194344594089, 20, 0, 
+         0.20000000000000018, 0.0 },
   { 0.18028715947998042, 20, 0, 
-         0.30000000000000004 },
-  { -0.10159261558628112, 20, 0, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -0.10159261558628192, 20, 0, 
+         0.40000000000000013, 0.0 },
   { -0.048358381067373557, 20, 0, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 0.15916752910098075, 20, 0, 
-         0.60000000000000009 },
-  { -0.20457394463834172, 20, 0, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { -0.20457394463834136, 20, 0, 
+         0.70000000000000018, 0.0 },
   { 0.22420460541741347, 20, 0, 
-         0.80000000000000004 },
-  { -0.14930823530984924, 20, 0, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { -0.14930823530984758, 20, 0, 
+         0.90000000000000013, 0.0 },
   { 1.0000000000000000, 20, 0, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler016 = 2.5000000000000020e-13;
 
 // Test data for l=20, m=1.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 1.0752784502271902e-15
+// mean(f - f_GSL): 1.4274296030894871e-16
+// variance(f - f_GSL): 1.0697165176825104e-33
+// stddev(f - f_GSL): 3.2706521026891724e-17
 const testcase_assoc_legendre<double>
 data017[21] =
 {
   { 0.0000000000000000, 20, 1, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 4.3838334818220499, 20, 1, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { -0.63138296146340844, 20, 1, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 0.72274871413391395, 20, 1, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -2.3203528743824910, 20, 1, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 3.7399919228791405, 20, 1, 
-         -0.50000000000000000 },
-  { -3.1692202279270041, 20, 1, 
-         -0.40000000000000002 },
-  { 0.15804468835344135, 20, 1, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { -3.1692202279270085, 20, 1, 
+         -0.39999999999999991, 0.0 },
+  { 0.15804468835345031, 20, 1, 
+         -0.29999999999999993, 0.0 },
   { 3.0366182393271171, 20, 1, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -3.2115523815580209, 20, 1, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 0.0000000000000000, 20, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 3.2115523815580169, 20, 1, 
-         0.10000000000000009 },
-  { -3.0366182393271171, 20, 1, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -3.0366182393271259, 20, 1, 
+         0.20000000000000018, 0.0 },
   { -0.15804468835344135, 20, 1, 
-         0.30000000000000004 },
-  { 3.1692202279270085, 20, 1, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 3.1692202279269970, 20, 1, 
+         0.40000000000000013, 0.0 },
   { -3.7399919228791405, 20, 1, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 2.3203528743824995, 20, 1, 
-         0.60000000000000009 },
-  { -0.72274871413391395, 20, 1, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { -0.72274871413393793, 20, 1, 
+         0.70000000000000018, 0.0 },
   { 0.63138296146340844, 20, 1, 
-         0.80000000000000004 },
-  { -4.3838334818220339, 20, 1, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { -4.3838334818220686, 20, 1, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 20, 1, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler017 = 2.5000000000000020e-13;
 
 // Test data for l=20, m=2.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 2.4868995751603507e-14 at index 5
+// max(|f - f_GSL| / |f_GSL|): 1.0097407175524082e-15
+// mean(f - f_GSL): -2.0301221021717147e-15
+// variance(f - f_GSL): 2.1637327686062039e-31
+// stddev(f - f_GSL): 4.6515941016023782e-16
 const testcase_assoc_legendre<double>
 data018[21] =
 {
   { 0.0000000000000000, 20, 2, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 80.812425587310102, 20, 2, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { -95.849622172549374, 20, 2, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 87.337927630325510, 20, 2, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -70.330891533985834, 20, 2, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 24.629090735179489, 20, 2, 
-         -0.50000000000000000 },
-  { 39.902576338912425, 20, 2, 
-         -0.40000000000000002 },
-  { -75.621201471396603, 20, 2, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { 39.902576338912247, 20, 2, 
+         -0.39999999999999991, 0.0 },
+  { -75.621201471396546, 20, 2, 
+         -0.29999999999999993, 0.0 },
   { 42.417415829726494, 20, 2, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 33.826848678871293, 20, 2, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -74.002761840820312, 20, 2, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 33.826848678871464, 20, 2, 
-         0.10000000000000009 },
-  { 42.417415829726494, 20, 2, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { 42.417415829726188, 20, 2, 
+         0.20000000000000018, 0.0 },
   { -75.621201471396603, 20, 2, 
-         0.30000000000000004 },
-  { 39.902576338912247, 20, 2, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 39.902576338912553, 20, 2, 
+         0.40000000000000013, 0.0 },
   { 24.629090735179489, 20, 2, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { -70.330891533985721, 20, 2, 
-         0.60000000000000009 },
-  { 87.337927630325510, 20, 2, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 87.337927630325453, 20, 2, 
+         0.70000000000000018, 0.0 },
   { -95.849622172549374, 20, 2, 
-         0.80000000000000004 },
-  { 80.812425587310500, 20, 2, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 80.812425587309747, 20, 2, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 20, 2, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler018 = 2.5000000000000020e-13;
 
 // Test data for l=20, m=5.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 1.2805685400962830e-09 at index 14
+// max(|f - f_GSL| / |f_GSL|): 2.0861530799041223e-15
+// mean(f - f_GSL): 1.1641532182693481e-10
+// variance(f - f_GSL): 7.1150767569361226e-22
+// stddev(f - f_GSL): 2.6674101216228678e-11
 const testcase_assoc_legendre<double>
 data019[21] =
 {
   { -0.0000000000000000, 20, 5, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { -315702.32715134218, 20, 5, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 503060.91484852589, 20, 5, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { -298127.28360361955, 20, 5, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -114444.61447464029, 20, 5, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 543428.40914592845, 20, 5, 
-         -0.50000000000000000 },
-  { -613842.07728185470, 20, 5, 
-         -0.40000000000000002 },
-  { 143765.42411270936, 20, 5, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { -613842.07728185481, 20, 5, 
+         -0.39999999999999991, 0.0 },
+  { 143765.42411271061, 20, 5, 
+         -0.29999999999999993, 0.0 },
   { 472600.45321372285, 20, 5, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -563861.76771496492, 20, 5, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 0.0000000000000000, 20, 5, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 563861.76771496458, 20, 5, 
-         0.10000000000000009 },
-  { -472600.45321372285, 20, 5, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -472600.45321372483, 20, 5, 
+         0.20000000000000018, 0.0 },
   { -143765.42411270936, 20, 5, 
-         0.30000000000000004 },
-  { 613842.07728185481, 20, 5, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 613842.07728185353, 20, 5, 
+         0.40000000000000013, 0.0 },
   { -543428.40914592845, 20, 5, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 114444.61447464178, 20, 5, 
-         0.60000000000000009 },
-  { 298127.28360361955, 20, 5, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 298127.28360361519, 20, 5, 
+         0.70000000000000018, 0.0 },
   { -503060.91484852589, 20, 5, 
-         0.80000000000000004 },
-  { 315702.32715134491, 20, 5, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 315702.32715133618, 20, 5, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 20, 5, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler019 = 2.5000000000000020e-13;
 
 // Test data for l=20, m=10.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0039062500000000000 at index 12
+// max(|f - f_GSL| / |f_GSL|): 2.6634565089260680e-15
+// mean(f - f_GSL): -0.00043596540178571431
+// variance(f - f_GSL): 9.9784562846311215e-09
+// stddev(f - f_GSL): 9.9892223344117843e-05
 const testcase_assoc_legendre<double>
 data020[21] =
 {
   { -0.0000000000000000, 20, 10, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 990017476694.99084, 20, 10, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 2392757933281.0498, 20, 10, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { -1548364524949.5808, 20, 10, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -424471915195.05627, 20, 10, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 1744502295946.2073, 20, 10, 
-         -0.50000000000000000 },
-  { -899973487310.55212, 20, 10, 
-         -0.40000000000000002 },
-  { -1092420454297.7161, 20, 10, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { -899973487310.55530, 20, 10, 
+         -0.39999999999999991, 0.0 },
+  { -1092420454297.7119, 20, 10, 
+         -0.29999999999999993, 0.0 },
   { 1466609267659.8816, 20, 10, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 356041756390.71674, 20, 10, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -1612052956674.3164, 20, 10, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 356041756390.71985, 20, 10, 
-         0.10000000000000009 },
-  { 1466609267659.8816, 20, 10, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { 1466609267659.8796, 20, 10, 
+         0.20000000000000018, 0.0 },
   { -1092420454297.7161, 20, 10, 
-         0.30000000000000004 },
-  { -899973487310.55530, 20, 10, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -899973487310.54810, 20, 10, 
+         0.40000000000000013, 0.0 },
   { 1744502295946.2073, 20, 10, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { -424471915195.05896, 20, 10, 
-         0.60000000000000009 },
-  { -1548364524949.5808, 20, 10, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { -1548364524949.5730, 20, 10, 
+         0.70000000000000018, 0.0 },
   { 2392757933281.0498, 20, 10, 
-         0.80000000000000004 },
-  { 990017476694.99316, 20, 10, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 990017476694.98828, 20, 10, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 20, 10, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler020 = 2.5000000000000020e-13;
 
 // Test data for l=20, m=20.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 838860800.00000000 at index 12
+// max(|f - f_GSL| / |f_GSL|): 4.3488507135833189e-15
+// mean(f - f_GSL): -2855497.1428571427
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_assoc_legendre<double>
 data021[21] =
 {
   { 0.0000000000000000, 20, 20, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 19609049712023808., 20, 20, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 1.1693527616833221e+19, 20, 20, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 3.8073455880620691e+20, 20, 20, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 3.6874002249007927e+21, 20, 20, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 1.8010806978179592e+22, 20, 20, 
-         -0.50000000000000000 },
+         -0.50000000000000000, 0.0 },
   { 5.5938832584012466e+22, 20, 20, 
-         -0.40000000000000002 },
-  { 1.2454734132297811e+23, 20, 20, 
-         -0.30000000000000004 },
+         -0.39999999999999991, 0.0 },
+  { 1.2454734132297759e+23, 20, 20, 
+         -0.29999999999999993, 0.0 },
   { 2.1263407800797497e+23, 20, 20, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 2.8924941146976873e+23, 20, 20, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 3.1983098677287775e+23, 20, 20, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 2.8924941146976873e+23, 20, 20, 
-         0.10000000000000009 },
+         0.10000000000000009, 0.0 },
   { 2.1263407800797497e+23, 20, 20, 
-         0.19999999999999996 },
+         0.20000000000000018, 0.0 },
   { 1.2454734132297811e+23, 20, 20, 
-         0.30000000000000004 },
-  { 5.5938832584012466e+22, 20, 20, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 5.5938832584012366e+22, 20, 20, 
+         0.40000000000000013, 0.0 },
   { 1.8010806978179592e+22, 20, 20, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 3.6874002249007807e+21, 20, 20, 
-         0.60000000000000009 },
-  { 3.8073455880620691e+20, 20, 20, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 3.8073455880620343e+20, 20, 20, 
+         0.70000000000000018, 0.0 },
   { 1.1693527616833221e+19, 20, 20, 
-         0.80000000000000004 },
-  { 19609049712024020., 20, 20, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 19609049712023672., 20, 20, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 20, 20, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler021 = 2.5000000000000020e-13;
 
 // Test data for l=50, m=0.
-// max(|f - f_GSL|): 3.6082248300317588e-16
-// max(|f - f_GSL| / |f_GSL|): 2.1700196856209138e-15
+// max(|f - f_GSL|): 1.6653345369377348e-16 at index 2
+// max(|f - f_GSL| / |f_GSL|): 1.6665460706897444e-15
+// mean(f - f_GSL): -8.0953762212251003e-18
+// variance(f - f_GSL): 3.4405935985667807e-36
+// stddev(f - f_GSL): 1.8548837156454796e-18
 const testcase_assoc_legendre<double>
 data022[21] =
 {
   { 1.0000000000000000, 50, 0, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { -0.17003765994383671, 50, 0, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 0.13879737345093113, 50, 0, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { -0.014572731645892852, 50, 0, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -0.058860798844002096, 50, 0, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -0.031059099239609811, 50, 0, 
-         -0.50000000000000000 },
-  { 0.041569033381825375, 50, 0, 
-         -0.40000000000000002 },
-  { 0.10911051574714797, 50, 0, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { 0.041569033381824674, 50, 0, 
+         -0.39999999999999991, 0.0 },
+  { 0.10911051574714790, 50, 0, 
+         -0.29999999999999993, 0.0 },
   { 0.083432272204197494, 50, 0, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -0.038205812661313600, 50, 0, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -0.11227517265921705, 50, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -0.038205812661314155, 50, 0, 
-         0.10000000000000009 },
-  { 0.083432272204197494, 50, 0, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { 0.083432272204196564, 50, 0, 
+         0.20000000000000018, 0.0 },
   { 0.10911051574714797, 50, 0, 
-         0.30000000000000004 },
-  { 0.041569033381824674, 50, 0, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 0.041569033381826007, 50, 0, 
+         0.40000000000000013, 0.0 },
   { -0.031059099239609811, 50, 0, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { -0.058860798844001430, 50, 0, 
-         0.60000000000000009 },
-  { -0.014572731645892852, 50, 0, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { -0.014572731645890737, 50, 0, 
+         0.70000000000000018, 0.0 },
   { 0.13879737345093113, 50, 0, 
-         0.80000000000000004 },
-  { -0.17003765994383657, 50, 0, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { -0.17003765994383679, 50, 0, 
+         0.90000000000000013, 0.0 },
   { 1.0000000000000000, 50, 0, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler022 = 2.5000000000000020e-13;
 
 // Test data for l=50, m=1.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 4.4408920985006262e-15 at index 3
+// max(|f - f_GSL| / |f_GSL|): 6.6657627150738456e-16
+// mean(f - f_GSL): 6.3441315692866085e-17
+// variance(f - f_GSL): 2.1130202818419960e-34
+// stddev(f - f_GSL): 1.4536231567507432e-17
 const testcase_assoc_legendre<double>
 data023[21] =
 {
   { 0.0000000000000000, 50, 1, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { -0.13424149984449490, 50, 1, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 2.2011219672413018, 50, 1, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 6.6622414993232004, 50, 1, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 5.5772846936919249, 50, 1, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 5.8787148815607608, 50, 1, 
-         -0.50000000000000000 },
-  { 5.5473459458633974, 50, 1, 
-         -0.40000000000000002 },
-  { 1.8444956647619930, 50, 1, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { 5.5473459458634080, 50, 1, 
+         -0.39999999999999991, 0.0 },
+  { 1.8444956647620248, 50, 1, 
+         -0.29999999999999993, 0.0 },
   { -3.8722014306642127, 50, 1, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -5.3488751322285628, 50, 1, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -0.0000000000000000, 50, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 5.3488751322285522, 50, 1, 
-         0.10000000000000009 },
-  { 3.8722014306642127, 50, 1, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { 3.8722014306642620, 50, 1, 
+         0.20000000000000018, 0.0 },
   { -1.8444956647619930, 50, 1, 
-         0.30000000000000004 },
-  { -5.5473459458634080, 50, 1, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -5.5473459458633814, 50, 1, 
+         0.40000000000000013, 0.0 },
   { -5.8787148815607608, 50, 1, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { -5.5772846936919453, 50, 1, 
-         0.60000000000000009 },
-  { -6.6622414993232004, 50, 1, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { -6.6622414993232182, 50, 1, 
+         0.70000000000000018, 0.0 },
   { -2.2011219672413018, 50, 1, 
-         0.80000000000000004 },
-  { 0.13424149984462019, 50, 1, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 0.13424149984438935, 50, 1, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 50, 1, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler023 = 2.5000000000000020e-13;
 
 // Test data for l=50, m=2.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 3.0553337637684308e-13 at index 3
+// max(|f - f_GSL| / |f_GSL|): 6.0837685805857877e-15
+// mean(f - f_GSL): -3.3835368369528578e-16
+// variance(f - f_GSL): 6.0103688016838995e-33
+// stddev(f - f_GSL): 7.7526568360039641e-17
 const testcase_assoc_legendre<double>
 data024[21] =
 {
   { 0.0000000000000000, 50, 2, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 433.04168483713511, 50, 2, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { -348.06364372056424, 50, 2, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 50.221071418108444, 50, 2, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 158.46096409274352, 50, 2, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 85.988858299721457, 50, 2, 
-         -0.50000000000000000 },
-  { -101.15891460879270, 50, 2, 
-         -0.40000000000000002 },
-  { -277.07168105316617, 50, 2, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { -101.15891460879088, 50, 2, 
+         -0.39999999999999991, 0.0 },
+  { -277.07168105316526, 50, 2, 
+         -0.29999999999999993, 0.0 },
   { -214.33311373510401, 50, 2, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 96.349657930951665, 50, 2, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 286.30169028100346, 50, 2, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 96.349657930953242, 50, 2, 
-         0.10000000000000009 },
-  { -214.33311373510401, 50, 2, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -214.33311373510165, 50, 2, 
+         0.20000000000000018, 0.0 },
   { -277.07168105316617, 50, 2, 
-         0.30000000000000004 },
-  { -101.15891460879088, 50, 2, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -101.15891460879435, 50, 2, 
+         0.40000000000000013, 0.0 },
   { 85.988858299721457, 50, 2, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 158.46096409274153, 50, 2, 
-         0.60000000000000009 },
-  { 50.221071418108444, 50, 2, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 50.221071418103143, 50, 2, 
+         0.70000000000000018, 0.0 },
   { -348.06364372056424, 50, 2, 
-         0.80000000000000004 },
-  { 433.04168483713374, 50, 2, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 433.04168483713596, 50, 2, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 50, 2, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
-const double toler024 = 2.5000000000000020e-13;
+const double toler024 = 5.0000000000000039e-13;
 
 // Test data for l=50, m=5.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 7.4505805969238281e-08 at index 14
+// max(|f - f_GSL| / |f_GSL|): 2.0088060426072767e-15
+// mean(f - f_GSL): -6.3862119402204238e-09
+// variance(f - f_GSL): 2.1411444046342303e-18
+// stddev(f - f_GSL): 1.4632649810045447e-09
 const testcase_assoc_legendre<double>
 data025[21] =
 {
   { -0.0000000000000000, 50, 5, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { -27340473.952132829, 50, 5, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 27753716.768532373, 50, 5, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 40808153.913493633, 50, 5, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 32071189.035790090, 50, 5, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 36265736.218529105, 50, 5, 
-         -0.50000000000000000 },
-  { 37089596.700204901, 50, 5, 
-         -0.40000000000000002 },
-  { 14562029.629244499, 50, 5, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { 37089596.700204931, 50, 5, 
+         -0.39999999999999991, 0.0 },
+  { 14562029.629244687, 50, 5, 
+         -0.29999999999999993, 0.0 },
   { -23686895.217517190, 50, 5, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -34878992.965676002, 50, 5, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -0.0000000000000000, 50, 5, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 34878992.965675958, 50, 5, 
-         0.10000000000000009 },
-  { 23686895.217517190, 50, 5, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { 23686895.217517529, 50, 5, 
+         0.20000000000000018, 0.0 },
   { -14562029.629244499, 50, 5, 
-         0.30000000000000004 },
-  { -37089596.700204931, 50, 5, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -37089596.700204782, 50, 5, 
+         0.40000000000000013, 0.0 },
   { -36265736.218529105, 50, 5, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { -32071189.035790242, 50, 5, 
-         0.60000000000000009 },
-  { -40808153.913493633, 50, 5, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { -40808153.913493834, 50, 5, 
+         0.70000000000000018, 0.0 },
   { -27753716.768532373, 50, 5, 
-         0.80000000000000004 },
-  { 27340473.952133428, 50, 5, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 27340473.952132136, 50, 5, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 50, 5, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler025 = 2.5000000000000020e-13;
 
 // Test data for l=50, m=10.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 22.000000000000000 at index 3
+// max(|f - f_GSL| / |f_GSL|): 2.2163032493360465e-15
+// mean(f - f_GSL): -1.9821428571428572
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_assoc_legendre<double>
 data026[21] =
 {
   { -0.0000000000000000, 50, 10, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { -8994661710093155.0, 50, 10, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 932311375306569.62, 50, 10, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 12153535011507012., 50, 10, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 12176690755542240., 50, 10, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 9180035388465754.0, 50, 10, 
-         -0.50000000000000000 },
-  { 889201701866910.38, 50, 10, 
-         -0.40000000000000002 },
-  { -9451384032851604.0, 50, 10, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { 889201701866984.00, 50, 10, 
+         -0.39999999999999991, 0.0 },
+  { -9451384032851544.0, 50, 10, 
+         -0.29999999999999993, 0.0 },
   { -9926439446673564.0, 50, 10, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 2794368162749970.5, 50, 10, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 11452238249246346., 50, 10, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 2794368162750031.0, 50, 10, 
-         0.10000000000000009 },
-  { -9926439446673564.0, 50, 10, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -9926439446673506.0, 50, 10, 
+         0.20000000000000018, 0.0 },
   { -9451384032851604.0, 50, 10, 
-         0.30000000000000004 },
-  { 889201701866984.00, 50, 10, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 889201701866835.25, 50, 10, 
+         0.40000000000000013, 0.0 },
   { 9180035388465754.0, 50, 10, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 12176690755542214., 50, 10, 
-         0.60000000000000009 },
-  { 12153535011507012., 50, 10, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 12153535011506908., 50, 10, 
+         0.70000000000000018, 0.0 },
   { 932311375306569.62, 50, 10, 
-         0.80000000000000004 },
-  { -8994661710093362.0, 50, 10, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { -8994661710093013.0, 50, 10, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 50, 10, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler026 = 2.5000000000000020e-13;
 
 // Test data for l=50, m=20.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 3.6028797018963968e+18 at index 14
+// max(|f - f_GSL| / |f_GSL|): 5.0227025739283085e-15
+// mean(f - f_GSL): -1.8529095609752899e+17
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_assoc_legendre<double>
 data027[21] =
 {
   { 0.0000000000000000, 50, 20, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 1.6630925158645501e+33, 50, 20, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 1.0622676657892052e+33, 50, 20, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 8.6022521164717112e+32, 50, 20, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 4.0860128756808466e+32, 50, 20, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -4.0169860814274459e+32, 50, 20, 
-         -0.50000000000000000 },
-  { -8.2324325279774037e+32, 50, 20, 
-         -0.40000000000000002 },
-  { -4.0054067236243731e+31, 50, 20, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { -8.2324325279773994e+32, 50, 20, 
+         -0.39999999999999991, 0.0 },
+  { -4.0054067236247267e+31, 50, 20, 
+         -0.29999999999999993, 0.0 },
   { 7.9309266056434309e+32, 50, 20, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 5.4151358290898977e+31, 50, 20, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -7.8735935697332210e+32, 50, 20, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 5.4151358290894924e+31, 50, 20, 
-         0.10000000000000009 },
-  { 7.9309266056434309e+32, 50, 20, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { 7.9309266056434453e+32, 50, 20, 
+         0.20000000000000018, 0.0 },
   { -4.0054067236243731e+31, 50, 20, 
-         0.30000000000000004 },
-  { -8.2324325279773994e+32, 50, 20, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -8.2324325279773893e+32, 50, 20, 
+         0.40000000000000013, 0.0 },
   { -4.0169860814274459e+32, 50, 20, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 4.0860128756807846e+32, 50, 20, 
-         0.60000000000000009 },
-  { 8.6022521164717112e+32, 50, 20, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 8.6022521164716291e+32, 50, 20, 
+         0.70000000000000018, 0.0 },
   { 1.0622676657892052e+33, 50, 20, 
-         0.80000000000000004 },
-  { 1.6630925158645483e+33, 50, 20, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 1.6630925158645541e+33, 50, 20, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 50, 20, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
-const double toler027 = 2.5000000000000020e-13;
+const double toler027 = 5.0000000000000039e-13;
 
 // Test data for l=50, m=50.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 1.0695779622587839e+64 at index 12
+// max(|f - f_GSL| / |f_GSL|): 1.1061123055945194e-14
+// mean(f - f_GSL): -2.0817504896587826e+62
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_assoc_legendre<double>
 data028[21] =
 {
   { 0.0000000000000000, 50, 50, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 2.5366994974431341e+60, 50, 50, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 2.2028834403101213e+67, 50, 50, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 1.3325496559566651e+71, 50, 50, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 3.8898096431781969e+73, 50, 50, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 2.0509760257037188e+75, 50, 50, 
-         -0.50000000000000000 },
+         -0.50000000000000000, 0.0 },
   { 3.4866724533443283e+76, 50, 50, 
-         -0.40000000000000002 },
-  { 2.5790740224150207e+77, 50, 50, 
-         -0.30000000000000004 },
+         -0.39999999999999991, 0.0 },
+  { 2.5790740224149893e+77, 50, 50, 
+         -0.29999999999999993, 0.0 },
   { 9.8222237931680989e+77, 50, 50, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 2.1198682190366617e+78, 50, 50, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 2.7253921397507295e+78, 50, 50, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 2.1198682190366617e+78, 50, 50, 
-         0.10000000000000009 },
+         0.10000000000000009, 0.0 },
   { 9.8222237931680989e+77, 50, 50, 
-         0.19999999999999996 },
+         0.20000000000000018, 0.0 },
   { 2.5790740224150207e+77, 50, 50, 
-         0.30000000000000004 },
-  { 3.4866724533443283e+76, 50, 50, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 3.4866724533443123e+76, 50, 50, 
+         0.40000000000000013, 0.0 },
   { 2.0509760257037188e+75, 50, 50, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 3.8898096431781724e+73, 50, 50, 
-         0.60000000000000009 },
-  { 1.3325496559566651e+71, 50, 50, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 1.3325496559566344e+71, 50, 50, 
+         0.70000000000000018, 0.0 },
   { 2.2028834403101213e+67, 50, 50, 
-         0.80000000000000004 },
-  { 2.5366994974431990e+60, 50, 50, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 2.5366994974430855e+60, 50, 50, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 50, 50, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
-const double toler028 = 2.5000000000000020e-13;
+const double toler028 = 1.0000000000000008e-12;
 
 // Test data for l=100, m=0.
-// max(|f - f_GSL|): 3.4694469519536142e-16
+// max(|f - f_GSL|): 3.4694469519536142e-16 at index 2
 // max(|f - f_GSL| / |f_GSL|): 6.8214063779431592e-15
+// mean(f - f_GSL): -4.1385545784018113e-17
+// variance(f - f_GSL): 8.9920078491655612e-35
+// stddev(f - f_GSL): 9.4826198116161765e-18
 const testcase_assoc_legendre<double>
 data029[21] =
 {
   { 1.0000000000000000, 100, 0, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 0.10226582055871893, 100, 0, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 0.050861167913584228, 100, 0, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { -0.077132507199778641, 100, 0, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -0.023747023905133141, 100, 0, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -0.060518025961861198, 100, 0, 
-         -0.50000000000000000 },
-  { -0.072258202125684470, 100, 0, 
-         -0.40000000000000002 },
-  { 0.057127392202801566, 100, 0, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { -0.072258202125685025, 100, 0, 
+         -0.39999999999999991, 0.0 },
+  { 0.057127392202801046, 100, 0, 
+         -0.29999999999999993, 0.0 },
   { 0.014681835355659706, 100, 0, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -0.063895098434750205, 100, 0, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 0.079589237387178727, 100, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -0.063895098434749761, 100, 0, 
-         0.10000000000000009 },
-  { 0.014681835355659706, 100, 0, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { 0.014681835355657875, 100, 0, 
+         0.20000000000000018, 0.0 },
   { 0.057127392202801566, 100, 0, 
-         0.30000000000000004 },
-  { -0.072258202125685025, 100, 0, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -0.072258202125684082, 100, 0, 
+         0.40000000000000013, 0.0 },
   { -0.060518025961861198, 100, 0, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { -0.023747023905134217, 100, 0, 
-         0.60000000000000009 },
-  { -0.077132507199778641, 100, 0, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { -0.077132507199780501, 100, 0, 
+         0.70000000000000018, 0.0 },
   { 0.050861167913584228, 100, 0, 
-         0.80000000000000004 },
-  { 0.10226582055871711, 100, 0, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 0.10226582055872063, 100, 0, 
+         0.90000000000000013, 0.0 },
   { 1.0000000000000000, 100, 0, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler029 = 5.0000000000000039e-13;
 
 // Test data for l=100, m=1.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 1.1546319456101628e-14 at index 3
+// max(|f - f_GSL| / |f_GSL|): 2.1111954004946762e-15
+// mean(f - f_GSL): -8.0358999877630379e-16
+// variance(f - f_GSL): 3.3902236521998243e-32
+// stddev(f - f_GSL): 1.8412559985509414e-16
 const testcase_assoc_legendre<double>
 data030[21] =
 {
   { -0.0000000000000000, 100, 1, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 6.5200167187780345, 100, 1, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 9.0065170007027486, 100, 1, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { -5.4690908541180976, 100, 1, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -8.6275439170430790, 100, 1, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -6.0909031663448454, 100, 1, 
-         -0.50000000000000000 },
-  { 4.1160338699561212, 100, 1, 
-         -0.40000000000000002 },
-  { 5.8491043010758013, 100, 1, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { 4.1160338699560395, 100, 1, 
+         -0.39999999999999991, 0.0 },
+  { 5.8491043010758634, 100, 1, 
+         -0.29999999999999993, 0.0 },
   { -7.9435138723089826, 100, 1, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 4.7996285823989355, 100, 1, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 0.0000000000000000, 100, 1, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -4.7996285823990101, 100, 1, 
-         0.10000000000000009 },
-  { 7.9435138723089826, 100, 1, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { 7.9435138723090155, 100, 1, 
+         0.20000000000000018, 0.0 },
   { -5.8491043010758013, 100, 1, 
-         0.30000000000000004 },
-  { -4.1160338699560395, 100, 1, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -4.1160338699562162, 100, 1, 
+         0.40000000000000013, 0.0 },
   { 6.0909031663448454, 100, 1, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 8.6275439170430470, 100, 1, 
-         0.60000000000000009 },
-  { 5.4690908541180976, 100, 1, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 5.4690908541178693, 100, 1, 
+         0.70000000000000018, 0.0 },
   { -9.0065170007027486, 100, 1, 
-         0.80000000000000004 },
-  { -6.5200167187783542, 100, 1, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { -6.5200167187777787, 100, 1, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 100, 1, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler030 = 2.5000000000000020e-13;
 
 // Test data for l=100, m=2.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 6.8212102632969618e-13 at index 5
+// max(|f - f_GSL| / |f_GSL|): 2.0632212207447263e-15
+// mean(f - f_GSL): 8.2558298821649733e-14
+// variance(f - f_GSL): 3.5783331697705263e-28
+// stddev(f - f_GSL): 1.8916482679849673e-14
 const testcase_assoc_legendre<double>
 data031[21] =
 {
   { 0.0000000000000000, 100, 2, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { -1005.9604880761002, 100, 2, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { -489.68041725865947, 100, 2, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 768.31676011669924, 100, 2, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 226.90362556627937, 100, 2, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 604.19889304940341, 100, 2, 
-         -0.50000000000000000 },
-  { 733.40061037838029, 100, 2, 
-         -0.40000000000000002 },
-  { -573.30774483996390, 100, 2, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { 733.40061037838518, 100, 2, 
+         -0.39999999999999991, 0.0 },
+  { -573.30774483995629, 100, 2, 
+         -0.29999999999999993, 0.0 },
   { -151.52946305080880, 100, 2, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 646.30525583587985, 100, 2, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -803.85129761050518, 100, 2, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 646.30525583587439, 100, 2, 
-         0.10000000000000009 },
-  { -151.52946305080880, 100, 2, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -151.52946305079013, 100, 2, 
+         0.20000000000000018, 0.0 },
   { -573.30774483996390, 100, 2, 
-         0.30000000000000004 },
-  { 733.40061037838518, 100, 2, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 733.40061037837552, 100, 2, 
+         0.40000000000000013, 0.0 },
   { 604.19889304940341, 100, 2, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 226.90362556629168, 100, 2, 
-         0.60000000000000009 },
-  { 768.31676011669924, 100, 2, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 768.31676011671766, 100, 2, 
+         0.70000000000000018, 0.0 },
   { -489.68041725865947, 100, 2, 
-         0.80000000000000004 },
-  { -1005.9604880760779, 100, 2, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { -1005.9604880761161, 100, 2, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 100, 2, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler031 = 2.5000000000000020e-13;
 
 // Test data for l=100, m=5.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 1.4305114746093750e-06 at index 14
+// max(|f - f_GSL| / |f_GSL|): 3.7628882298853693e-15
+// mean(f - f_GSL): -5.1089695521763390e-08
+// variance(f - f_GSL): 1.3703324189659077e-16
+// stddev(f - f_GSL): 1.1706119848036358e-08
 const testcase_assoc_legendre<double>
 data032[21] =
 {
   { 0.0000000000000000, 100, 5, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 900551126.09653807, 100, 5, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 988567431.55756140, 100, 5, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { -645646451.90344620, 100, 5, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -897114585.29920685, 100, 5, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -661710744.42483854, 100, 5, 
-         -0.50000000000000000 },
-  { 380163158.51425636, 100, 5, 
-         -0.40000000000000002 },
-  { 617391071.36632574, 100, 5, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { 380163158.51424754, 100, 5, 
+         -0.39999999999999991, 0.0 },
+  { 617391071.36633193, 100, 5, 
+         -0.29999999999999993, 0.0 },
   { -805288801.85509109, 100, 5, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 481041740.16728652, 100, 5, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 0.0000000000000000, 100, 5, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -481041740.16729391, 100, 5, 
-         0.10000000000000009 },
-  { 805288801.85509109, 100, 5, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { 805288801.85509515, 100, 5, 
+         0.20000000000000018, 0.0 },
   { -617391071.36632574, 100, 5, 
-         0.30000000000000004 },
-  { -380163158.51424754, 100, 5, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -380163158.51426536, 100, 5, 
+         0.40000000000000013, 0.0 },
   { 661710744.42483854, 100, 5, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 897114585.29920483, 100, 5, 
-         0.60000000000000009 },
-  { 645646451.90344620, 100, 5, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 645646451.90342283, 100, 5, 
+         0.70000000000000018, 0.0 },
   { -988567431.55756140, 100, 5, 
-         0.80000000000000004 },
-  { -900551126.09655857, 100, 5, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { -900551126.09651637, 100, 5, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 100, 5, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler032 = 2.5000000000000020e-13;
 
 // Test data for l=100, m=10.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 14336.000000000000 at index 14
+// max(|f - f_GSL| / |f_GSL|): 3.4905902237930355e-15
+// mean(f - f_GSL): 341.33333333333331
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_assoc_legendre<double>
 data033[21] =
 {
   { 0.0000000000000000, 100, 10, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 2.5643395957658602e+17, 100, 10, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 1.5778673545673485e+18, 100, 10, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 4.4355048487496801e+18, 100, 10, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { -9.5936111659124288e+17, 100, 10, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 4.2387123021963438e+18, 100, 10, 
-         -0.50000000000000000 },
-  { 8.2370834618426542e+18, 100, 10, 
-         -0.40000000000000002 },
-  { -4.9089358388052941e+18, 100, 10, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { 8.2370834618426767e+18, 100, 10, 
+         -0.39999999999999991, 0.0 },
+  { -4.9089358388051978e+18, 100, 10, 
+         -0.29999999999999993, 0.0 },
   { -2.3468810358091274e+18, 100, 10, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 6.8627855225034568e+18, 100, 10, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -8.2494597181670380e+18, 100, 10, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 6.8627855225034056e+18, 100, 10, 
-         0.10000000000000009 },
-  { -2.3468810358091274e+18, 100, 10, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -2.3468810358089518e+18, 100, 10, 
+         0.20000000000000018, 0.0 },
   { -4.9089358388052941e+18, 100, 10, 
-         0.30000000000000004 },
-  { 8.2370834618426767e+18, 100, 10, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 8.2370834618426112e+18, 100, 10, 
+         0.40000000000000013, 0.0 },
   { 4.2387123021963438e+18, 100, 10, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { -9.5936111659112640e+17, 100, 10, 
-         0.60000000000000009 },
-  { 4.4355048487496801e+18, 100, 10, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 4.4355048487499668e+18, 100, 10, 
+         0.70000000000000018, 0.0 },
   { 1.5778673545673485e+18, 100, 10, 
-         0.80000000000000004 },
-  { 2.5643395957697341e+17, 100, 10, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 2.5643395957630058e+17, 100, 10, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 100, 10, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
 const double toler033 = 2.5000000000000020e-13;
 
 // Test data for l=100, m=20.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 3.9290089137475448e+24 at index 14
+// max(|f - f_GSL| / |f_GSL|): 5.1615589395022552e-15
+// mean(f - f_GSL): -5.0371909150609551e+23
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_assoc_legendre<double>
 data034[21] =
 {
   { 0.0000000000000000, 100, 20, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 7.1604344878780134e+37, 100, 20, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { -8.3963895116962231e+38, 100, 20, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 7.9022236853110145e+38, 100, 20, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 8.2680005574121013e+38, 100, 20, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 3.0750497039999552e+38, 100, 20, 
-         -0.50000000000000000 },
-  { -7.6120586043843889e+38, 100, 20, 
-         -0.40000000000000002 },
-  { 1.1474496891901797e+38, 100, 20, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { -7.6120586043843556e+38, 100, 20, 
+         -0.39999999999999991, 0.0 },
+  { 1.1474496891900921e+38, 100, 20, 
+         -0.29999999999999993, 0.0 },
   { 4.3966251307444241e+38, 100, 20, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { -7.0503266451702591e+38, 100, 20, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 7.7727439836159581e+38, 100, 20, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { -7.0503266451702213e+38, 100, 20, 
-         0.10000000000000009 },
-  { 4.3966251307444241e+38, 100, 20, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { 4.3966251307442783e+38, 100, 20, 
+         0.20000000000000018, 0.0 },
   { 1.1474496891901797e+38, 100, 20, 
-         0.30000000000000004 },
-  { -7.6120586043843556e+38, 100, 20, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { -7.6120586043844176e+38, 100, 20, 
+         0.40000000000000013, 0.0 },
   { 3.0750497039999552e+38, 100, 20, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 8.2680005574120394e+38, 100, 20, 
-         0.60000000000000009 },
-  { 7.9022236853110145e+38, 100, 20, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 7.9022236853108422e+38, 100, 20, 
+         0.70000000000000018, 0.0 },
   { -8.3963895116962231e+38, 100, 20, 
-         0.80000000000000004 },
-  { 7.1604344878812652e+37, 100, 20, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 7.1604344878751847e+37, 100, 20, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 100, 20, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
-const double toler034 = 2.5000000000000020e-13;
+const double toler034 = 5.0000000000000039e-13;
 
 // Test data for l=100, m=50.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 6.8296953242310788e+83 at index 14
+// max(|f - f_GSL| / |f_GSL|): 2.0345950516284159e-14
+// mean(f - f_GSL): 7.0103750947133818e+82
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_assoc_legendre<double>
 data035[21] =
 {
   { 0.0000000000000000, 100, 50, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 9.3231278516893716e+96, 100, 50, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { -1.1029797977454281e+98, 100, 50, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 1.8089333903465606e+97, 100, 50, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 5.9364045925669405e+97, 100, 50, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { -8.2252620339727118e+97, 100, 50, 
-         -0.50000000000000000 },
-  { 7.1431385093739863e+97, 100, 50, 
-         -0.40000000000000002 },
-  { -3.3520602067479344e+97, 100, 50, 
-         -0.30000000000000004 },
+         -0.50000000000000000, 0.0 },
+  { 7.1431385093740728e+97, 100, 50, 
+         -0.39999999999999991, 0.0 },
+  { -3.3520602067479935e+97, 100, 50, 
+         -0.29999999999999993, 0.0 },
   { -2.7791149588121382e+97, 100, 50, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 9.0119338550180417e+97, 100, 50, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { -1.1712145031578381e+98, 100, 50, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 9.0119338550181207e+97, 100, 50, 
-         0.10000000000000009 },
-  { -2.7791149588121382e+97, 100, 50, 
-         0.19999999999999996 },
+         0.10000000000000009, 0.0 },
+  { -2.7791149588123644e+97, 100, 50, 
+         0.20000000000000018, 0.0 },
   { -3.3520602067479344e+97, 100, 50, 
-         0.30000000000000004 },
-  { 7.1431385093740728e+97, 100, 50, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 7.1431385093738816e+97, 100, 50, 
+         0.40000000000000013, 0.0 },
   { -8.2252620339727118e+97, 100, 50, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 5.9364045925668024e+97, 100, 50, 
-         0.60000000000000009 },
-  { 1.8089333903465606e+97, 100, 50, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 1.8089333903469005e+97, 100, 50, 
+         0.70000000000000018, 0.0 },
   { -1.1029797977454281e+98, 100, 50, 
-         0.80000000000000004 },
-  { 9.3231278516894968e+96, 100, 50, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 9.3231278516892938e+96, 100, 50, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 100, 50, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
-const double toler035 = 2.5000000000000020e-13;
+const double toler035 = 2.5000000000000015e-12;
 
 // Test data for l=100, m=100.
-// max(|f - f_GSL|): 0.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 1.9201920817492002e+172 at index 12
+// max(|f - f_GSL| / |f_GSL|): 2.3348104188683898e-14
+// mean(f - f_GSL): -4.0709851490379341e+170
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_assoc_legendre<double>
 data036[21] =
 {
   { 0.0000000000000000, 100, 100, 
-         -1.0000000000000000 },
+         -1.0000000000000000, 0.0 },
   { 5.7751792255758316e+150, 100, 100, 
-         -0.90000000000000002 },
+         -0.90000000000000002, 0.0 },
   { 4.3552236041585515e+164, 100, 100, 
-         -0.80000000000000004 },
+         -0.80000000000000004, 0.0 },
   { 1.5936546850595123e+172, 100, 100, 
-         -0.69999999999999996 },
+         -0.69999999999999996, 0.0 },
   { 1.3579510590289176e+177, 100, 100, 
-         -0.59999999999999998 },
+         -0.59999999999999998, 0.0 },
   { 3.7752749682889513e+180, 100, 100, 
-         -0.50000000000000000 },
+         -0.50000000000000000, 0.0 },
   { 1.0910627330458913e+183, 100, 100, 
-         -0.40000000000000002 },
-  { 5.9697347526822483e+184, 100, 100, 
-         -0.30000000000000004 },
+         -0.39999999999999991, 0.0 },
+  { 5.9697347526821064e+184, 100, 100, 
+         -0.29999999999999993, 0.0 },
   { 8.6585879147526714e+185, 100, 100, 
-         -0.19999999999999996 },
+         -0.19999999999999996, 0.0 },
   { 4.0331571908057011e+186, 100, 100, 
-         -0.099999999999999978 },
+         -0.099999999999999978, 0.0 },
   { 6.6663086700729543e+186, 100, 100, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 4.0331571908057011e+186, 100, 100, 
-         0.10000000000000009 },
+         0.10000000000000009, 0.0 },
   { 8.6585879147526714e+185, 100, 100, 
-         0.19999999999999996 },
+         0.20000000000000018, 0.0 },
   { 5.9697347526822483e+184, 100, 100, 
-         0.30000000000000004 },
-  { 1.0910627330458913e+183, 100, 100, 
-         0.39999999999999991 },
+         0.30000000000000004, 0.0 },
+  { 1.0910627330458797e+183, 100, 100, 
+         0.40000000000000013, 0.0 },
   { 3.7752749682889513e+180, 100, 100, 
-         0.50000000000000000 },
+         0.50000000000000000, 0.0 },
   { 1.3579510590289000e+177, 100, 100, 
-         0.60000000000000009 },
-  { 1.5936546850595123e+172, 100, 100, 
-         0.69999999999999996 },
+         0.60000000000000009, 0.0 },
+  { 1.5936546850594382e+172, 100, 100, 
+         0.70000000000000018, 0.0 },
   { 4.3552236041585515e+164, 100, 100, 
-         0.80000000000000004 },
-  { 5.7751792255761289e+150, 100, 100, 
-         0.89999999999999991 },
+         0.80000000000000004, 0.0 },
+  { 5.7751792255756128e+150, 100, 100, 
+         0.90000000000000013, 0.0 },
   { 0.0000000000000000, 100, 100, 
-         1.0000000000000000 },
+         1.0000000000000000, 0.0 },
 };
-const double toler036 = 2.5000000000000020e-13;
+const double toler036 = 2.5000000000000015e-12;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_assoc_legendre<Tp> (&data)[Num], Tp toler)
+  test(const testcase_assoc_legendre<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
         {
-       const Tp f = std::assoc_legendre(data[i].l, data[i].m,
+       const Ret f = std::assoc_legendre(data[i].l, data[i].m,
                     data[i].x);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index a5ad959..1358c3e 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for x=10.000000000000000.
-// max(|f - f_GSL|): 2.1175823681357508e-21
-// max(|f - f_GSL| / |f_GSL|): 9.9466182377295583e-14
+// max(|f - f_GSL|): 3.5542916945637908e-26 at index 4
+// max(|f - f_GSL| / |f_GSL|): 2.2331030499795109e-14
+// mean(f - f_GSL): -1.0876419730734700e-27
+// variance(f - f_GSL): 1.4090082527689930e-55
+// stddev(f - f_GSL): 3.7536758687571747e-28
 const testcase_beta<double>
 data001[10] =
 {
-  { 1.0825088224469029e-06, 10.000000000000000, 10.000000000000000 },
-  { 4.9925087406346778e-09, 10.000000000000000, 20.000000000000000 },
-  { 1.5729567312509485e-10, 10.000000000000000, 30.000000000000000 },
-  { 1.2168673582561288e-11, 10.000000000000000, 40.000000000000000 },
-  { 1.5916380099863291e-12, 10.000000000000000, 50.000000000000000 },
-  { 2.9408957938463963e-13, 10.000000000000000, 60.000000000000000 },
-  { 6.9411637980691676e-14, 10.000000000000000, 70.000000000000000 },
-  { 1.9665612972502651e-14, 10.000000000000000, 80.000000000000000 },
-  { 6.4187824828154399e-15, 10.000000000000000, 90.000000000000000 },
-  { 2.3455339739604842e-15, 10.000000000000000, 100.00000000000000 },
+  { 1.0825088224469029e-06, 10.000000000000000, 10.000000000000000, 0.0 },
+  { 4.9925087406346778e-09, 10.000000000000000, 20.000000000000000, 0.0 },
+  { 1.5729567312509485e-10, 10.000000000000000, 30.000000000000000, 0.0 },
+  { 1.2168673582561288e-11, 10.000000000000000, 40.000000000000000, 0.0 },
+  { 1.5916380099863291e-12, 10.000000000000000, 50.000000000000000, 0.0 },
+  { 2.9408957938463963e-13, 10.000000000000000, 60.000000000000000, 0.0 },
+  { 6.9411637980691676e-14, 10.000000000000000, 70.000000000000000, 0.0 },
+  { 1.9665612972502651e-14, 10.000000000000000, 80.000000000000000, 0.0 },
+  { 6.4187824828154399e-15, 10.000000000000000, 90.000000000000000, 0.0 },
+  { 2.3455339739604842e-15, 10.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler001 = 5.0000000000000029e-12;
+const double toler001 = 2.5000000000000015e-12;
 
 // Test data for x=20.000000000000000.
-// max(|f - f_GSL|): 1.9025154088719637e-23
-// max(|f - f_GSL| / |f_GSL|): 3.8107402664859521e-15
+// max(|f - f_GSL|): 1.9721522630525295e-31 at index 2
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 1.9831607786682398e-32
+// variance(f - f_GSL): 4.8554947092912269e-65
+// stddev(f - f_GSL): 6.9681379932455613e-33
 const testcase_beta<double>
 data002[10] =
 {
-  { 4.9925087406346778e-09, 20.000000000000000, 10.000000000000000 },
-  { 7.2544445519248436e-13, 20.000000000000000, 20.000000000000000 },
-  { 1.7681885473062028e-15, 20.000000000000000, 30.000000000000000 },
-  { 1.7891885039182335e-17, 20.000000000000000, 40.000000000000000 },
-  { 4.3240677875623635e-19, 20.000000000000000, 50.000000000000000 },
-  { 1.8857342309689050e-20, 20.000000000000000, 60.000000000000000 },
-  { 1.2609804003539998e-21, 20.000000000000000, 70.000000000000000 },
-  { 1.1660809542079041e-22, 20.000000000000000, 80.000000000000000 },
-  { 1.3907944279729071e-23, 20.000000000000000, 90.000000000000000 },
-  { 2.0365059099917614e-24, 20.000000000000000, 100.00000000000000 },
+  { 4.9925087406346778e-09, 20.000000000000000, 10.000000000000000, 0.0 },
+  { 7.2544445519248436e-13, 20.000000000000000, 20.000000000000000, 0.0 },
+  { 1.7681885473062028e-15, 20.000000000000000, 30.000000000000000, 0.0 },
+  { 1.7891885039182335e-17, 20.000000000000000, 40.000000000000000, 0.0 },
+  { 4.3240677875623635e-19, 20.000000000000000, 50.000000000000000, 0.0 },
+  { 1.8857342309689053e-20, 20.000000000000000, 60.000000000000000, 0.0 },
+  { 1.2609804003539998e-21, 20.000000000000000, 70.000000000000000, 0.0 },
+  { 1.1660809542079041e-22, 20.000000000000000, 80.000000000000000, 0.0 },
+  { 1.3907944279729071e-23, 20.000000000000000, 90.000000000000000, 0.0 },
+  { 2.0365059099917614e-24, 20.000000000000000, 100.00000000000000, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
 // Test data for x=30.000000000000000.
-// max(|f - f_GSL|): 9.0472879497987402e-25
-// max(|f - f_GSL| / |f_GSL|): 5.7517716603708290e-15
+// max(|f - f_GSL|): 2.5849394142282115e-26 at index 0
+// max(|f - f_GSL| / |f_GSL|): 1.6433633315345226e-16
+// mean(f - f_GSL): 2.5849591357601703e-27
+// variance(f - f_GSL): 8.2493996710493413e-55
+// stddev(f - f_GSL): 9.0826205860694966e-28
 const testcase_beta<double>
 data003[10] =
 {
-  { 1.5729567312509485e-10, 30.000000000000000, 10.000000000000000 },
-  { 1.7681885473062028e-15, 30.000000000000000, 20.000000000000000 },
-  { 5.6370779640482451e-19, 30.000000000000000, 30.000000000000000 },
-  { 1.0539424603796547e-21, 30.000000000000000, 40.000000000000000 },
-  { 6.0118197777273836e-24, 30.000000000000000, 50.000000000000000 },
-  { 7.4279528553260165e-26, 30.000000000000000, 60.000000000000000 },
-  { 1.6212207780604767e-27, 30.000000000000000, 70.000000000000000 },
-  { 5.4783729715317616e-29, 30.000000000000000, 80.000000000000000 },
-  { 2.6183005659681346e-30, 30.000000000000000, 90.000000000000000 },
-  { 1.6587948222122229e-31, 30.000000000000000, 100.00000000000000 },
+  { 1.5729567312509485e-10, 30.000000000000000, 10.000000000000000, 0.0 },
+  { 1.7681885473062028e-15, 30.000000000000000, 20.000000000000000, 0.0 },
+  { 5.6370779640482451e-19, 30.000000000000000, 30.000000000000000, 0.0 },
+  { 1.0539424603796547e-21, 30.000000000000000, 40.000000000000000, 0.0 },
+  { 6.0118197777273843e-24, 30.000000000000000, 50.000000000000000, 0.0 },
+  { 7.4279528553260153e-26, 30.000000000000000, 60.000000000000000, 0.0 },
+  { 1.6212207780604767e-27, 30.000000000000000, 70.000000000000000, 0.0 },
+  { 5.4783729715317616e-29, 30.000000000000000, 80.000000000000000, 0.0 },
+  { 2.6183005659681346e-30, 30.000000000000000, 90.000000000000000, 0.0 },
+  { 1.6587948222122229e-31, 30.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler003 = 5.0000000000000039e-13;
+const double toler003 = 2.5000000000000020e-13;
 
 // Test data for x=40.000000000000000.
-// max(|f - f_GSL|): 2.6495628995839168e-25
-// max(|f - f_GSL| / |f_GSL|): 2.1773637706750213e-14
+// max(|f - f_GSL|): 3.9012149246802907e-41 at index 4
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): -3.9072897597887440e-42
+// variance(f - f_GSL): 1.8848041017931125e-84
+// stddev(f - f_GSL): 1.3728816780018271e-42
 const testcase_beta<double>
 data004[10] =
 {
-  { 1.2168673582561288e-11, 40.000000000000000, 10.000000000000000 },
-  { 1.7891885039182335e-17, 40.000000000000000, 20.000000000000000 },
-  { 1.0539424603796547e-21, 40.000000000000000, 30.000000000000000 },
-  { 4.6508509140090659e-25, 40.000000000000000, 40.000000000000000 },
-  { 7.5161712118557719e-28, 40.000000000000000, 50.000000000000000 },
-  { 3.0311331979886071e-30, 40.000000000000000, 60.000000000000000 },
-  { 2.4175035070466313e-32, 40.000000000000000, 70.000000000000000 },
-  { 3.2734839142758369e-34, 40.000000000000000, 80.000000000000000 },
-  { 6.7690629601315579e-36, 40.000000000000000, 90.000000000000000 },
-  { 1.9797337118812366e-37, 40.000000000000000, 100.00000000000000 },
+  { 1.2168673582561288e-11, 40.000000000000000, 10.000000000000000, 0.0 },
+  { 1.7891885039182335e-17, 40.000000000000000, 20.000000000000000, 0.0 },
+  { 1.0539424603796547e-21, 40.000000000000000, 30.000000000000000, 0.0 },
+  { 4.6508509140090659e-25, 40.000000000000000, 40.000000000000000, 0.0 },
+  { 7.5161712118557728e-28, 40.000000000000000, 50.000000000000000, 0.0 },
+  { 3.0311331979886071e-30, 40.000000000000000, 60.000000000000000, 0.0 },
+  { 2.4175035070466313e-32, 40.000000000000000, 70.000000000000000, 0.0 },
+  { 3.2734839142758369e-34, 40.000000000000000, 80.000000000000000, 0.0 },
+  { 6.7690629601315579e-36, 40.000000000000000, 90.000000000000000, 0.0 },
+  { 1.9797337118810115e-37, 40.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler004 = 2.5000000000000015e-12;
+const double toler004 = 2.5000000000000020e-13;
 
 // Test data for x=50.000000000000000.
-// max(|f - f_GSL|): 2.4603755039546938e-32
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 3.5542916945637908e-26 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.2331030499795109e-14
+// mean(f - f_GSL): -3.5542916415910235e-27
+// variance(f - f_GSL): 1.5596282806770138e-54
+// stddev(f - f_GSL): 1.2488507839918322e-27
 const testcase_beta<double>
 data005[10] =
 {
-  { 1.5916380099863291e-12, 50.000000000000000, 10.000000000000000 },
-  { 4.3240677875623635e-19, 50.000000000000000, 20.000000000000000 },
-  { 6.0118197777273836e-24, 50.000000000000000, 30.000000000000000 },
-  { 7.5161712118557719e-28, 50.000000000000000, 40.000000000000000 },
-  { 3.9646612085674138e-31, 50.000000000000000, 50.000000000000000 },
-  { 5.8425643906418403e-34, 50.000000000000000, 60.000000000000000 },
-  { 1.8672362180783552e-36, 50.000000000000000, 70.000000000000000 },
-  { 1.0939382296458962e-38, 50.000000000000000, 80.000000000000000 },
-  { 1.0442781609881063e-40, 50.000000000000000, 90.000000000000000 },
-  { 1.4904121110954370e-42, 50.000000000000000, 100.00000000000000 },
+  { 1.5916380099863291e-12, 50.000000000000000, 10.000000000000000, 0.0 },
+  { 4.3240677875623635e-19, 50.000000000000000, 20.000000000000000, 0.0 },
+  { 6.0118197777273843e-24, 50.000000000000000, 30.000000000000000, 0.0 },
+  { 7.5161712118557728e-28, 50.000000000000000, 40.000000000000000, 0.0 },
+  { 3.9646612085674138e-31, 50.000000000000000, 50.000000000000000, 0.0 },
+  { 5.8425643906418403e-34, 50.000000000000000, 60.000000000000000, 0.0 },
+  { 1.8672362180783552e-36, 50.000000000000000, 70.000000000000000, 0.0 },
+  { 1.0939382296458963e-38, 50.000000000000000, 80.000000000000000, 0.0 },
+  { 1.0442781609879874e-40, 50.000000000000000, 90.000000000000000, 0.0 },
+  { 1.4904121110954370e-42, 50.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler005 = 2.5000000000000020e-13;
+const double toler005 = 2.5000000000000015e-12;
 
 // Test data for x=60.000000000000000.
-// max(|f - f_GSL|): 2.1911400503418824e-26
-// max(|f - f_GSL| / |f_GSL|): 7.4505871813842522e-14
+// max(|f - f_GSL|): 9.0876776281460560e-28 at index 0
+// max(|f - f_GSL| / |f_GSL|): 3.0901052826017635e-15
+// mean(f - f_GSL): -9.0876709777057221e-29
+// variance(f - f_GSL): 1.0195773308522824e-57
+// stddev(f - f_GSL): 3.1930821017510377e-29
 const testcase_beta<double>
 data006[10] =
 {
-  { 2.9408957938463963e-13, 60.000000000000000, 10.000000000000000 },
-  { 1.8857342309689050e-20, 60.000000000000000, 20.000000000000000 },
-  { 7.4279528553260165e-26, 60.000000000000000, 30.000000000000000 },
-  { 3.0311331979886071e-30, 60.000000000000000, 40.000000000000000 },
-  { 5.8425643906418403e-34, 60.000000000000000, 50.000000000000000 },
-  { 3.4501231469782229e-37, 60.000000000000000, 60.000000000000000 },
-  { 4.7706855386086599e-40, 60.000000000000000, 70.000000000000000 },
-  { 1.2902663809722593e-42, 60.000000000000000, 80.000000000000000 },
-  { 6.0105571058570508e-45, 60.000000000000000, 90.000000000000000 },
-  { 4.3922898898347209e-47, 60.000000000000000, 100.00000000000000 },
+  { 2.9408957938463963e-13, 60.000000000000000, 10.000000000000000, 0.0 },
+  { 1.8857342309689053e-20, 60.000000000000000, 20.000000000000000, 0.0 },
+  { 7.4279528553260153e-26, 60.000000000000000, 30.000000000000000, 0.0 },
+  { 3.0311331979886071e-30, 60.000000000000000, 40.000000000000000, 0.0 },
+  { 5.8425643906418403e-34, 60.000000000000000, 50.000000000000000, 0.0 },
+  { 3.4501231469782229e-37, 60.000000000000000, 60.000000000000000, 0.0 },
+  { 4.7706855386086599e-40, 60.000000000000000, 70.000000000000000, 0.0 },
+  { 1.2902663809721126e-42, 60.000000000000000, 80.000000000000000, 0.0 },
+  { 6.0105571058570508e-45, 60.000000000000000, 90.000000000000000, 0.0 },
+  { 4.3922898898347209e-47, 60.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler006 = 5.0000000000000029e-12;
+const double toler006 = 2.5000000000000020e-13;
 
 // Test data for x=70.000000000000000.
-// max(|f - f_GSL|): 6.9041106424942953e-27
-// max(|f - f_GSL| / |f_GSL|): 9.9466182377295583e-14
+// max(|f - f_GSL|): 1.7670484276950664e-28 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.5457523825998871e-15
+// mean(f - f_GSL): -1.7670492778129898e-29
+// variance(f - f_GSL): 3.8548927780486536e-59
+// stddev(f - f_GSL): 6.2087782840496516e-30
 const testcase_beta<double>
 data007[10] =
 {
-  { 6.9411637980691676e-14, 70.000000000000000, 10.000000000000000 },
-  { 1.2609804003539998e-21, 70.000000000000000, 20.000000000000000 },
-  { 1.6212207780604767e-27, 70.000000000000000, 30.000000000000000 },
-  { 2.4175035070466313e-32, 70.000000000000000, 40.000000000000000 },
-  { 1.8672362180783552e-36, 70.000000000000000, 50.000000000000000 },
-  { 4.7706855386086599e-40, 70.000000000000000, 60.000000000000000 },
-  { 3.0453137143486369e-43, 70.000000000000000, 70.000000000000000 },
-  { 4.0192274082013779e-46, 70.000000000000000, 80.000000000000000 },
-  { 9.5865870063501807e-49, 70.000000000000000, 90.000000000000000 },
-  { 3.7409127305819802e-51, 70.000000000000000, 100.00000000000000 },
+  { 6.9411637980691676e-14, 70.000000000000000, 10.000000000000000, 0.0 },
+  { 1.2609804003539998e-21, 70.000000000000000, 20.000000000000000, 0.0 },
+  { 1.6212207780604767e-27, 70.000000000000000, 30.000000000000000, 0.0 },
+  { 2.4175035070466313e-32, 70.000000000000000, 40.000000000000000, 0.0 },
+  { 1.8672362180783552e-36, 70.000000000000000, 50.000000000000000, 0.0 },
+  { 4.7706855386086599e-40, 70.000000000000000, 60.000000000000000, 0.0 },
+  { 3.0453137143482908e-43, 70.000000000000000, 70.000000000000000, 0.0 },
+  { 4.0192274082013779e-46, 70.000000000000000, 80.000000000000000, 0.0 },
+  { 9.5865870063501807e-49, 70.000000000000000, 90.000000000000000, 0.0 },
+  { 3.7409127305819802e-51, 70.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler007 = 5.0000000000000029e-12;
+const double toler007 = 2.5000000000000020e-13;
 
 // Test data for x=80.000000000000000.
-// max(|f - f_GSL|): 1.6786960063103131e-27
-// max(|f - f_GSL| / |f_GSL|): 8.5361997546557118e-14
+// max(|f - f_GSL|): 5.3642541555028803e-29 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.7277330043072765e-15
+// mean(f - f_GSL): -5.3642549571904701e-30
+// variance(f - f_GSL): 3.5524976846595722e-60
+// stddev(f - f_GSL): 1.8848070682856566e-30
 const testcase_beta<double>
 data008[10] =
 {
-  { 1.9665612972502651e-14, 80.000000000000000, 10.000000000000000 },
-  { 1.1660809542079041e-22, 80.000000000000000, 20.000000000000000 },
-  { 5.4783729715317616e-29, 80.000000000000000, 30.000000000000000 },
-  { 3.2734839142758369e-34, 80.000000000000000, 40.000000000000000 },
-  { 1.0939382296458962e-38, 80.000000000000000, 50.000000000000000 },
-  { 1.2902663809722593e-42, 80.000000000000000, 60.000000000000000 },
-  { 4.0192274082013779e-46, 80.000000000000000, 70.000000000000000 },
-  { 2.7160590828669411e-49, 80.000000000000000, 80.000000000000000 },
-  { 3.4593773902125368e-52, 80.000000000000000, 90.000000000000000 },
-  { 7.4807039968503468e-55, 80.000000000000000, 100.00000000000000 },
+  { 1.9665612972502651e-14, 80.000000000000000, 10.000000000000000, 0.0 },
+  { 1.1660809542079041e-22, 80.000000000000000, 20.000000000000000, 0.0 },
+  { 5.4783729715317616e-29, 80.000000000000000, 30.000000000000000, 0.0 },
+  { 3.2734839142758369e-34, 80.000000000000000, 40.000000000000000, 0.0 },
+  { 1.0939382296458963e-38, 80.000000000000000, 50.000000000000000, 0.0 },
+  { 1.2902663809721126e-42, 80.000000000000000, 60.000000000000000, 0.0 },
+  { 4.0192274082013779e-46, 80.000000000000000, 70.000000000000000, 0.0 },
+  { 2.7160590828669411e-49, 80.000000000000000, 80.000000000000000, 0.0 },
+  { 3.4593773902125368e-52, 80.000000000000000, 90.000000000000000, 0.0 },
+  { 7.4807039968503468e-55, 80.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler008 = 5.0000000000000029e-12;
+const double toler008 = 2.5000000000000020e-13;
 
 // Test data for x=90.000000000000000.
-// max(|f - f_GSL|): 2.7373473411169110e-28
-// max(|f - f_GSL| / |f_GSL|): 4.2645896608047095e-14
+// max(|f - f_GSL|): 2.4454688061851366e-29 at index 0
+// max(|f - f_GSL| / |f_GSL|): 3.8098639621021905e-15
+// mean(f - f_GSL): -2.4454688799474037e-30
+// variance(f - f_GSL): 7.3831086948039631e-61
+// stddev(f - f_GSL): 8.5925017863274033e-31
 const testcase_beta<double>
 data009[10] =
 {
-  { 6.4187824828154399e-15, 90.000000000000000, 10.000000000000000 },
-  { 1.3907944279729071e-23, 90.000000000000000, 20.000000000000000 },
-  { 2.6183005659681346e-30, 90.000000000000000, 30.000000000000000 },
-  { 6.7690629601315579e-36, 90.000000000000000, 40.000000000000000 },
-  { 1.0442781609881063e-40, 90.000000000000000, 50.000000000000000 },
-  { 6.0105571058570508e-45, 90.000000000000000, 60.000000000000000 },
-  { 9.5865870063501807e-49, 90.000000000000000, 70.000000000000000 },
-  { 3.4593773902125368e-52, 90.000000000000000, 80.000000000000000 },
-  { 2.4416737907558032e-55, 90.000000000000000, 90.000000000000000 },
-  { 3.0238531916564246e-58, 90.000000000000000, 100.00000000000000 },
+  { 6.4187824828154399e-15, 90.000000000000000, 10.000000000000000, 0.0 },
+  { 1.3907944279729071e-23, 90.000000000000000, 20.000000000000000, 0.0 },
+  { 2.6183005659681346e-30, 90.000000000000000, 30.000000000000000, 0.0 },
+  { 6.7690629601315579e-36, 90.000000000000000, 40.000000000000000, 0.0 },
+  { 1.0442781609879874e-40, 90.000000000000000, 50.000000000000000, 0.0 },
+  { 6.0105571058570508e-45, 90.000000000000000, 60.000000000000000, 0.0 },
+  { 9.5865870063501807e-49, 90.000000000000000, 70.000000000000000, 0.0 },
+  { 3.4593773902125368e-52, 90.000000000000000, 80.000000000000000, 0.0 },
+  { 2.4416737907558036e-55, 90.000000000000000, 90.000000000000000, 0.0 },
+  { 3.0238531916564250e-58, 90.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler009 = 2.5000000000000015e-12;
+const double toler009 = 2.5000000000000020e-13;
 
 // Test data for x=100.00000000000000.
-// max(|f - f_GSL|): 1.6960509462251754e-29
-// max(|f - f_GSL| / |f_GSL|): 7.2309800883478868e-15
+// max(|f - f_GSL|): 1.9327092177914789e-29 at index 0
+// max(|f - f_GSL| / |f_GSL|): 8.2399540541638715e-15
+// mean(f - f_GSL): -1.9327092238526215e-30
+// variance(f - f_GSL): 4.6115616592160521e-61
+// stddev(f - f_GSL): 6.7908480024339023e-31
 const testcase_beta<double>
 data010[10] =
 {
-  { 2.3455339739604842e-15, 100.00000000000000, 10.000000000000000 },
-  { 2.0365059099917614e-24, 100.00000000000000, 20.000000000000000 },
-  { 1.6587948222122229e-31, 100.00000000000000, 30.000000000000000 },
-  { 1.9797337118812366e-37, 100.00000000000000, 40.000000000000000 },
-  { 1.4904121110954370e-42, 100.00000000000000, 50.000000000000000 },
-  { 4.3922898898347209e-47, 100.00000000000000, 60.000000000000000 },
-  { 3.7409127305819802e-51, 100.00000000000000, 70.000000000000000 },
-  { 7.4807039968503468e-55, 100.00000000000000, 80.000000000000000 },
-  { 3.0238531916564246e-58, 100.00000000000000, 90.000000000000000 },
-  { 2.2087606931991853e-61, 100.00000000000000, 100.00000000000000 },
+  { 2.3455339739604842e-15, 100.00000000000000, 10.000000000000000, 0.0 },
+  { 2.0365059099917614e-24, 100.00000000000000, 20.000000000000000, 0.0 },
+  { 1.6587948222122229e-31, 100.00000000000000, 30.000000000000000, 0.0 },
+  { 1.9797337118810115e-37, 100.00000000000000, 40.000000000000000, 0.0 },
+  { 1.4904121110954370e-42, 100.00000000000000, 50.000000000000000, 0.0 },
+  { 4.3922898898347209e-47, 100.00000000000000, 60.000000000000000, 0.0 },
+  { 3.7409127305819802e-51, 100.00000000000000, 70.000000000000000, 0.0 },
+  { 7.4807039968503468e-55, 100.00000000000000, 80.000000000000000, 0.0 },
+  { 3.0238531916564250e-58, 100.00000000000000, 90.000000000000000, 0.0 },
+  { 2.2087606931991849e-61, 100.00000000000000, 100.00000000000000, 0.0 },
 };
 const double toler010 = 5.0000000000000039e-13;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_beta<Tp> (&data)[Num], Tp toler)
+  test(const testcase_beta<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::beta(data[i].x, data[i].y);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::beta(data[i].x, data[i].y);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index 0c8058b..c30be86 100644 (file)
 #include <specfun_testcase.h>
 
 // Test data.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.0617918857203532e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 18
+// max(|f - f_Boost| / |f_Boost|): 1.9472906870017937e-16
+// mean(f - f_Boost): -1.1686558153949016e-17
+// variance(f - f_Boost): 1.2181788466954587e-32
+// stddev(f - f_Boost): 1.1037113964689586e-16
 const testcase_comp_ellint_1<double>
 data001[19] =
 {
-  { 2.2805491384227703, -0.90000000000000002 },
-  { 1.9953027776647296, -0.80000000000000004 },
-  { 1.8456939983747236, -0.69999999999999996 },
-  { 1.7507538029157526, -0.59999999999999998 },
-  { 1.6857503548125963, -0.50000000000000000 },
-  { 1.6399998658645112, -0.40000000000000002 },
-  { 1.6080486199305128, -0.30000000000000004 },
-  { 1.5868678474541660, -0.19999999999999996 },
-  { 1.5747455615173562, -0.099999999999999978 },
-  { 1.5707963267948966, 0.0000000000000000 },
-  { 1.5747455615173562, 0.10000000000000009 },
-  { 1.5868678474541660, 0.19999999999999996 },
-  { 1.6080486199305128, 0.30000000000000004 },
-  { 1.6399998658645112, 0.39999999999999991 },
-  { 1.6857503548125963, 0.50000000000000000 },
-  { 1.7507538029157526, 0.60000000000000009 },
-  { 1.8456939983747236, 0.69999999999999996 },
-  { 1.9953027776647296, 0.80000000000000004 },
-  { 2.2805491384227703, 0.89999999999999991 },
+  { 2.2805491384227703, -0.90000000000000002, 0.0 },
+  { 1.9953027776647294, -0.80000000000000004, 0.0 },
+  { 1.8456939983747234, -0.69999999999999996, 0.0 },
+  { 1.7507538029157526, -0.59999999999999998, 0.0 },
+  { 1.6857503548125961, -0.50000000000000000, 0.0 },
+  { 1.6399998658645112, -0.39999999999999991, 0.0 },
+  { 1.6080486199305128, -0.29999999999999993, 0.0 },
+  { 1.5868678474541662, -0.19999999999999996, 0.0 },
+  { 1.5747455615173560, -0.099999999999999978, 0.0 },
+  { 1.5707963267948966, 0.0000000000000000, 0.0 },
+  { 1.5747455615173560, 0.10000000000000009, 0.0 },
+  { 1.5868678474541662, 0.20000000000000018, 0.0 },
+  { 1.6080486199305128, 0.30000000000000004, 0.0 },
+  { 1.6399998658645112, 0.40000000000000013, 0.0 },
+  { 1.6857503548125961, 0.50000000000000000, 0.0 },
+  { 1.7507538029157526, 0.60000000000000009, 0.0 },
+  { 1.8456939983747238, 0.70000000000000018, 0.0 },
+  { 1.9953027776647294, 0.80000000000000004, 0.0 },
+  { 2.2805491384227707, 0.90000000000000013, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_comp_ellint_1<Tp> (&data)[Num], Tp toler)
+  test(const testcase_comp_ellint_1<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::comp_ellint_1(data[i].k);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::comp_ellint_1(data[i].k);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index c20ec7c..3f7dbc7 100644 (file)
 #include <specfun_testcase.h>
 
 // Test data.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.4233707954398090e-16
+// max(|f - f_Boost|): 1.1102230246251565e-15 at index 13
+// max(|f - f_Boost| / |f_Boost|): 7.3722846590663481e-16
+// mean(f - f_Boost): 1.7529837230923525e-16
+// variance(f - f_Boost): 1.8020397140465364e-33
+// stddev(f - f_Boost): 4.2450438325729176e-17
 const testcase_comp_ellint_2<double>
 data001[19] =
 {
-  { 1.1716970527816140, -0.90000000000000002 },
-  { 1.2763499431699064, -0.80000000000000004 },
-  { 1.3556611355719554, -0.69999999999999996 },
-  { 1.4180833944487241, -0.59999999999999998 },
-  { 1.4674622093394274, -0.50000000000000000 },
-  { 1.5059416123600402, -0.40000000000000002 },
-  { 1.5348334649232491, -0.30000000000000004 },
-  { 1.5549685462425291, -0.19999999999999996 },
-  { 1.5668619420216685, -0.099999999999999978 },
-  { 1.5707963267948966, 0.0000000000000000 },
-  { 1.5668619420216685, 0.10000000000000009 },
-  { 1.5549685462425291, 0.19999999999999996 },
-  { 1.5348334649232491, 0.30000000000000004 },
-  { 1.5059416123600404, 0.39999999999999991 },
-  { 1.4674622093394274, 0.50000000000000000 },
-  { 1.4180833944487241, 0.60000000000000009 },
-  { 1.3556611355719554, 0.69999999999999996 },
-  { 1.2763499431699064, 0.80000000000000004 },
-  { 1.1716970527816144, 0.89999999999999991 },
+  { 1.1716970527816142, -0.90000000000000002, 0.0 },
+  { 1.2763499431699064, -0.80000000000000004, 0.0 },
+  { 1.3556611355719554, -0.69999999999999996, 0.0 },
+  { 1.4180833944487243, -0.59999999999999998, 0.0 },
+  { 1.4674622093394272, -0.50000000000000000, 0.0 },
+  { 1.5059416123600404, -0.39999999999999991, 0.0 },
+  { 1.5348334649232491, -0.29999999999999993, 0.0 },
+  { 1.5549685462425293, -0.19999999999999996, 0.0 },
+  { 1.5668619420216683, -0.099999999999999978, 0.0 },
+  { 1.5707963267948966, 0.0000000000000000, 0.0 },
+  { 1.5668619420216683, 0.10000000000000009, 0.0 },
+  { 1.5549685462425293, 0.20000000000000018, 0.0 },
+  { 1.5348334649232491, 0.30000000000000004, 0.0 },
+  { 1.5059416123600402, 0.40000000000000013, 0.0 },
+  { 1.4674622093394272, 0.50000000000000000, 0.0 },
+  { 1.4180833944487241, 0.60000000000000009, 0.0 },
+  { 1.3556611355719554, 0.70000000000000018, 0.0 },
+  { 1.2763499431699064, 0.80000000000000004, 0.0 },
+  { 1.1716970527816140, 0.90000000000000013, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_comp_ellint_2<Tp> (&data)[Num], Tp toler)
+  test(const testcase_comp_ellint_2<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::comp_ellint_2(data[i].k);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::comp_ellint_2(data[i].k);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index 1a3dbac..8594d44 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for k=-0.90000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 2.6751587294384150e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 5
+// max(|f - f_Boost| / |f_Boost|): 1.2838262090802751e-16
+// mean(f - f_Boost): 4.4408920985006264e-17
+// variance(f - f_Boost): 2.4347558803117648e-34
+// stddev(f - f_Boost): 1.5603704304785339e-17
 const testcase_comp_ellint_3<double>
 data001[10] =
 {
-  { 2.2805491384227703, -0.90000000000000002, 0.0000000000000000 },
-  { 2.1537868513875287, -0.90000000000000002, 0.10000000000000001 },
-  { 2.0443194576468890, -0.90000000000000002, 0.20000000000000001 },
-  { 1.9486280260314426, -0.90000000000000002, 0.29999999999999999 },
-  { 1.8641114227238349, -0.90000000000000002, 0.40000000000000002 },
-  { 1.7888013241937861, -0.90000000000000002, 0.50000000000000000 },
-  { 1.7211781128919523, -0.90000000000000002, 0.59999999999999998 },
-  { 1.6600480747670940, -0.90000000000000002, 0.69999999999999996 },
-  { 1.6044591960982202, -0.90000000000000002, 0.80000000000000004 },
-  { 1.5536420236310946, -0.90000000000000002, 0.90000000000000002 },
+  { 2.2805491384227703, -0.90000000000000002, 0.0000000000000000, 0.0 },
+  { 2.4295011187834885, -0.90000000000000002, 0.10000000000000001, 0.0 },
+  { 2.6076835743348412, -0.90000000000000002, 0.20000000000000001, 0.0 },
+  { 2.8256506968858512, -0.90000000000000002, 0.30000000000000004, 0.0 },
+  { 3.1000689868578619, -0.90000000000000002, 0.40000000000000002, 0.0 },
+  { 3.4591069002104677, -0.90000000000000002, 0.50000000000000000, 0.0 },
+  { 3.9549939883570229, -0.90000000000000002, 0.60000000000000009, 0.0 },
+  { 4.6985482312992435, -0.90000000000000002, 0.70000000000000007, 0.0 },
+  { 5.9820740813645710, -0.90000000000000002, 0.80000000000000004, 0.0 },
+  { 8.9942562031858699, -0.90000000000000002, 0.90000000000000002, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 1.5960830388244336e-16
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.1949393471095187e-16
+// mean(f - f_Boost): 9.5479180117763459e-16
+// variance(f - f_Boost): 5.4782007307014711e-34
+// stddev(f - f_Boost): 2.3405556457178006e-17
 const testcase_comp_ellint_3<double>
 data002[10] =
 {
-  { 1.9953027776647296, -0.80000000000000004, 0.0000000000000000 },
-  { 1.8910755418379521, -0.80000000000000004, 0.10000000000000001 },
-  { 1.8007226661734588, -0.80000000000000004, 0.20000000000000001 },
-  { 1.7214611048717301, -0.80000000000000004, 0.29999999999999999 },
-  { 1.6512267838651289, -0.80000000000000004, 0.40000000000000002 },
-  { 1.5884528947755532, -0.80000000000000004, 0.50000000000000000 },
-  { 1.5319262547427865, -0.80000000000000004, 0.59999999999999998 },
-  { 1.4806912324625332, -0.80000000000000004, 0.69999999999999996 },
-  { 1.4339837018309471, -0.80000000000000004, 0.80000000000000004 },
-  { 1.3911845406776222, -0.80000000000000004, 0.90000000000000002 },
+  { 1.9953027776647294, -0.80000000000000004, 0.0000000000000000, 0.0 },
+  { 2.1172616484005085, -0.80000000000000004, 0.10000000000000001, 0.0 },
+  { 2.2624789434186798, -0.80000000000000004, 0.20000000000000001, 0.0 },
+  { 2.4392042002725698, -0.80000000000000004, 0.30000000000000004, 0.0 },
+  { 2.6604037035529728, -0.80000000000000004, 0.40000000000000002, 0.0 },
+  { 2.9478781158239751, -0.80000000000000004, 0.50000000000000000, 0.0 },
+  { 3.3418121892288055, -0.80000000000000004, 0.60000000000000009, 0.0 },
+  { 3.9268876980046397, -0.80000000000000004, 0.70000000000000007, 0.0 },
+  { 4.9246422058196071, -0.80000000000000004, 0.80000000000000004, 0.0 },
+  { 7.2263259298637132, -0.80000000000000004, 0.90000000000000002, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3074070916136724e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 3
+// max(|f - f_Boost| / |f_Boost|): 1.9832236886714888e-16
+// mean(f - f_Boost): -1.5543122344752191e-16
+// variance(f - f_Boost): 2.9825759533819119e-33
+// stddev(f - f_Boost): 5.4612965066748680e-17
 const testcase_comp_ellint_3<double>
 data003[10] =
 {
-  { 1.8456939983747236, -0.69999999999999996, 0.0000000000000000 },
-  { 1.7528050171757608, -0.69999999999999996, 0.10000000000000001 },
-  { 1.6721098780092145, -0.69999999999999996, 0.20000000000000001 },
-  { 1.6011813647733213, -0.69999999999999996, 0.29999999999999999 },
-  { 1.5382162002954762, -0.69999999999999996, 0.40000000000000002 },
-  { 1.4818433192178544, -0.69999999999999996, 0.50000000000000000 },
-  { 1.4309994736080540, -0.69999999999999996, 0.59999999999999998 },
-  { 1.3848459188329196, -0.69999999999999996, 0.69999999999999996 },
-  { 1.3427110650397531, -0.69999999999999996, 0.80000000000000004 },
-  { 1.3040500499695913, -0.69999999999999996, 0.90000000000000002 },
+  { 1.8456939983747234, -0.69999999999999996, 0.0000000000000000, 0.0 },
+  { 1.9541347343119564, -0.69999999999999996, 0.10000000000000001, 0.0 },
+  { 2.0829290325820202, -0.69999999999999996, 0.20000000000000001, 0.0 },
+  { 2.2392290510988535, -0.69999999999999996, 0.30000000000000004, 0.0 },
+  { 2.4342502915307880, -0.69999999999999996, 0.40000000000000002, 0.0 },
+  { 2.6868019968236996, -0.69999999999999996, 0.50000000000000000, 0.0 },
+  { 3.0314573496746742, -0.69999999999999996, 0.60000000000000009, 0.0 },
+  { 3.5408408771788564, -0.69999999999999996, 0.70000000000000007, 0.0 },
+  { 4.4042405729076961, -0.69999999999999996, 0.80000000000000004, 0.0 },
+  { 6.3796094177887754, -0.69999999999999996, 0.90000000000000002, 0.0 },
 };
 const double toler003 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1891472451898755e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 2
+// max(|f - f_Boost| / |f_Boost|): 2.2547200163366559e-16
+// mean(f - f_Boost): -1.9984014443252818e-16
+// variance(f - f_Boost): 4.9303806576313241e-33
+// stddev(f - f_Boost): 7.0216669371534022e-17
 const testcase_comp_ellint_3<double>
 data004[10] =
 {
-  { 1.7507538029157526, -0.59999999999999998, 0.0000000000000000 },
-  { 1.6648615773343014, -0.59999999999999998, 0.10000000000000001 },
-  { 1.5901418016279374, -0.59999999999999998, 0.20000000000000001 },
-  { 1.5243814243493585, -0.59999999999999998, 0.29999999999999999 },
-  { 1.4659345278069984, -0.59999999999999998, 0.40000000000000002 },
-  { 1.4135484285693078, -0.59999999999999998, 0.50000000000000000 },
-  { 1.3662507535812816, -0.59999999999999998, 0.59999999999999998 },
-  { 1.3232737468822813, -0.59999999999999998, 0.69999999999999996 },
-  { 1.2840021261752192, -0.59999999999999998, 0.80000000000000004 },
-  { 1.2479362973851875, -0.59999999999999998, 0.90000000000000002 },
+  { 1.7507538029157526, -0.59999999999999998, 0.0000000000000000, 0.0 },
+  { 1.8508766487100685, -0.59999999999999998, 0.10000000000000001, 0.0 },
+  { 1.9695980282802217, -0.59999999999999998, 0.20000000000000001, 0.0 },
+  { 2.1134154405060599, -0.59999999999999998, 0.30000000000000004, 0.0 },
+  { 2.2925036420985130, -0.59999999999999998, 0.40000000000000002, 0.0 },
+  { 2.5239007084492711, -0.59999999999999998, 0.50000000000000000, 0.0 },
+  { 2.8388723099514972, -0.59999999999999998, 0.60000000000000009, 0.0 },
+  { 3.3029735898397159, -0.59999999999999998, 0.70000000000000007, 0.0 },
+  { 4.0867036409261832, -0.59999999999999998, 0.80000000000000004, 0.0 },
+  { 5.8709993116265604, -0.59999999999999998, 0.90000000000000002, 0.0 },
 };
 const double toler004 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 1.7857620325589816e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 3
+// max(|f - f_Boost| / |f_Boost|): 2.1900131385114407e-16
+// mean(f - f_Boost): 2.4424906541753446e-16
+// variance(f - f_Boost): 7.3651365379430888e-33
+// stddev(f - f_Boost): 8.5820373676319358e-17
 const testcase_comp_ellint_3<double>
 data005[10] =
 {
-  { 1.6857503548125963, -0.50000000000000000, 0.0000000000000000 },
-  { 1.6045524936084892, -0.50000000000000000, 0.10000000000000001 },
-  { 1.5338490483665983, -0.50000000000000000, 0.20000000000000001 },
-  { 1.4715681939859637, -0.50000000000000000, 0.29999999999999999 },
-  { 1.4161679518465340, -0.50000000000000000, 0.40000000000000002 },
-  { 1.3664739530045971, -0.50000000000000000, 0.50000000000000000 },
-  { 1.3215740290190876, -0.50000000000000000, 0.59999999999999998 },
-  { 1.2807475181182502, -0.50000000000000000, 0.69999999999999996 },
-  { 1.2434165408189539, -0.50000000000000000, 0.80000000000000004 },
-  { 1.2091116095504744, -0.50000000000000000, 0.90000000000000002 },
+  { 1.6857503548125961, -0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 1.7803034946545482, -0.50000000000000000, 0.10000000000000001, 0.0 },
+  { 1.8922947612264021, -0.50000000000000000, 0.20000000000000001, 0.0 },
+  { 2.0277924458111314, -0.50000000000000000, 0.30000000000000004, 0.0 },
+  { 2.1962905366178065, -0.50000000000000000, 0.40000000000000002, 0.0 },
+  { 2.4136715042011945, -0.50000000000000000, 0.50000000000000000, 0.0 },
+  { 2.7090491861753558, -0.50000000000000000, 0.60000000000000009, 0.0 },
+  { 3.1433945297859229, -0.50000000000000000, 0.70000000000000007, 0.0 },
+  { 3.8750701888108070, -0.50000000000000000, 0.80000000000000004, 0.0 },
+  { 5.5355132096026463, -0.50000000000000000, 0.90000000000000002, 0.0 },
 };
 const double toler005 = 2.5000000000000020e-13;
 
-// Test data for k=-0.40000000000000002.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.1925080711125793e-16
+// Test data for k=-0.39999999999999991.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.1718164615986397e-16
+// mean(f - f_Boost): 6.2172489379008762e-16
+// variance(f - f_Boost): 1.6458949750907531e-31
+// stddev(f - f_Boost): 4.0569631192441877e-16
 const testcase_comp_ellint_3<double>
 data006[10] =
 {
-  { 1.6399998658645112, -0.40000000000000002, 0.0000000000000000 },
-  { 1.5620566886683604, -0.40000000000000002, 0.10000000000000001 },
-  { 1.4941414344266770, -0.40000000000000002, 0.20000000000000001 },
-  { 1.4342789859950078, -0.40000000000000002, 0.29999999999999999 },
-  { 1.3809986210732901, -0.40000000000000002, 0.40000000000000002 },
-  { 1.3331797176377398, -0.40000000000000002, 0.50000000000000000 },
-  { 1.2899514672527024, -0.40000000000000002, 0.59999999999999998 },
-  { 1.2506255923253344, -0.40000000000000002, 0.69999999999999996 },
-  { 1.2146499565727209, -0.40000000000000002, 0.80000000000000004 },
-  { 1.1815758115929846, -0.40000000000000002, 0.90000000000000002 },
+  { 1.6399998658645112, -0.39999999999999991, 0.0000000000000000, 0.0 },
+  { 1.7306968836847190, -0.39999999999999991, 0.10000000000000001, 0.0 },
+  { 1.8380358826317627, -0.39999999999999991, 0.20000000000000001, 0.0 },
+  { 1.9677924132520139, -0.39999999999999991, 0.30000000000000004, 0.0 },
+  { 2.1289968719280026, -0.39999999999999991, 0.40000000000000002, 0.0 },
+  { 2.3367461373176512, -0.39999999999999991, 0.50000000000000000, 0.0 },
+  { 2.6186940209850191, -0.39999999999999991, 0.60000000000000009, 0.0 },
+  { 3.0327078743873246, -0.39999999999999991, 0.70000000000000007, 0.0 },
+  { 3.7289548002199902, -0.39999999999999991, 0.80000000000000004, 0.0 },
+  { 5.3055535102872513, -0.39999999999999991, 0.90000000000000002, 0.0 },
 };
 const double toler006 = 2.5000000000000020e-13;
 
-// Test data for k=-0.30000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8209844149902043e-16
+// Test data for k=-0.29999999999999993.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.9274792319434433e-16
+// mean(f - f_Boost): 6.2172489379008762e-16
+// variance(f - f_Boost): 8.7651211691223537e-33
+// stddev(f - f_Boost): 9.3622225828712025e-17
 const testcase_comp_ellint_3<double>
 data007[10] =
 {
-  { 1.6080486199305128, -0.30000000000000004, 0.0000000000000000 },
-  { 1.5323534693557528, -0.30000000000000004, 0.10000000000000001 },
-  { 1.4663658145259877, -0.30000000000000004, 0.20000000000000001 },
-  { 1.4081767433479091, -0.30000000000000004, 0.29999999999999999 },
-  { 1.3563643538969763, -0.30000000000000004, 0.40000000000000002 },
-  { 1.3098448759814962, -0.30000000000000004, 0.50000000000000000 },
-  { 1.2677758800420669, -0.30000000000000004, 0.59999999999999998 },
-  { 1.2294913236274982, -0.30000000000000004, 0.69999999999999996 },
-  { 1.1944567571590048, -0.30000000000000004, 0.80000000000000004 },
-  { 1.1622376896064914, -0.30000000000000004, 0.90000000000000002 },
+  { 1.6080486199305128, -0.29999999999999993, 0.0000000000000000, 0.0 },
+  { 1.6960848815118226, -0.29999999999999993, 0.10000000000000001, 0.0 },
+  { 1.8002173372290500, -0.29999999999999993, 0.20000000000000001, 0.0 },
+  { 1.9260216862473254, -0.29999999999999993, 0.30000000000000004, 0.0 },
+  { 2.0822121773175533, -0.29999999999999993, 0.40000000000000002, 0.0 },
+  { 2.2833505881933971, -0.29999999999999993, 0.50000000000000000, 0.0 },
+  { 2.5560975528589065, -0.29999999999999993, 0.60000000000000009, 0.0 },
+  { 2.9562123549913877, -0.29999999999999993, 0.70000000000000007, 0.0 },
+  { 3.6283050484567170, -0.29999999999999993, 0.80000000000000004, 0.0 },
+  { 5.1479514944016795, -0.29999999999999993, 0.90000000000000002, 0.0 },
 };
 const double toler007 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8637687241174905e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.9753938705764407e-16
+// mean(f - f_Boost): 3.1086244689504381e-16
+// variance(f - f_Boost): 4.1147374377268827e-32
+// stddev(f - f_Boost): 2.0284815596220939e-16
 const testcase_comp_ellint_3<double>
 data008[10] =
 {
-  { 1.5868678474541660, -0.19999999999999996, 0.0000000000000000 },
-  { 1.5126513474261087, -0.19999999999999996, 0.10000000000000001 },
-  { 1.4479323932249564, -0.19999999999999996, 0.20000000000000001 },
-  { 1.3908453514752477, -0.19999999999999996, 0.29999999999999999 },
-  { 1.3400002519661005, -0.19999999999999996, 0.40000000000000002 },
-  { 1.2943374404397372, -0.19999999999999996, 0.50000000000000000 },
-  { 1.2530330675914556, -0.19999999999999996, 0.59999999999999998 },
-  { 1.2154356555075863, -0.19999999999999996, 0.69999999999999996 },
-  { 1.1810223448909909, -0.19999999999999996, 0.80000000000000004 },
-  { 1.1493679916141861, -0.19999999999999996, 0.90000000000000002 },
+  { 1.5868678474541662, -0.19999999999999996, 0.0000000000000000, 0.0 },
+  { 1.6731552050562593, -0.19999999999999996, 0.10000000000000001, 0.0 },
+  { 1.7751816279738935, -0.19999999999999996, 0.20000000000000001, 0.0 },
+  { 1.8983924169967101, -0.19999999999999996, 0.30000000000000004, 0.0 },
+  { 2.0512956926676806, -0.19999999999999996, 0.40000000000000002, 0.0 },
+  { 2.2481046259421302, -0.19999999999999996, 0.50000000000000000, 0.0 },
+  { 2.5148333891629315, -0.19999999999999996, 0.60000000000000009, 0.0 },
+  { 2.9058704854500967, -0.19999999999999996, 0.70000000000000007, 0.0 },
+  { 3.5622166386422633, -0.19999999999999996, 0.80000000000000004, 0.0 },
+  { 5.0448269356200370, -0.19999999999999996, 0.90000000000000002, 0.0 },
 };
 const double toler008 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8887517676790089e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 5
+// max(|f - f_Boost| / |f_Boost|): 1.9932308021417639e-16
+// mean(f - f_Boost): 0.0000000000000000
+// variance(f - f_Boost): 6.8368087769470551e-64
+// stddev(f - f_Boost): 2.6147291976315738e-32
 const testcase_comp_ellint_3<double>
 data009[10] =
 {
-  { 1.5747455615173562, -0.099999999999999978, 0.0000000000000000 },
-  { 1.5013711111199950, -0.099999999999999978, 0.10000000000000001 },
-  { 1.4373749386463430, -0.099999999999999978, 0.20000000000000001 },
-  { 1.3809159606704959, -0.099999999999999978, 0.29999999999999999 },
-  { 1.3306223265207477, -0.099999999999999978, 0.40000000000000002 },
-  { 1.2854480708580160, -0.099999999999999978, 0.50000000000000000 },
-  { 1.2445798942989255, -0.099999999999999978, 0.59999999999999998 },
-  { 1.2073745911083185, -0.099999999999999978, 0.69999999999999996 },
-  { 1.1733158866987732, -0.099999999999999978, 0.80000000000000004 },
-  { 1.1419839485283374, -0.099999999999999978, 0.90000000000000002 },
+  { 1.5747455615173560, -0.099999999999999978, 0.0000000000000000, 0.0 },
+  { 1.6600374067558428, -0.099999999999999978, 0.10000000000000001, 0.0 },
+  { 1.7608656115083421, -0.099999999999999978, 0.20000000000000001, 0.0 },
+  { 1.8826015946315438, -0.099999999999999978, 0.30000000000000004, 0.0 },
+  { 2.0336367403076760, -0.099999999999999978, 0.40000000000000002, 0.0 },
+  { 2.2279868912966849, -0.099999999999999978, 0.50000000000000000, 0.0 },
+  { 2.4913004919173827, -0.099999999999999978, 0.60000000000000009, 0.0 },
+  { 2.8771910188009744, -0.099999999999999978, 0.70000000000000007, 0.0 },
+  { 3.5246199613295617, -0.099999999999999978, 0.80000000000000004, 0.0 },
+  { 4.9862890417305508, -0.099999999999999978, 0.90000000000000002, 0.0 },
 };
 const double toler009 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 1.6725702444488137e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 2.1899085000907084e-16
+// mean(f - f_Boost): -2.2204460492503131e-16
+// variance(f - f_Boost): 5.4782007307014711e-32
+// stddev(f - f_Boost): 2.3405556457178008e-16
 const testcase_comp_ellint_3<double>
 data010[10] =
 {
-  { 1.5707963267948966, 0.0000000000000000, 0.0000000000000000 },
-  { 1.4976955329233277, 0.0000000000000000, 0.10000000000000001 },
-  { 1.4339343023863691, 0.0000000000000000, 0.20000000000000001 },
-  { 1.3776795151134889, 0.0000000000000000, 0.29999999999999999 },
-  { 1.3275651989026320, 0.0000000000000000, 0.40000000000000002 },
-  { 1.2825498301618641, 0.0000000000000000, 0.50000000000000000 },
-  { 1.2418235332245127, 0.0000000000000000, 0.59999999999999998 },
-  { 1.2047457872617382, 0.0000000000000000, 0.69999999999999996 },
-  { 1.1708024551734544, 0.0000000000000000, 0.80000000000000004 },
-  { 1.1395754288497419, 0.0000000000000000, 0.90000000000000002 },
+  { 1.5707963267948966, 0.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.6557647109660170, 0.0000000000000000, 0.10000000000000001, 0.0 },
+  { 1.7562036827601817, 0.0000000000000000, 0.20000000000000001, 0.0 },
+  { 1.8774607092226381, 0.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.0278893379868062, 0.0000000000000000, 0.40000000000000002, 0.0 },
+  { 2.2214414690791831, 0.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2.4836470664490258, 0.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.8678686047727386, 0.0000000000000000, 0.70000000000000007, 0.0 },
+  { 3.5124073655203634, 0.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4.9672941328980516, 0.0000000000000000, 0.90000000000000002, 0.0 },
 };
 const double toler010 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8887517676790089e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 5
+// max(|f - f_Boost| / |f_Boost|): 1.9932308021417639e-16
+// mean(f - f_Boost): -2.2204460492503132e-17
+// variance(f - f_Boost): 6.0868897007794120e-35
+// stddev(f - f_Boost): 7.8018521523926693e-18
 const testcase_comp_ellint_3<double>
 data011[10] =
 {
-  { 1.5747455615173562, 0.10000000000000009, 0.0000000000000000 },
-  { 1.5013711111199950, 0.10000000000000009, 0.10000000000000001 },
-  { 1.4373749386463430, 0.10000000000000009, 0.20000000000000001 },
-  { 1.3809159606704959, 0.10000000000000009, 0.29999999999999999 },
-  { 1.3306223265207477, 0.10000000000000009, 0.40000000000000002 },
-  { 1.2854480708580160, 0.10000000000000009, 0.50000000000000000 },
-  { 1.2445798942989255, 0.10000000000000009, 0.59999999999999998 },
-  { 1.2073745911083185, 0.10000000000000009, 0.69999999999999996 },
-  { 1.1733158866987732, 0.10000000000000009, 0.80000000000000004 },
-  { 1.1419839485283374, 0.10000000000000009, 0.90000000000000002 },
+  { 1.5747455615173560, 0.10000000000000009, 0.0000000000000000, 0.0 },
+  { 1.6600374067558428, 0.10000000000000009, 0.10000000000000001, 0.0 },
+  { 1.7608656115083421, 0.10000000000000009, 0.20000000000000001, 0.0 },
+  { 1.8826015946315440, 0.10000000000000009, 0.30000000000000004, 0.0 },
+  { 2.0336367403076760, 0.10000000000000009, 0.40000000000000002, 0.0 },
+  { 2.2279868912966849, 0.10000000000000009, 0.50000000000000000, 0.0 },
+  { 2.4913004919173827, 0.10000000000000009, 0.60000000000000009, 0.0 },
+  { 2.8771910188009744, 0.10000000000000009, 0.70000000000000007, 0.0 },
+  { 3.5246199613295617, 0.10000000000000009, 0.80000000000000004, 0.0 },
+  { 4.9862890417305508, 0.10000000000000009, 0.90000000000000002, 0.0 },
 };
 const double toler011 = 2.5000000000000020e-13;
 
-// Test data for k=0.19999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8637687241174905e-16
+// Test data for k=0.20000000000000018.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.9753938705764407e-16
+// mean(f - f_Boost): 3.1086244689504381e-16
+// variance(f - f_Boost): 4.1147374377268827e-32
+// stddev(f - f_Boost): 2.0284815596220939e-16
 const testcase_comp_ellint_3<double>
 data012[10] =
 {
-  { 1.5868678474541660, 0.19999999999999996, 0.0000000000000000 },
-  { 1.5126513474261087, 0.19999999999999996, 0.10000000000000001 },
-  { 1.4479323932249564, 0.19999999999999996, 0.20000000000000001 },
-  { 1.3908453514752477, 0.19999999999999996, 0.29999999999999999 },
-  { 1.3400002519661005, 0.19999999999999996, 0.40000000000000002 },
-  { 1.2943374404397372, 0.19999999999999996, 0.50000000000000000 },
-  { 1.2530330675914556, 0.19999999999999996, 0.59999999999999998 },
-  { 1.2154356555075863, 0.19999999999999996, 0.69999999999999996 },
-  { 1.1810223448909909, 0.19999999999999996, 0.80000000000000004 },
-  { 1.1493679916141861, 0.19999999999999996, 0.90000000000000002 },
+  { 1.5868678474541662, 0.20000000000000018, 0.0000000000000000, 0.0 },
+  { 1.6731552050562593, 0.20000000000000018, 0.10000000000000001, 0.0 },
+  { 1.7751816279738935, 0.20000000000000018, 0.20000000000000001, 0.0 },
+  { 1.8983924169967101, 0.20000000000000018, 0.30000000000000004, 0.0 },
+  { 2.0512956926676806, 0.20000000000000018, 0.40000000000000002, 0.0 },
+  { 2.2481046259421302, 0.20000000000000018, 0.50000000000000000, 0.0 },
+  { 2.5148333891629315, 0.20000000000000018, 0.60000000000000009, 0.0 },
+  { 2.9058704854500967, 0.20000000000000018, 0.70000000000000007, 0.0 },
+  { 3.5622166386422633, 0.20000000000000018, 0.80000000000000004, 0.0 },
+  { 5.0448269356200370, 0.20000000000000018, 0.90000000000000002, 0.0 },
 };
 const double toler012 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8209844149902043e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.4585997630846713e-16
+// mean(f - f_Boost): 5.1070259132757197e-16
+// variance(f - f_Boost): 1.7591111235252501e-32
+// stddev(f - f_Boost): 1.3263148659067538e-16
 const testcase_comp_ellint_3<double>
 data013[10] =
 {
-  { 1.6080486199305128, 0.30000000000000004, 0.0000000000000000 },
-  { 1.5323534693557528, 0.30000000000000004, 0.10000000000000001 },
-  { 1.4663658145259877, 0.30000000000000004, 0.20000000000000001 },
-  { 1.4081767433479091, 0.30000000000000004, 0.29999999999999999 },
-  { 1.3563643538969763, 0.30000000000000004, 0.40000000000000002 },
-  { 1.3098448759814962, 0.30000000000000004, 0.50000000000000000 },
-  { 1.2677758800420669, 0.30000000000000004, 0.59999999999999998 },
-  { 1.2294913236274982, 0.30000000000000004, 0.69999999999999996 },
-  { 1.1944567571590048, 0.30000000000000004, 0.80000000000000004 },
-  { 1.1622376896064914, 0.30000000000000004, 0.90000000000000002 },
+  { 1.6080486199305128, 0.30000000000000004, 0.0000000000000000, 0.0 },
+  { 1.6960848815118228, 0.30000000000000004, 0.10000000000000001, 0.0 },
+  { 1.8002173372290500, 0.30000000000000004, 0.20000000000000001, 0.0 },
+  { 1.9260216862473254, 0.30000000000000004, 0.30000000000000004, 0.0 },
+  { 2.0822121773175533, 0.30000000000000004, 0.40000000000000002, 0.0 },
+  { 2.2833505881933975, 0.30000000000000004, 0.50000000000000000, 0.0 },
+  { 2.5560975528589065, 0.30000000000000004, 0.60000000000000009, 0.0 },
+  { 2.9562123549913877, 0.30000000000000004, 0.70000000000000007, 0.0 },
+  { 3.6283050484567174, 0.30000000000000004, 0.80000000000000004, 0.0 },
+  { 5.1479514944016795, 0.30000000000000004, 0.90000000000000002, 0.0 },
 };
 const double toler013 = 2.5000000000000020e-13;
 
-// Test data for k=0.39999999999999991.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.1925080711125793e-16
+// Test data for k=0.40000000000000013.
+// max(|f - f_Boost|): 2.6645352591003757e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.7696531428672557e-16
+// mean(f - f_Boost): 1.1990408665951691e-15
+// variance(f - f_Boost): 2.6514491536595121e-31
+// stddev(f - f_Boost): 5.1492224205791612e-16
 const testcase_comp_ellint_3<double>
 data014[10] =
 {
-  { 1.6399998658645112, 0.39999999999999991, 0.0000000000000000 },
-  { 1.5620566886683604, 0.39999999999999991, 0.10000000000000001 },
-  { 1.4941414344266770, 0.39999999999999991, 0.20000000000000001 },
-  { 1.4342789859950078, 0.39999999999999991, 0.29999999999999999 },
-  { 1.3809986210732901, 0.39999999999999991, 0.40000000000000002 },
-  { 1.3331797176377398, 0.39999999999999991, 0.50000000000000000 },
-  { 1.2899514672527024, 0.39999999999999991, 0.59999999999999998 },
-  { 1.2506255923253344, 0.39999999999999991, 0.69999999999999996 },
-  { 1.2146499565727209, 0.39999999999999991, 0.80000000000000004 },
-  { 1.1815758115929846, 0.39999999999999991, 0.90000000000000002 },
+  { 1.6399998658645112, 0.40000000000000013, 0.0000000000000000, 0.0 },
+  { 1.7306968836847190, 0.40000000000000013, 0.10000000000000001, 0.0 },
+  { 1.8380358826317629, 0.40000000000000013, 0.20000000000000001, 0.0 },
+  { 1.9677924132520141, 0.40000000000000013, 0.30000000000000004, 0.0 },
+  { 2.1289968719280030, 0.40000000000000013, 0.40000000000000002, 0.0 },
+  { 2.3367461373176512, 0.40000000000000013, 0.50000000000000000, 0.0 },
+  { 2.6186940209850196, 0.40000000000000013, 0.60000000000000009, 0.0 },
+  { 3.0327078743873246, 0.40000000000000013, 0.70000000000000007, 0.0 },
+  { 3.7289548002199906, 0.40000000000000013, 0.80000000000000004, 0.0 },
+  { 5.3055535102872522, 0.40000000000000013, 0.90000000000000002, 0.0 },
 };
 const double toler014 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 1.7857620325589816e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 3
+// max(|f - f_Boost| / |f_Boost|): 2.1900131385114407e-16
+// mean(f - f_Boost): 2.4424906541753446e-16
+// variance(f - f_Boost): 7.3651365379430888e-33
+// stddev(f - f_Boost): 8.5820373676319358e-17
 const testcase_comp_ellint_3<double>
 data015[10] =
 {
-  { 1.6857503548125963, 0.50000000000000000, 0.0000000000000000 },
-  { 1.6045524936084892, 0.50000000000000000, 0.10000000000000001 },
-  { 1.5338490483665983, 0.50000000000000000, 0.20000000000000001 },
-  { 1.4715681939859637, 0.50000000000000000, 0.29999999999999999 },
-  { 1.4161679518465340, 0.50000000000000000, 0.40000000000000002 },
-  { 1.3664739530045971, 0.50000000000000000, 0.50000000000000000 },
-  { 1.3215740290190876, 0.50000000000000000, 0.59999999999999998 },
-  { 1.2807475181182502, 0.50000000000000000, 0.69999999999999996 },
-  { 1.2434165408189539, 0.50000000000000000, 0.80000000000000004 },
-  { 1.2091116095504744, 0.50000000000000000, 0.90000000000000002 },
+  { 1.6857503548125961, 0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 1.7803034946545482, 0.50000000000000000, 0.10000000000000001, 0.0 },
+  { 1.8922947612264021, 0.50000000000000000, 0.20000000000000001, 0.0 },
+  { 2.0277924458111314, 0.50000000000000000, 0.30000000000000004, 0.0 },
+  { 2.1962905366178065, 0.50000000000000000, 0.40000000000000002, 0.0 },
+  { 2.4136715042011945, 0.50000000000000000, 0.50000000000000000, 0.0 },
+  { 2.7090491861753558, 0.50000000000000000, 0.60000000000000009, 0.0 },
+  { 3.1433945297859229, 0.50000000000000000, 0.70000000000000007, 0.0 },
+  { 3.8750701888108070, 0.50000000000000000, 0.80000000000000004, 0.0 },
+  { 5.5355132096026463, 0.50000000000000000, 0.90000000000000002, 0.0 },
 };
 const double toler015 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.7124937590522226e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 2
+// max(|f - f_Boost| / |f_Boost|): 2.2547200163366559e-16
+// mean(f - f_Boost): -2.2204460492503131e-16
+// variance(f - f_Boost): 6.0868897007794117e-33
+// stddev(f - f_Boost): 7.8018521523926690e-17
 const testcase_comp_ellint_3<double>
 data016[10] =
 {
-  { 1.7507538029157526, 0.60000000000000009, 0.0000000000000000 },
-  { 1.6648615773343014, 0.60000000000000009, 0.10000000000000001 },
-  { 1.5901418016279374, 0.60000000000000009, 0.20000000000000001 },
-  { 1.5243814243493585, 0.60000000000000009, 0.29999999999999999 },
-  { 1.4659345278069984, 0.60000000000000009, 0.40000000000000002 },
-  { 1.4135484285693078, 0.60000000000000009, 0.50000000000000000 },
-  { 1.3662507535812816, 0.60000000000000009, 0.59999999999999998 },
-  { 1.3232737468822813, 0.60000000000000009, 0.69999999999999996 },
-  { 1.2840021261752192, 0.60000000000000009, 0.80000000000000004 },
-  { 1.2479362973851873, 0.60000000000000009, 0.90000000000000002 },
+  { 1.7507538029157526, 0.60000000000000009, 0.0000000000000000, 0.0 },
+  { 1.8508766487100687, 0.60000000000000009, 0.10000000000000001, 0.0 },
+  { 1.9695980282802217, 0.60000000000000009, 0.20000000000000001, 0.0 },
+  { 2.1134154405060599, 0.60000000000000009, 0.30000000000000004, 0.0 },
+  { 2.2925036420985130, 0.60000000000000009, 0.40000000000000002, 0.0 },
+  { 2.5239007084492711, 0.60000000000000009, 0.50000000000000000, 0.0 },
+  { 2.8388723099514976, 0.60000000000000009, 0.60000000000000009, 0.0 },
+  { 3.3029735898397159, 0.60000000000000009, 0.70000000000000007, 0.0 },
+  { 4.0867036409261832, 0.60000000000000009, 0.80000000000000004, 0.0 },
+  { 5.8709993116265613, 0.60000000000000009, 0.90000000000000002, 0.0 },
 };
 const double toler016 = 2.5000000000000020e-13;
 
-// Test data for k=0.69999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3074070916136724e-16
+// Test data for k=0.70000000000000018.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 2.9298727220933567e-16
+// mean(f - f_Boost): 4.8849813083506892e-16
+// variance(f - f_Boost): 2.0476296953421943e-31
+// stddev(f - f_Boost): 4.5250742483877478e-16
 const testcase_comp_ellint_3<double>
 data017[10] =
 {
-  { 1.8456939983747236, 0.69999999999999996, 0.0000000000000000 },
-  { 1.7528050171757608, 0.69999999999999996, 0.10000000000000001 },
-  { 1.6721098780092145, 0.69999999999999996, 0.20000000000000001 },
-  { 1.6011813647733213, 0.69999999999999996, 0.29999999999999999 },
-  { 1.5382162002954762, 0.69999999999999996, 0.40000000000000002 },
-  { 1.4818433192178544, 0.69999999999999996, 0.50000000000000000 },
-  { 1.4309994736080540, 0.69999999999999996, 0.59999999999999998 },
-  { 1.3848459188329196, 0.69999999999999996, 0.69999999999999996 },
-  { 1.3427110650397531, 0.69999999999999996, 0.80000000000000004 },
-  { 1.3040500499695913, 0.69999999999999996, 0.90000000000000002 },
+  { 1.8456939983747238, 0.70000000000000018, 0.0000000000000000, 0.0 },
+  { 1.9541347343119566, 0.70000000000000018, 0.10000000000000001, 0.0 },
+  { 2.0829290325820207, 0.70000000000000018, 0.20000000000000001, 0.0 },
+  { 2.2392290510988540, 0.70000000000000018, 0.30000000000000004, 0.0 },
+  { 2.4342502915307880, 0.70000000000000018, 0.40000000000000002, 0.0 },
+  { 2.6868019968237000, 0.70000000000000018, 0.50000000000000000, 0.0 },
+  { 3.0314573496746746, 0.70000000000000018, 0.60000000000000009, 0.0 },
+  { 3.5408408771788569, 0.70000000000000018, 0.70000000000000007, 0.0 },
+  { 4.4042405729076970, 0.70000000000000018, 0.80000000000000004, 0.0 },
+  { 6.3796094177887763, 0.70000000000000018, 0.90000000000000002, 0.0 },
 };
 const double toler017 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 1.5960830388244336e-16
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.1949393471095187e-16
+// mean(f - f_Boost): 9.5479180117763459e-16
+// variance(f - f_Boost): 5.4782007307014711e-34
+// stddev(f - f_Boost): 2.3405556457178006e-17
 const testcase_comp_ellint_3<double>
 data018[10] =
 {
-  { 1.9953027776647296, 0.80000000000000004, 0.0000000000000000 },
-  { 1.8910755418379521, 0.80000000000000004, 0.10000000000000001 },
-  { 1.8007226661734588, 0.80000000000000004, 0.20000000000000001 },
-  { 1.7214611048717301, 0.80000000000000004, 0.29999999999999999 },
-  { 1.6512267838651289, 0.80000000000000004, 0.40000000000000002 },
-  { 1.5884528947755532, 0.80000000000000004, 0.50000000000000000 },
-  { 1.5319262547427865, 0.80000000000000004, 0.59999999999999998 },
-  { 1.4806912324625332, 0.80000000000000004, 0.69999999999999996 },
-  { 1.4339837018309471, 0.80000000000000004, 0.80000000000000004 },
-  { 1.3911845406776222, 0.80000000000000004, 0.90000000000000002 },
+  { 1.9953027776647294, 0.80000000000000004, 0.0000000000000000, 0.0 },
+  { 2.1172616484005085, 0.80000000000000004, 0.10000000000000001, 0.0 },
+  { 2.2624789434186798, 0.80000000000000004, 0.20000000000000001, 0.0 },
+  { 2.4392042002725698, 0.80000000000000004, 0.30000000000000004, 0.0 },
+  { 2.6604037035529728, 0.80000000000000004, 0.40000000000000002, 0.0 },
+  { 2.9478781158239751, 0.80000000000000004, 0.50000000000000000, 0.0 },
+  { 3.3418121892288055, 0.80000000000000004, 0.60000000000000009, 0.0 },
+  { 3.9268876980046397, 0.80000000000000004, 0.70000000000000007, 0.0 },
+  { 4.9246422058196071, 0.80000000000000004, 0.80000000000000004, 0.0 },
+  { 7.2263259298637132, 0.80000000000000004, 0.90000000000000002, 0.0 },
 };
 const double toler018 = 2.5000000000000020e-13;
 
-// Test data for k=0.89999999999999991.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 2.6751587294384150e-16
+// Test data for k=0.90000000000000013.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 3
+// max(|f - f_Boost| / |f_Boost|): 1.5716352001310461e-16
+// mean(f - f_Boost): 4.4408920985006264e-17
+// variance(f - f_Boost): 2.4347558803117648e-34
+// stddev(f - f_Boost): 1.5603704304785339e-17
 const testcase_comp_ellint_3<double>
 data019[10] =
 {
-  { 2.2805491384227703, 0.89999999999999991, 0.0000000000000000 },
-  { 2.1537868513875287, 0.89999999999999991, 0.10000000000000001 },
-  { 2.0443194576468895, 0.89999999999999991, 0.20000000000000001 },
-  { 1.9486280260314426, 0.89999999999999991, 0.29999999999999999 },
-  { 1.8641114227238351, 0.89999999999999991, 0.40000000000000002 },
-  { 1.7888013241937863, 0.89999999999999991, 0.50000000000000000 },
-  { 1.7211781128919525, 0.89999999999999991, 0.59999999999999998 },
-  { 1.6600480747670940, 0.89999999999999991, 0.69999999999999996 },
-  { 1.6044591960982202, 0.89999999999999991, 0.80000000000000004 },
-  { 1.5536420236310948, 0.89999999999999991, 0.90000000000000002 },
+  { 2.2805491384227707, 0.90000000000000013, 0.0000000000000000, 0.0 },
+  { 2.4295011187834890, 0.90000000000000013, 0.10000000000000001, 0.0 },
+  { 2.6076835743348421, 0.90000000000000013, 0.20000000000000001, 0.0 },
+  { 2.8256506968858521, 0.90000000000000013, 0.30000000000000004, 0.0 },
+  { 3.1000689868578628, 0.90000000000000013, 0.40000000000000002, 0.0 },
+  { 3.4591069002104686, 0.90000000000000013, 0.50000000000000000, 0.0 },
+  { 3.9549939883570242, 0.90000000000000013, 0.60000000000000009, 0.0 },
+  { 4.6985482312992453, 0.90000000000000013, 0.70000000000000007, 0.0 },
+  { 5.9820740813645727, 0.90000000000000013, 0.80000000000000004, 0.0 },
+  { 8.9942562031858735, 0.90000000000000013, 0.90000000000000002, 0.0 },
 };
 const double toler019 = 2.5000000000000020e-13;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_comp_ellint_3<Tp> (&data)[Num], Tp toler)
+  test(const testcase_comp_ellint_3<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::comp_ellint_3(data[i].k, data[i].nu);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::comp_ellint_3(data[i].k, data[i].nu);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
diff --git a/libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/pr66689.cc b/libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/pr66689.cc
new file mode 100644 (file)
index 0000000..a83126f
--- /dev/null
@@ -0,0 +1,24 @@
+// { dg-do run { target c++11 } }
+// { dg-require-c-std "" }
+// { dg-add-options ieee }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
+
+#include <cmath>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  double Pi1 = std::comp_ellint_3(0.75, 0.0);
+  VERIFY(std::abs(Pi1 - 1.91099) < 0.00001);
+
+  double Pi2 = std::comp_ellint_3(0.75, 0.5);
+  VERIFY(std::abs(Pi2 - 2.80011) < 0.00001);
+}
+
+int
+main()
+{
+  test01();
+  return 0;
+}
index 4de6fd0..7b5b5d6 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for nu=0.0000000000000000.
-// max(|f - f_GSL|): 2.8421709430404007e-14
-// max(|f - f_GSL| / |f_GSL|): 1.3916073135966565e-15
+// max(|f - f_GSL|): 5.2402526762307389e-14 at index 12
+// max(|f - f_GSL| / |f_GSL|): 1.0747725055352992e-14
+// mean(f - f_GSL): -1.9624513654326576e-14
+// variance(f - f_GSL): 4.0630093099383162e-30
+// stddev(f - f_GSL): 2.0156907773610308e-15
 const testcase_cyl_bessel_i<double>
-data001[21] =
+data007[21] =
 {
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
-  { 1.0156861412236078, 0.0000000000000000, 0.25000000000000000 },
-  { 1.0634833707413236, 0.0000000000000000, 0.50000000000000000 },
-  { 1.1456467780440014, 0.0000000000000000, 0.75000000000000000 },
-  { 1.2660658777520082, 0.0000000000000000, 1.0000000000000000 },
-  { 1.4304687177218294, 0.0000000000000000, 1.2500000000000000 },
-  { 1.6467231897728904, 0.0000000000000000, 1.5000000000000000 },
-  { 1.9252521538585023, 0.0000000000000000, 1.7500000000000000 },
-  { 2.2795853023360668, 0.0000000000000000, 2.0000000000000000 },
-  { 2.7270783071907951, 0.0000000000000000, 2.2500000000000000 },
-  { 3.2898391440501231, 0.0000000000000000, 2.5000000000000000 },
-  { 3.9959131072376550, 0.0000000000000000, 2.7500000000000000 },
-  { 4.8807925858650245, 0.0000000000000000, 3.0000000000000000 },
-  { 5.9893359979395138, 0.0000000000000000, 3.2500000000000000 },
-  { 7.3782034322254750, 0.0000000000000000, 3.5000000000000000 },
-  { 9.1189458608445655, 0.0000000000000000, 3.7500000000000000 },
-  { 11.301921952136325, 0.0000000000000000, 4.0000000000000000 },
-  { 14.041263683000595, 0.0000000000000000, 4.2500000000000000 },
-  { 17.481171855609272, 0.0000000000000000, 4.5000000000000000 },
-  { 21.803898740902120, 0.0000000000000000, 4.7500000000000000 },
-  { 27.239871823604439, 0.0000000000000000, 5.0000000000000000 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0156861412236078, 0.0000000000000000, 0.25000000000000000, 0.0 },
+  { 1.0634833707413236, 0.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.1456467780440014, 0.0000000000000000, 0.75000000000000000, 0.0 },
+  { 1.2660658777520082, 0.0000000000000000, 1.0000000000000000, 0.0 },
+  { 1.4304687177218294, 0.0000000000000000, 1.2500000000000000, 0.0 },
+  { 1.6467231897728904, 0.0000000000000000, 1.5000000000000000, 0.0 },
+  { 1.9252521538585021, 0.0000000000000000, 1.7500000000000000, 0.0 },
+  { 2.2795853023360668, 0.0000000000000000, 2.0000000000000000, 0.0 },
+  { 2.7270783071907951, 0.0000000000000000, 2.2500000000000000, 0.0 },
+  { 3.2898391440501231, 0.0000000000000000, 2.5000000000000000, 0.0 },
+  { 3.9959131072376550, 0.0000000000000000, 2.7500000000000000, 0.0 },
+  { 4.8807925858650245, 0.0000000000000000, 3.0000000000000000, 0.0 },
+  { 5.9893359979395138, 0.0000000000000000, 3.2500000000000000, 0.0 },
+  { 7.3782034322254750, 0.0000000000000000, 3.5000000000000000, 0.0 },
+  { 9.1189458608445655, 0.0000000000000000, 3.7500000000000000, 0.0 },
+  { 11.301921952136325, 0.0000000000000000, 4.0000000000000000, 0.0 },
+  { 14.041263683000595, 0.0000000000000000, 4.2500000000000000, 0.0 },
+  { 17.481171855609272, 0.0000000000000000, 4.5000000000000000, 0.0 },
+  { 21.803898740902120, 0.0000000000000000, 4.7500000000000000, 0.0 },
+  { 27.239871823604439, 0.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler001 = 2.5000000000000020e-13;
+const double toler007 = 1.0000000000000008e-12;
 
 // Test data for nu=0.33333333333333331.
-// max(|f - f_GSL|): 1.0658141036401503e-14
-// max(|f - f_GSL| / |f_GSL|): 1.1056193696204194e-15
+// max(|f - f_GSL|): 6.2172489379008766e-15 at index 14
+// max(|f - f_GSL| / |f_GSL|): 9.1624880778907085e-16
+// mean(f - f_GSL): 1.1525172350870673e-15
+// variance(f - f_GSL): 6.9735538801568761e-32
+// stddev(f - f_GSL): 2.6407487347638500e-16
 const testcase_cyl_bessel_i<double>
-data002[21] =
+data008[21] =
 {
-  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000 },
-  { 0.56650686557808660, 0.33333333333333331, 0.25000000000000000 },
-  { 0.73897315642511863, 0.33333333333333331, 0.50000000000000000 },
-  { 0.89532320365836804, 0.33333333333333331, 0.75000000000000000 },
-  { 1.0646313978895285, 0.33333333333333331, 1.0000000000000000 },
-  { 1.2623776732605250, 0.33333333333333331, 1.2500000000000000 },
-  { 1.5014290000224382, 0.33333333333333331, 1.5000000000000000 },
-  { 1.7951195525946044, 0.33333333333333331, 1.7500000000000000 },
-  { 2.1587825813728614, 0.33333333333333331, 2.0000000000000000 },
-  { 2.6109134564811405, 0.33333333333333331, 2.2500000000000000 },
-  { 3.1743242297241938, 0.33333333333333331, 2.5000000000000000 },
-  { 3.8774551722182107, 0.33333333333333331, 2.7500000000000000 },
-  { 4.7559569371646946, 0.33333333333333331, 3.0000000000000000 },
-  { 5.8546499652731825, 0.33333333333333331, 3.2500000000000000 },
-  { 7.2299798619171147, 0.33333333333333331, 3.5000000000000000 },
-  { 8.9531114355506318, 0.33333333333333331, 3.7500000000000000 },
-  { 11.113838389991479, 0.33333333333333331, 4.0000000000000000 },
-  { 13.825531136529117, 0.33333333333333331, 4.2500000000000000 },
-  { 17.231403968478318, 0.33333333333333331, 4.5000000000000000 },
-  { 21.512458099556554, 0.33333333333333331, 4.7500000000000000 },
-  { 26.897553069268362, 0.33333333333333331, 5.0000000000000000 },
+  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000, 0.0 },
+  { 0.56650686557808660, 0.33333333333333331, 0.25000000000000000, 0.0 },
+  { 0.73897315642511863, 0.33333333333333331, 0.50000000000000000, 0.0 },
+  { 0.89532320365836815, 0.33333333333333331, 0.75000000000000000, 0.0 },
+  { 1.0646313978895283, 0.33333333333333331, 1.0000000000000000, 0.0 },
+  { 1.2623776732605250, 0.33333333333333331, 1.2500000000000000, 0.0 },
+  { 1.5014290000224382, 0.33333333333333331, 1.5000000000000000, 0.0 },
+  { 1.7951195525946040, 0.33333333333333331, 1.7500000000000000, 0.0 },
+  { 2.1587825813728614, 0.33333333333333331, 2.0000000000000000, 0.0 },
+  { 2.6109134564811405, 0.33333333333333331, 2.2500000000000000, 0.0 },
+  { 3.1743242297241938, 0.33333333333333331, 2.5000000000000000, 0.0 },
+  { 3.8774551722182093, 0.33333333333333331, 2.7500000000000000, 0.0 },
+  { 4.7559569371646946, 0.33333333333333331, 3.0000000000000000, 0.0 },
+  { 5.8546499652731825, 0.33333333333333331, 3.2500000000000000, 0.0 },
+  { 7.2299798619171129, 0.33333333333333331, 3.5000000000000000, 0.0 },
+  { 8.9531114355506318, 0.33333333333333331, 3.7500000000000000, 0.0 },
+  { 11.113838389991479, 0.33333333333333331, 4.0000000000000000, 0.0 },
+  { 13.825531136529117, 0.33333333333333331, 4.2500000000000000, 0.0 },
+  { 17.231403968478318, 0.33333333333333331, 4.5000000000000000, 0.0 },
+  { 21.512458099556554, 0.33333333333333331, 4.7500000000000000, 0.0 },
+  { 26.897553069268362, 0.33333333333333331, 5.0000000000000000, 0.0 },
 };
-const double toler002 = 2.5000000000000020e-13;
+const double toler008 = 2.5000000000000020e-13;
 
 // Test data for nu=0.50000000000000000.
-// max(|f - f_GSL|): 1.4210854715202004e-14
-// max(|f - f_GSL| / |f_GSL|): 1.2805693909168510e-15
+// max(|f - f_GSL|): 1.4210854715202004e-14 at index 19
+// max(|f - f_GSL| / |f_GSL|): 9.6042704318763827e-16
+// mean(f - f_GSL): 1.9296733523246769e-16
+// variance(f - f_GSL): 1.9549106045027772e-33
+// stddev(f - f_GSL): 4.4214371017835108e-17
 const testcase_cyl_bessel_i<double>
-data003[21] =
+data009[21] =
 {
-  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
-  { 0.40311093489975897, 0.50000000000000000, 0.25000000000000000 },
-  { 0.58799308679041573, 0.50000000000000000, 0.50000000000000000 },
-  { 0.75761498638991298, 0.50000000000000000, 0.75000000000000000 },
-  { 0.93767488824548695, 0.50000000000000000, 1.0000000000000000 },
-  { 1.1432089853159872, 0.50000000000000000, 1.2500000000000000 },
-  { 1.3871617204034761, 0.50000000000000000, 1.5000000000000000 },
-  { 1.6830217804556815, 0.50000000000000000, 1.7500000000000000 },
-  { 2.0462368630890526, 0.50000000000000000, 2.0000000000000000 },
-  { 2.4953405089360041, 0.50000000000000000, 2.2500000000000000 },
-  { 3.0530935381967175, 0.50000000000000000, 2.5000000000000000 },
-  { 3.7477882494879449, 0.50000000000000000, 2.7500000000000000 },
-  { 4.6148229034075969, 0.50000000000000000, 3.0000000000000000 },
-  { 5.6986505325335495, 0.50000000000000000, 3.2500000000000000 },
-  { 7.0552194086911877, 0.50000000000000000, 3.5000000000000000 },
-  { 8.7550467841188944, 0.50000000000000000, 3.7500000000000000 },
-  { 10.887101798588422, 0.50000000000000000, 4.0000000000000000 },
-  { 13.563718712579764, 0.50000000000000000, 4.2500000000000000 },
-  { 16.926820080158183, 0.50000000000000000, 4.5000000000000000 },
-  { 21.155804306570005, 0.50000000000000000, 4.7500000000000000 },
-  { 26.477547497559065, 0.50000000000000000, 5.0000000000000000 },
+  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 0.40311093489975897, 0.50000000000000000, 0.25000000000000000, 0.0 },
+  { 0.58799308679041573, 0.50000000000000000, 0.50000000000000000, 0.0 },
+  { 0.75761498638991298, 0.50000000000000000, 0.75000000000000000, 0.0 },
+  { 0.93767488824548695, 0.50000000000000000, 1.0000000000000000, 0.0 },
+  { 1.1432089853159872, 0.50000000000000000, 1.2500000000000000, 0.0 },
+  { 1.3871617204034761, 0.50000000000000000, 1.5000000000000000, 0.0 },
+  { 1.6830217804556813, 0.50000000000000000, 1.7500000000000000, 0.0 },
+  { 2.0462368630890526, 0.50000000000000000, 2.0000000000000000, 0.0 },
+  { 2.4953405089360046, 0.50000000000000000, 2.2500000000000000, 0.0 },
+  { 3.0530935381967175, 0.50000000000000000, 2.5000000000000000, 0.0 },
+  { 3.7477882494879449, 0.50000000000000000, 2.7500000000000000, 0.0 },
+  { 4.6148229034075969, 0.50000000000000000, 3.0000000000000000, 0.0 },
+  { 5.6986505325335486, 0.50000000000000000, 3.2500000000000000, 0.0 },
+  { 7.0552194086911859, 0.50000000000000000, 3.5000000000000000, 0.0 },
+  { 8.7550467841188979, 0.50000000000000000, 3.7500000000000000, 0.0 },
+  { 10.887101798588422, 0.50000000000000000, 4.0000000000000000, 0.0 },
+  { 13.563718712579764, 0.50000000000000000, 4.2500000000000000, 0.0 },
+  { 16.926820080158183, 0.50000000000000000, 4.5000000000000000, 0.0 },
+  { 21.155804306570005, 0.50000000000000000, 4.7500000000000000, 0.0 },
+  { 26.477547497559065, 0.50000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler003 = 2.5000000000000020e-13;
+const double toler009 = 2.5000000000000020e-13;
 
 // Test data for nu=0.66666666666666663.
-// max(|f - f_GSL|): 1.2434497875801753e-14
-// max(|f - f_GSL| / |f_GSL|): 1.3900778397944649e-15
+// max(|f - f_GSL|): 1.9539925233402755e-14 at index 16
+// max(|f - f_GSL| / |f_GSL|): 2.2100364323953014e-15
+// mean(f - f_GSL): -5.2312651565075830e-15
+// variance(f - f_GSL): 1.4792059082391298e-31
+// stddev(f - f_GSL): 3.8460446022363414e-16
 const testcase_cyl_bessel_i<double>
-data004[21] =
+data010[21] =
 {
-  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000 },
-  { 0.27953690613200438, 0.66666666666666663, 0.25000000000000000 },
-  { 0.45628323113556879, 0.66666666666666663, 0.50000000000000000 },
-  { 0.62594569838182612, 0.66666666666666663, 0.75000000000000000 },
-  { 0.80752128860612948, 0.66666666666666663, 1.0000000000000000 },
-  { 1.0139484513577168, 0.66666666666666663, 1.2500000000000000 },
-  { 1.2572918396962991, 0.66666666666666663, 1.5000000000000000 },
-  { 1.5505806938325577, 0.66666666666666663, 1.7500000000000000 },
-  { 1.9089492968236206, 0.66666666666666663, 2.0000000000000000 },
-  { 2.3506463490300331, 0.66666666666666663, 2.2500000000000000 },
-  { 2.8981161894224892, 0.66666666666666663, 2.5000000000000000 },
-  { 3.5792654911068720, 0.66666666666666663, 2.7500000000000000 },
-  { 4.4290087213549505, 0.66666666666666663, 3.0000000000000000 },
-  { 5.4911895720097688, 0.66666666666666663, 3.2500000000000000 },
-  { 6.8209918044137305, 0.66666666666666663, 3.5000000000000000 },
-  { 8.4879784249619767, 0.66666666666666663, 3.7500000000000000 },
-  { 10.579932774013002, 0.66666666666666663, 4.0000000000000000 },
-  { 13.207720355482458, 0.66666666666666663, 4.2500000000000000 },
-  { 16.511448404200543, 0.66666666666666663, 4.5000000000000000 },
-  { 20.668274532832392, 0.66666666666666663, 4.7500000000000000 },
-  { 25.902310583215122, 0.66666666666666663, 5.0000000000000000 },
+  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000, 0.0 },
+  { 0.27953690613200444, 0.66666666666666663, 0.25000000000000000, 0.0 },
+  { 0.45628323113556890, 0.66666666666666663, 0.50000000000000000, 0.0 },
+  { 0.62594569838182623, 0.66666666666666663, 0.75000000000000000, 0.0 },
+  { 0.80752128860612971, 0.66666666666666663, 1.0000000000000000, 0.0 },
+  { 1.0139484513577173, 0.66666666666666663, 1.2500000000000000, 0.0 },
+  { 1.2572918396962993, 0.66666666666666663, 1.5000000000000000, 0.0 },
+  { 1.5505806938325581, 0.66666666666666663, 1.7500000000000000, 0.0 },
+  { 1.9089492968236210, 0.66666666666666663, 2.0000000000000000, 0.0 },
+  { 2.3506463490300340, 0.66666666666666663, 2.2500000000000000, 0.0 },
+  { 2.8981161894224896, 0.66666666666666663, 2.5000000000000000, 0.0 },
+  { 3.5792654911068724, 0.66666666666666663, 2.7500000000000000, 0.0 },
+  { 4.4290087213549514, 0.66666666666666663, 3.0000000000000000, 0.0 },
+  { 5.4911895720097705, 0.66666666666666663, 3.2500000000000000, 0.0 },
+  { 6.8209918044137305, 0.66666666666666663, 3.5000000000000000, 0.0 },
+  { 8.4879784249619785, 0.66666666666666663, 3.7500000000000000, 0.0 },
+  { 10.579932774013004, 0.66666666666666663, 4.0000000000000000, 0.0 },
+  { 13.207720355482458, 0.66666666666666663, 4.2500000000000000, 0.0 },
+  { 16.511448404200543, 0.66666666666666663, 4.5000000000000000, 0.0 },
+  { 20.668274532832392, 0.66666666666666663, 4.7500000000000000, 0.0 },
+  { 25.902310583215122, 0.66666666666666663, 5.0000000000000000, 0.0 },
 };
-const double toler004 = 2.5000000000000020e-13;
+const double toler010 = 2.5000000000000020e-13;
 
 // Test data for nu=1.0000000000000000.
-// max(|f - f_GSL|): 3.5527136788005009e-15
-// max(|f - f_GSL| / |f_GSL|): 2.2031887547040326e-16
+// max(|f - f_GSL|): 1.2967404927621828e-13 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.0977631741433893e-14
+// mean(f - f_GSL): -3.0188814411265717e-14
+// variance(f - f_GSL): 3.7247797767076778e-29
+// stddev(f - f_GSL): 6.1030973912495271e-15
 const testcase_cyl_bessel_i<double>
-data005[21] =
+data011[21] =
 {
-  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000 },
-  { 0.12597910894546793, 1.0000000000000000, 0.25000000000000000 },
-  { 0.25789430539089631, 1.0000000000000000, 0.50000000000000000 },
-  { 0.40199246158092228, 1.0000000000000000, 0.75000000000000000 },
-  { 0.56515910399248503, 1.0000000000000000, 1.0000000000000000 },
-  { 0.75528141834074725, 1.0000000000000000, 1.2500000000000000 },
-  { 0.98166642857790720, 1.0000000000000000, 1.5000000000000000 },
-  { 1.2555375122401731, 1.0000000000000000, 1.7500000000000000 },
-  { 1.5906368546373291, 1.0000000000000000, 2.0000000000000000 },
-  { 2.0039674569295931, 1.0000000000000000, 2.2500000000000000 },
-  { 2.5167162452886984, 1.0000000000000000, 2.5000000000000000 },
-  { 3.1554101386190028, 1.0000000000000000, 2.7500000000000000 },
-  { 3.9533702174026097, 1.0000000000000000, 3.0000000000000000 },
-  { 4.9525461659085490, 1.0000000000000000, 3.2500000000000000 },
-  { 6.2058349222583642, 1.0000000000000000, 3.5000000000000000 },
-  { 7.7800152298244161, 1.0000000000000000, 3.7500000000000000 },
-  { 9.7594651537044488, 1.0000000000000000, 4.0000000000000000 },
-  { 12.250874667409304, 1.0000000000000000, 4.2500000000000000 },
-  { 15.389222753735924, 1.0000000000000000, 4.5000000000000000 },
-  { 19.345361447520226, 1.0000000000000000, 4.7500000000000000 },
-  { 24.335642142450524, 1.0000000000000000, 5.0000000000000000 },
+  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.12597910894546793, 1.0000000000000000, 0.25000000000000000, 0.0 },
+  { 0.25789430539089631, 1.0000000000000000, 0.50000000000000000, 0.0 },
+  { 0.40199246158092228, 1.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.56515910399248503, 1.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.75528141834074725, 1.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.98166642857790720, 1.0000000000000000, 1.5000000000000000, 0.0 },
+  { 1.2555375122401728, 1.0000000000000000, 1.7500000000000000, 0.0 },
+  { 1.5906368546373291, 1.0000000000000000, 2.0000000000000000, 0.0 },
+  { 2.0039674569295931, 1.0000000000000000, 2.2500000000000000, 0.0 },
+  { 2.5167162452886984, 1.0000000000000000, 2.5000000000000000, 0.0 },
+  { 3.1554101386190028, 1.0000000000000000, 2.7500000000000000, 0.0 },
+  { 3.9533702174026097, 1.0000000000000000, 3.0000000000000000, 0.0 },
+  { 4.9525461659085490, 1.0000000000000000, 3.2500000000000000, 0.0 },
+  { 6.2058349222583642, 1.0000000000000000, 3.5000000000000000, 0.0 },
+  { 7.7800152298244170, 1.0000000000000000, 3.7500000000000000, 0.0 },
+  { 9.7594651537044523, 1.0000000000000000, 4.0000000000000000, 0.0 },
+  { 12.250874667409304, 1.0000000000000000, 4.2500000000000000, 0.0 },
+  { 15.389222753735924, 1.0000000000000000, 4.5000000000000000, 0.0 },
+  { 19.345361447520226, 1.0000000000000000, 4.7500000000000000, 0.0 },
+  { 24.335642142450524, 1.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler005 = 2.5000000000000020e-13;
+const double toler011 = 1.0000000000000008e-12;
 
 // Test data for nu=2.0000000000000000.
-// max(|f - f_GSL|): 1.7763568394002505e-15
-// max(|f - f_GSL| / |f_GSL|): 2.2089187702829171e-16
+// max(|f - f_GSL|): 1.8474111129762605e-13 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.0796880796865132e-14
+// mean(f - f_GSL): -3.8692841919903068e-14
+// variance(f - f_GSL): 1.1198300918819667e-27
+// stddev(f - f_GSL): 3.3463862477035829e-14
 const testcase_cyl_bessel_i<double>
-data006[21] =
+data012[21] =
 {
-  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000 },
-  { 0.0078532696598645167, 2.0000000000000000, 0.25000000000000000 },
-  { 0.031906149177738249, 2.0000000000000000, 0.50000000000000000 },
-  { 0.073666880494875436, 2.0000000000000000, 0.75000000000000000 },
-  { 0.13574766976703831, 2.0000000000000000, 1.0000000000000000 },
-  { 0.22201844837663415, 2.0000000000000000, 1.2500000000000000 },
-  { 0.33783461833568068, 2.0000000000000000, 1.5000000000000000 },
-  { 0.49035213986973319, 2.0000000000000000, 1.7500000000000000 },
-  { 0.68894844769873831, 2.0000000000000000, 2.0000000000000000 },
-  { 0.94577390103115722, 2.0000000000000000, 2.2500000000000000 },
-  { 1.2764661478191643, 2.0000000000000000, 2.5000000000000000 },
-  { 1.7010693700601991, 2.0000000000000000, 2.7500000000000000 },
-  { 2.2452124409299512, 2.0000000000000000, 3.0000000000000000 },
-  { 2.9416152804573357, 2.0000000000000000, 3.2500000000000000 },
-  { 3.8320120480778415, 2.0000000000000000, 3.5000000000000000 },
-  { 4.9696044049382113, 2.0000000000000000, 3.7500000000000000 },
-  { 6.4221893752841046, 2.0000000000000000, 4.0000000000000000 },
-  { 8.2761461924550552, 2.0000000000000000, 4.2500000000000000 },
-  { 10.641517298393307, 2.0000000000000000, 4.5000000000000000 },
-  { 13.658483394577813, 2.0000000000000000, 4.7500000000000000 },
-  { 17.505614966624233, 2.0000000000000000, 5.0000000000000000 },
+  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.0078532696598645167, 2.0000000000000000, 0.25000000000000000, 0.0 },
+  { 0.031906149177738249, 2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 0.073666880494875436, 2.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.13574766976703831, 2.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.22201844837663415, 2.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.33783461833568068, 2.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.49035213986973314, 2.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.68894844769873831, 2.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.94577390103115722, 2.0000000000000000, 2.2500000000000000, 0.0 },
+  { 1.2764661478191643, 2.0000000000000000, 2.5000000000000000, 0.0 },
+  { 1.7010693700601991, 2.0000000000000000, 2.7500000000000000, 0.0 },
+  { 2.2452124409299512, 2.0000000000000000, 3.0000000000000000, 0.0 },
+  { 2.9416152804573357, 2.0000000000000000, 3.2500000000000000, 0.0 },
+  { 3.8320120480778415, 2.0000000000000000, 3.5000000000000000, 0.0 },
+  { 4.9696044049382113, 2.0000000000000000, 3.7500000000000000, 0.0 },
+  { 6.4221893752841055, 2.0000000000000000, 4.0000000000000000, 0.0 },
+  { 8.2761461924550552, 2.0000000000000000, 4.2500000000000000, 0.0 },
+  { 10.641517298393307, 2.0000000000000000, 4.5000000000000000, 0.0 },
+  { 13.658483394577813, 2.0000000000000000, 4.7500000000000000, 0.0 },
+  { 17.505614966624233, 2.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler006 = 2.5000000000000020e-13;
+const double toler012 = 1.0000000000000008e-12;
 
 // Test data for nu=5.0000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 1.6610041744866592e-15
+// max(|f - f_GSL|): 2.2204460492503131e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.1379865680381910e-14
+// mean(f - f_GSL): -3.4502652328999478e-15
+// variance(f - f_GSL): 1.8465291591354433e-29
+// stddev(f - f_GSL): 4.2971259687556788e-15
 const testcase_cyl_bessel_i<double>
-data007[21] =
+data013[21] =
 {
-  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000 },
-  { 2.5497616449882785e-07, 5.0000000000000000, 0.25000000000000000 },
-  { 8.2231713131092646e-06, 5.0000000000000000, 0.50000000000000000 },
-  { 6.3261122739811725e-05, 5.0000000000000000, 0.75000000000000000 },
-  { 0.00027146315595697195, 5.0000000000000000, 1.0000000000000000 },
-  { 0.00084793613616686856, 5.0000000000000000, 1.2500000000000000 },
-  { 0.0021705595690975554, 5.0000000000000000, 1.5000000000000000 },
-  { 0.0048504513371845394, 5.0000000000000000, 1.7500000000000000 },
-  { 0.0098256793231317023, 5.0000000000000000, 2.0000000000000000 },
-  { 0.018486577941045829, 5.0000000000000000, 2.2500000000000000 },
-  { 0.032843475172023219, 5.0000000000000000, 2.5000000000000000 },
-  { 0.055750882754221943, 5.0000000000000000, 2.7500000000000000 },
-  { 0.091206477661513338, 5.0000000000000000, 3.0000000000000000 },
-  { 0.14474880546308083, 5.0000000000000000, 3.2500000000000000 },
-  { 0.22398495470190780, 5.0000000000000000, 3.5000000000000000 },
-  { 0.33928899170999866, 5.0000000000000000, 3.7500000000000000 },
-  { 0.50472436311316626, 5.0000000000000000, 4.0000000000000000 },
-  { 0.73925961816682961, 5.0000000000000000, 4.2500000000000000 },
-  { 1.0683677743764699, 5.0000000000000000, 4.5000000000000000 },
-  { 1.5261268693599621, 5.0000000000000000, 4.7500000000000000 },
-  { 2.1579745473225476, 5.0000000000000000, 5.0000000000000000 },
+  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000, 0.0 },
+  { 2.5497616449882785e-07, 5.0000000000000000, 0.25000000000000000, 0.0 },
+  { 8.2231713131092646e-06, 5.0000000000000000, 0.50000000000000000, 0.0 },
+  { 6.3261122739811725e-05, 5.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.00027146315595697195, 5.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.00084793613616686856, 5.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.0021705595690975554, 5.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.0048504513371845385, 5.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.0098256793231317023, 5.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.018486577941045829, 5.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.032843475172023219, 5.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.055750882754221943, 5.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.091206477661513338, 5.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.14474880546308083, 5.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.22398495470190780, 5.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.33928899170999877, 5.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.50472436311316637, 5.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.73925961816682961, 5.0000000000000000, 4.2500000000000000, 0.0 },
+  { 1.0683677743764701, 5.0000000000000000, 4.5000000000000000, 0.0 },
+  { 1.5261268693599621, 5.0000000000000000, 4.7500000000000000, 0.0 },
+  { 2.1579745473225476, 5.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler007 = 2.5000000000000020e-13;
+const double toler013 = 1.0000000000000008e-12;
 
 // Test data for nu=10.000000000000000.
-// max(|f - f_GSL|): 9.5409791178724390e-18
-// max(|f - f_GSL| / |f_GSL|): 3.9173270279899483e-15
+// max(|f - f_GSL|): 5.0306980803327406e-17 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.2741587624782699e-14
+// mean(f - f_GSL): -5.4602116438803446e-18
+// variance(f - f_GSL): 1.0558971696213844e-34
+// stddev(f - f_GSL): 1.0275685717368863e-17
 const testcase_cyl_bessel_i<double>
-data008[21] =
+data014[21] =
 {
-  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000 },
-  { 2.5701232848571186e-16, 10.000000000000000, 0.25000000000000000 },
-  { 2.6430419258812784e-13, 10.000000000000000, 0.50000000000000000 },
-  { 1.5349659676120412e-11, 10.000000000000000, 0.75000000000000000 },
-  { 2.7529480398368732e-10, 10.000000000000000, 1.0000000000000000 },
-  { 2.5967897782035928e-09, 10.000000000000000, 1.2500000000000000 },
-  { 1.6330924437799743e-08, 10.000000000000000, 1.5000000000000000 },
-  { 7.7706676834614093e-08, 10.000000000000000, 1.7500000000000000 },
-  { 3.0169638793506839e-07, 10.000000000000000, 2.0000000000000000 },
-  { 1.0034459057774481e-06, 10.000000000000000, 2.2500000000000000 },
-  { 2.9557436109680578e-06, 10.000000000000000, 2.5000000000000000 },
-  { 7.8955603774082724e-06, 10.000000000000000, 2.7500000000000000 },
-  { 1.9464393470612970e-05, 10.000000000000000, 3.0000000000000000 },
-  { 4.4875369479742435e-05, 10.000000000000000, 3.2500000000000000 },
-  { 9.7760848514528916e-05, 10.000000000000000, 3.5000000000000000 },
-  { 0.00020289011210063493, 10.000000000000000, 3.7500000000000000 },
-  { 0.00040378896132693047, 10.000000000000000, 4.0000000000000000 },
-  { 0.00077478519551669892, 10.000000000000000, 4.2500000000000000 },
-  { 0.0014397060684919682, 10.000000000000000, 4.5000000000000000 },
-  { 0.0026004486016189452, 10.000000000000000, 4.7500000000000000 },
-  { 0.0045800444191760525, 10.000000000000000, 5.0000000000000000 },
+  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000, 0.0 },
+  { 2.5701232848571186e-16, 10.000000000000000, 0.25000000000000000, 0.0 },
+  { 2.6430419258812784e-13, 10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.5349659676120412e-11, 10.000000000000000, 0.75000000000000000, 0.0 },
+  { 2.7529480398368732e-10, 10.000000000000000, 1.0000000000000000, 0.0 },
+  { 2.5967897782035928e-09, 10.000000000000000, 1.2500000000000000, 0.0 },
+  { 1.6330924437799743e-08, 10.000000000000000, 1.5000000000000000, 0.0 },
+  { 7.7706676834614079e-08, 10.000000000000000, 1.7500000000000000, 0.0 },
+  { 3.0169638793506839e-07, 10.000000000000000, 2.0000000000000000, 0.0 },
+  { 1.0034459057774481e-06, 10.000000000000000, 2.2500000000000000, 0.0 },
+  { 2.9557436109680578e-06, 10.000000000000000, 2.5000000000000000, 0.0 },
+  { 7.8955603774082724e-06, 10.000000000000000, 2.7500000000000000, 0.0 },
+  { 1.9464393470612970e-05, 10.000000000000000, 3.0000000000000000, 0.0 },
+  { 4.4875369479742435e-05, 10.000000000000000, 3.2500000000000000, 0.0 },
+  { 9.7760848514528916e-05, 10.000000000000000, 3.5000000000000000, 0.0 },
+  { 0.00020289011210063496, 10.000000000000000, 3.7500000000000000, 0.0 },
+  { 0.00040378896132693058, 10.000000000000000, 4.0000000000000000, 0.0 },
+  { 0.00077478519551669892, 10.000000000000000, 4.2500000000000000, 0.0 },
+  { 0.0014397060684919682, 10.000000000000000, 4.5000000000000000, 0.0 },
+  { 0.0026004486016189452, 10.000000000000000, 4.7500000000000000, 0.0 },
+  { 0.0045800444191760525, 10.000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler008 = 2.5000000000000020e-13;
+const double toler014 = 1.0000000000000008e-12;
 
 // Test data for nu=20.000000000000000.
-// max(|f - f_GSL|): 2.9080568410067379e-26
-// max(|f - f_GSL| / |f_GSL|): 2.1318627676504474e-15
+// max(|f - f_GSL|): 6.9147129330604657e-25 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.6061319023473306e-14
+// mean(f - f_GSL): -5.1436249496041580e-26
+// variance(f - f_GSL): 2.1506355008505938e-50
+// stddev(f - f_GSL): 1.4665045178418625e-25
 const testcase_cyl_bessel_i<double>
-data009[21] =
+data015[21] =
 {
-  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000 },
-  { 3.5677858077910353e-37, 20.000000000000000, 0.25000000000000000 },
-  { 3.7494538480790194e-31, 20.000000000000000, 0.50000000000000000 },
-  { 1.2514356342425337e-27, 20.000000000000000, 0.75000000000000000 },
-  { 3.9668359858190197e-25, 20.000000000000000, 1.0000000000000000 },
-  { 3.4637832909868234e-23, 20.000000000000000, 1.2500000000000000 },
-  { 1.3388331839683472e-21, 20.000000000000000, 1.5000000000000000 },
-  { 2.9502376732679751e-20, 20.000000000000000, 1.7500000000000000 },
-  { 4.3105605761095479e-19, 20.000000000000000, 2.0000000000000000 },
-  { 4.6032451406433059e-18, 20.000000000000000, 2.2500000000000000 },
-  { 3.8400317244170310e-17, 20.000000000000000, 2.5000000000000000 },
-  { 2.6239115263043263e-16, 20.000000000000000, 2.7500000000000000 },
-  { 1.5209660019426689e-15, 20.000000000000000, 3.0000000000000000 },
-  { 7.6806450728249953e-15, 20.000000000000000, 3.2500000000000000 },
-  { 3.4495528847222945e-14, 20.000000000000000, 3.5000000000000000 },
-  { 1.4006589294850672e-13, 20.000000000000000, 3.7500000000000000 },
-  { 5.2100734221993044e-13, 20.000000000000000, 4.0000000000000000 },
-  { 1.7946903269488168e-12, 20.000000000000000, 4.2500000000000000 },
-  { 5.7763830562279683e-12, 20.000000000000000, 4.5000000000000000 },
-  { 1.7502433074548735e-11, 20.000000000000000, 4.7500000000000000 },
-  { 5.0242393579718066e-11, 20.000000000000000, 5.0000000000000000 },
+  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000, 0.0 },
+  { 3.5677858077910353e-37, 20.000000000000000, 0.25000000000000000, 0.0 },
+  { 3.7494538480790194e-31, 20.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2514356342425337e-27, 20.000000000000000, 0.75000000000000000, 0.0 },
+  { 3.9668359858190197e-25, 20.000000000000000, 1.0000000000000000, 0.0 },
+  { 3.4637832909868234e-23, 20.000000000000000, 1.2500000000000000, 0.0 },
+  { 1.3388331839683472e-21, 20.000000000000000, 1.5000000000000000, 0.0 },
+  { 2.9502376732679751e-20, 20.000000000000000, 1.7500000000000000, 0.0 },
+  { 4.3105605761095479e-19, 20.000000000000000, 2.0000000000000000, 0.0 },
+  { 4.6032451406433059e-18, 20.000000000000000, 2.2500000000000000, 0.0 },
+  { 3.8400317244170310e-17, 20.000000000000000, 2.5000000000000000, 0.0 },
+  { 2.6239115263043263e-16, 20.000000000000000, 2.7500000000000000, 0.0 },
+  { 1.5209660019426689e-15, 20.000000000000000, 3.0000000000000000, 0.0 },
+  { 7.6806450728249953e-15, 20.000000000000000, 3.2500000000000000, 0.0 },
+  { 3.4495528847222945e-14, 20.000000000000000, 3.5000000000000000, 0.0 },
+  { 1.4006589294850677e-13, 20.000000000000000, 3.7500000000000000, 0.0 },
+  { 5.2100734221993054e-13, 20.000000000000000, 4.0000000000000000, 0.0 },
+  { 1.7946903269488168e-12, 20.000000000000000, 4.2500000000000000, 0.0 },
+  { 5.7763830562279699e-12, 20.000000000000000, 4.5000000000000000, 0.0 },
+  { 1.7502433074548735e-11, 20.000000000000000, 4.7500000000000000, 0.0 },
+  { 5.0242393579718066e-11, 20.000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler009 = 2.5000000000000020e-13;
+const double toler015 = 1.0000000000000008e-12;
 //  cyl_bessel_i
 
 // Test data for nu=0.0000000000000000.
-// max(|f - f_GSL|): 2.5687255815171641e+28
-// max(|f - f_GSL| / |f_GSL|): 2.3922901025046178e-14
+// max(|f - f_GSL|): 2.5841998320082313e+28 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.4067014886642843e-14
+// mean(f - f_GSL): -1.2242902567974868e+27
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_i<double>
-data010[21] =
+data016[21] =
 {
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
-  { 27.239871823604439, 0.0000000000000000, 5.0000000000000000 },
-  { 2815.7166284662558, 0.0000000000000000, 10.000000000000000 },
-  { 339649.37329791381, 0.0000000000000000, 15.000000000000000 },
-  { 43558282.559553474, 0.0000000000000000, 20.000000000000000 },
-  { 5774560606.4663124, 0.0000000000000000, 25.000000000000000 },
-  { 781672297823.97925, 0.0000000000000000, 30.000000000000000 },
-  { 107338818494514.42, 0.0000000000000000, 35.000000000000000 },
-  { 14894774793419918., 0.0000000000000000, 40.000000000000000 },
-  { 2.0834140751773164e+18, 0.0000000000000000, 45.000000000000000 },
-  { 2.9325537838493457e+20, 0.0000000000000000, 50.000000000000000 },
-  { 4.1487895607332160e+22, 0.0000000000000000, 55.000000000000000 },
-  { 5.8940770556098216e+24, 0.0000000000000000, 60.000000000000000 },
-  { 8.4030398456255596e+26, 0.0000000000000000, 65.000000000000000 },
-  { 1.2015889579125424e+29, 0.0000000000000000, 70.000000000000000 },
-  { 1.7226390780357976e+31, 0.0000000000000000, 75.000000000000000 },
-  { 2.4751784043341661e+33, 0.0000000000000000, 80.000000000000000 },
-  { 3.5634776304081403e+35, 0.0000000000000000, 85.000000000000000 },
-  { 5.1392383455086475e+37, 0.0000000000000000, 90.000000000000000 },
-  { 7.4233258618752072e+39, 0.0000000000000000, 95.000000000000000 },
-  { 1.0737517071310986e+42, 0.0000000000000000, 100.00000000000000 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+  { 27.239871823604439, 0.0000000000000000, 5.0000000000000000, 0.0 },
+  { 2815.7166284662558, 0.0000000000000000, 10.000000000000000, 0.0 },
+  { 339649.37329791381, 0.0000000000000000, 15.000000000000000, 0.0 },
+  { 43558282.559553474, 0.0000000000000000, 20.000000000000000, 0.0 },
+  { 5774560606.4663124, 0.0000000000000000, 25.000000000000000, 0.0 },
+  { 781672297823.97925, 0.0000000000000000, 30.000000000000000, 0.0 },
+  { 107338818494514.42, 0.0000000000000000, 35.000000000000000, 0.0 },
+  { 14894774793419916., 0.0000000000000000, 40.000000000000000, 0.0 },
+  { 2.0834140751773164e+18, 0.0000000000000000, 45.000000000000000, 0.0 },
+  { 2.9325537838493457e+20, 0.0000000000000000, 50.000000000000000, 0.0 },
+  { 4.1487895607332160e+22, 0.0000000000000000, 55.000000000000000, 0.0 },
+  { 5.8940770556098216e+24, 0.0000000000000000, 60.000000000000000, 0.0 },
+  { 8.4030398456255582e+26, 0.0000000000000000, 65.000000000000000, 0.0 },
+  { 1.2015889579125424e+29, 0.0000000000000000, 70.000000000000000, 0.0 },
+  { 1.7226390780357976e+31, 0.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.4751784043341661e+33, 0.0000000000000000, 80.000000000000000, 0.0 },
+  { 3.5634776304081403e+35, 0.0000000000000000, 85.000000000000000, 0.0 },
+  { 5.1392383455086475e+37, 0.0000000000000000, 90.000000000000000, 0.0 },
+  { 7.4233258618752072e+39, 0.0000000000000000, 95.000000000000000, 0.0 },
+  { 1.0737517071310986e+42, 0.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler010 = 2.5000000000000015e-12;
+const double toler016 = 2.5000000000000015e-12;
 
 // Test data for nu=0.33333333333333331.
-// max(|f - f_GSL|): 1.0831975343747077e+28
+// max(|f - f_GSL|): 1.0986717848657750e+28 at index 20
 // max(|f - f_GSL| / |f_GSL|): 1.2017640663876795e-14
+// mean(f - f_GSL): -5.2068252642007974e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_i<double>
-data011[21] =
+data017[21] =
 {
-  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000 },
-  { 26.897553069268362, 0.33333333333333331, 5.0000000000000000 },
-  { 2799.2396097056790, 0.33333333333333331, 10.000000000000000 },
-  { 338348.63146593666, 0.33333333333333331, 15.000000000000000 },
-  { 43434263.927938424, 0.33333333333333331, 20.000000000000000 },
-  { 5761474759.6213636, 0.33333333333333331, 25.000000000000000 },
-  { 780201111830.30237, 0.33333333333333331, 30.000000000000000 },
-  { 107166066959051.91, 0.33333333333333331, 35.000000000000000 },
-  { 14873836574083764., 0.33333333333333331, 40.000000000000000 },
-  { 2.0808143020217085e+18, 0.33333333333333331, 45.000000000000000 },
-  { 2.9292639365644226e+20, 0.33333333333333331, 50.000000000000000 },
-  { 4.1445621624120489e+22, 0.33333333333333331, 55.000000000000000 },
-  { 5.8885758374365916e+24, 0.33333333333333331, 60.000000000000000 },
-  { 8.3958047021083955e+26, 0.33333333333333331, 65.000000000000000 },
-  { 1.2006287819446431e+29, 0.33333333333333331, 70.000000000000000 },
-  { 1.7213548977150022e+31, 0.33333333333333331, 75.000000000000000 },
-  { 2.4734492458444449e+33, 0.33333333333333331, 80.000000000000000 },
-  { 3.5611354547857122e+35, 0.33333333333333331, 85.000000000000000 },
-  { 5.1360491295551848e+37, 0.33333333333333331, 90.000000000000000 },
-  { 7.4189629097600431e+39, 0.33333333333333331, 95.000000000000000 },
-  { 1.0731523308358370e+42, 0.33333333333333331, 100.00000000000000 },
+  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000, 0.0 },
+  { 26.897553069268362, 0.33333333333333331, 5.0000000000000000, 0.0 },
+  { 2799.2396097056790, 0.33333333333333331, 10.000000000000000, 0.0 },
+  { 338348.63146593666, 0.33333333333333331, 15.000000000000000, 0.0 },
+  { 43434263.927938424, 0.33333333333333331, 20.000000000000000, 0.0 },
+  { 5761474759.6213636, 0.33333333333333331, 25.000000000000000, 0.0 },
+  { 780201111830.30237, 0.33333333333333331, 30.000000000000000, 0.0 },
+  { 107166066959051.91, 0.33333333333333331, 35.000000000000000, 0.0 },
+  { 14873836574083762., 0.33333333333333331, 40.000000000000000, 0.0 },
+  { 2.0808143020217085e+18, 0.33333333333333331, 45.000000000000000, 0.0 },
+  { 2.9292639365644226e+20, 0.33333333333333331, 50.000000000000000, 0.0 },
+  { 4.1445621624120489e+22, 0.33333333333333331, 55.000000000000000, 0.0 },
+  { 5.8885758374365916e+24, 0.33333333333333331, 60.000000000000000, 0.0 },
+  { 8.3958047021083941e+26, 0.33333333333333331, 65.000000000000000, 0.0 },
+  { 1.2006287819446431e+29, 0.33333333333333331, 70.000000000000000, 0.0 },
+  { 1.7213548977150022e+31, 0.33333333333333331, 75.000000000000000, 0.0 },
+  { 2.4734492458444449e+33, 0.33333333333333331, 80.000000000000000, 0.0 },
+  { 3.5611354547857122e+35, 0.33333333333333331, 85.000000000000000, 0.0 },
+  { 5.1360491295551848e+37, 0.33333333333333331, 90.000000000000000, 0.0 },
+  { 7.4189629097600431e+39, 0.33333333333333331, 95.000000000000000, 0.0 },
+  { 1.0731523308358370e+42, 0.33333333333333331, 100.00000000000000, 0.0 },
 };
-const double toler011 = 1.0000000000000008e-12;
+const double toler017 = 1.0000000000000008e-12;
 
 // Test data for nu=0.50000000000000000.
-// max(|f - f_GSL|): 6.9634127209802640e+27
-// max(|f - f_GSL| / |f_GSL|): 1.1904152155149629e-14
+// max(|f - f_GSL|): 7.1181552258909366e+27 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.2230293310085236e-14
+// mean(f - f_GSL): -3.3462733503919608e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_i<double>
-data012[21] =
+data018[21] =
 {
-  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
-  { 26.477547497559065, 0.50000000000000000, 5.0000000000000000 },
-  { 2778.7846038745711, 0.50000000000000000, 10.000000000000000 },
-  { 336729.88718706399, 0.50000000000000000, 15.000000000000000 },
-  { 43279746.272428922, 0.50000000000000000, 20.000000000000000 },
-  { 5745159748.3464680, 0.50000000000000000, 25.000000000000000 },
-  { 778366068840.44580, 0.50000000000000000, 30.000000000000000 },
-  { 106950522408567.66, 0.50000000000000000, 35.000000000000000 },
-  { 14847705549021962., 0.50000000000000000, 40.000000000000000 },
-  { 2.0775691824625661e+18, 0.50000000000000000, 45.000000000000000 },
-  { 2.9251568529912984e+20, 0.50000000000000000, 50.000000000000000 },
-  { 4.1392840094781220e+22, 0.50000000000000000, 55.000000000000000 },
-  { 5.8817065760751945e+24, 0.50000000000000000, 60.000000000000000 },
-  { 8.3867695787277258e+26, 0.50000000000000000, 65.000000000000000 },
-  { 1.1994296461653203e+29, 0.50000000000000000, 70.000000000000000 },
-  { 1.7197510246063334e+31, 0.50000000000000000, 75.000000000000000 },
-  { 2.4712895036230794e+33, 0.50000000000000000, 80.000000000000000 },
-  { 3.5582099086757769e+35, 0.50000000000000000, 85.000000000000000 },
-  { 5.1320654031231128e+37, 0.50000000000000000, 90.000000000000000 },
-  { 7.4135128383495239e+39, 0.50000000000000000, 95.000000000000000 },
-  { 1.0724035825423179e+42, 0.50000000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 26.477547497559065, 0.50000000000000000, 5.0000000000000000, 0.0 },
+  { 2778.7846038745711, 0.50000000000000000, 10.000000000000000, 0.0 },
+  { 336729.88718706399, 0.50000000000000000, 15.000000000000000, 0.0 },
+  { 43279746.272428922, 0.50000000000000000, 20.000000000000000, 0.0 },
+  { 5745159748.3464680, 0.50000000000000000, 25.000000000000000, 0.0 },
+  { 778366068840.44580, 0.50000000000000000, 30.000000000000000, 0.0 },
+  { 106950522408567.66, 0.50000000000000000, 35.000000000000000, 0.0 },
+  { 14847705549021960., 0.50000000000000000, 40.000000000000000, 0.0 },
+  { 2.0775691824625661e+18, 0.50000000000000000, 45.000000000000000, 0.0 },
+  { 2.9251568529912984e+20, 0.50000000000000000, 50.000000000000000, 0.0 },
+  { 4.1392840094781220e+22, 0.50000000000000000, 55.000000000000000, 0.0 },
+  { 5.8817065760751945e+24, 0.50000000000000000, 60.000000000000000, 0.0 },
+  { 8.3867695787277245e+26, 0.50000000000000000, 65.000000000000000, 0.0 },
+  { 1.1994296461653203e+29, 0.50000000000000000, 70.000000000000000, 0.0 },
+  { 1.7197510246063334e+31, 0.50000000000000000, 75.000000000000000, 0.0 },
+  { 2.4712895036230794e+33, 0.50000000000000000, 80.000000000000000, 0.0 },
+  { 3.5582099086757769e+35, 0.50000000000000000, 85.000000000000000, 0.0 },
+  { 5.1320654031231128e+37, 0.50000000000000000, 90.000000000000000, 0.0 },
+  { 7.4135128383495239e+39, 0.50000000000000000, 95.000000000000000, 0.0 },
+  { 1.0724035825423179e+42, 0.50000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler012 = 1.0000000000000008e-12;
+const double toler018 = 1.0000000000000008e-12;
 
 // Test data for nu=0.66666666666666663.
-// max(|f - f_GSL|): 4.4875326424095035e+27
+// max(|f - f_GSL|): 4.6422751473201760e+27 at index 20
 // max(|f - f_GSL| / |f_GSL|): 8.8432218147527708e-15
+// mean(f - f_GSL): -2.2367290021744526e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_i<double>
-data013[21] =
+data019[21] =
 {
-  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000 },
-  { 25.902310583215122, 0.66666666666666663, 5.0000000000000000 },
-  { 2750.4090423459315, 0.66666666666666663, 10.000000000000000 },
-  { 334476.98138574377, 0.66666666666666663, 15.000000000000000 },
-  { 43064361.686912313, 0.66666666666666663, 20.000000000000000 },
-  { 5722397441.9603882, 0.66666666666666663, 25.000000000000000 },
-  { 775804343498.02661, 0.66666666666666663, 30.000000000000000 },
-  { 106649495512800.88, 0.66666666666666663, 35.000000000000000 },
-  { 14811199896983756., 0.66666666666666663, 40.000000000000000 },
-  { 2.0730345814356961e+18, 0.66666666666666663, 45.000000000000000 },
-  { 2.9194166755257467e+20, 0.66666666666666663, 50.000000000000000 },
-  { 4.1319059569935374e+22, 0.66666666666666663, 55.000000000000000 },
-  { 5.8721031476386222e+24, 0.66666666666666663, 60.000000000000000 },
-  { 8.3741368248217844e+26, 0.66666666666666663, 65.000000000000000 },
-  { 1.1977528777008688e+29, 0.66666666666666663, 70.000000000000000 },
-  { 1.7175081240014333e+31, 0.66666666666666663, 75.000000000000000 },
-  { 2.4682690458513916e+33, 0.66666666666666663, 80.000000000000000 },
-  { 3.5541181975850724e+35, 0.66666666666666663, 85.000000000000000 },
-  { 5.1264933963228892e+37, 0.66666666666666663, 90.000000000000000 },
-  { 7.4058894880134064e+39, 0.66666666666666663, 95.000000000000000 },
-  { 1.0713562154788124e+42, 0.66666666666666663, 100.00000000000000 },
+  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000, 0.0 },
+  { 25.902310583215122, 0.66666666666666663, 5.0000000000000000, 0.0 },
+  { 2750.4090423459315, 0.66666666666666663, 10.000000000000000, 0.0 },
+  { 334476.98138574377, 0.66666666666666663, 15.000000000000000, 0.0 },
+  { 43064361.686912313, 0.66666666666666663, 20.000000000000000, 0.0 },
+  { 5722397441.9603882, 0.66666666666666663, 25.000000000000000, 0.0 },
+  { 775804343498.02661, 0.66666666666666663, 30.000000000000000, 0.0 },
+  { 106649495512800.88, 0.66666666666666663, 35.000000000000000, 0.0 },
+  { 14811199896983754., 0.66666666666666663, 40.000000000000000, 0.0 },
+  { 2.0730345814356961e+18, 0.66666666666666663, 45.000000000000000, 0.0 },
+  { 2.9194166755257467e+20, 0.66666666666666663, 50.000000000000000, 0.0 },
+  { 4.1319059569935374e+22, 0.66666666666666663, 55.000000000000000, 0.0 },
+  { 5.8721031476386222e+24, 0.66666666666666663, 60.000000000000000, 0.0 },
+  { 8.3741368248217830e+26, 0.66666666666666663, 65.000000000000000, 0.0 },
+  { 1.1977528777008688e+29, 0.66666666666666663, 70.000000000000000, 0.0 },
+  { 1.7175081240014333e+31, 0.66666666666666663, 75.000000000000000, 0.0 },
+  { 2.4682690458513916e+33, 0.66666666666666663, 80.000000000000000, 0.0 },
+  { 3.5541181975850724e+35, 0.66666666666666663, 85.000000000000000, 0.0 },
+  { 5.1264933963228892e+37, 0.66666666666666663, 90.000000000000000, 0.0 },
+  { 7.4058894880134064e+39, 0.66666666666666663, 95.000000000000000, 0.0 },
+  { 1.0713562154788124e+42, 0.66666666666666663, 100.00000000000000, 0.0 },
 };
-const double toler013 = 5.0000000000000039e-13;
+const double toler019 = 5.0000000000000039e-13;
 
 // Test data for nu=1.0000000000000000.
-// max(|f - f_GSL|): 5.7254726816948838e+27
+// max(|f - f_GSL|): 5.4159876718735387e+27 at index 20
 // max(|f - f_GSL| / |f_GSL|): 7.0819761463168391e-15
+// mean(f - f_GSL): 2.5933470782682662e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_i<double>
-data014[21] =
+data020[21] =
 {
-  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000 },
-  { 24.335642142450524, 1.0000000000000000, 5.0000000000000000 },
-  { 2670.9883037012560, 1.0000000000000000, 10.000000000000000 },
-  { 328124.92197020649, 1.0000000000000000, 15.000000000000000 },
-  { 42454973.385127783, 1.0000000000000000, 20.000000000000000 },
-  { 5657865129.8787022, 1.0000000000000000, 25.000000000000000 },
-  { 768532038938.95667, 1.0000000000000000, 30.000000000000000 },
-  { 105794126051896.17, 1.0000000000000000, 35.000000000000000 },
-  { 14707396163259354., 1.0000000000000000, 40.000000000000000 },
-  { 2.0601334620815780e+18, 1.0000000000000000, 45.000000000000000 },
-  { 2.9030785901035638e+20, 1.0000000000000000, 50.000000000000000 },
-  { 4.1108986452992812e+22, 1.0000000000000000, 55.000000000000000 },
-  { 5.8447515883904527e+24, 1.0000000000000000, 60.000000000000000 },
-  { 8.3381485471501302e+26, 1.0000000000000000, 65.000000000000000 },
-  { 1.1929750788892366e+29, 1.0000000000000000, 70.000000000000000 },
-  { 1.7111160152965382e+31, 1.0000000000000000, 75.000000000000000 },
-  { 2.4596595795675343e+33, 1.0000000000000000, 80.000000000000000 },
-  { 3.5424536064404024e+35, 1.0000000000000000, 85.000000000000000 },
-  { 5.1106068152566129e+37, 1.0000000000000000, 90.000000000000000 },
-  { 7.3841518091360182e+39, 1.0000000000000000, 95.000000000000000 },
-  { 1.0683693903381569e+42, 1.0000000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000, 0.0 },
+  { 24.335642142450524, 1.0000000000000000, 5.0000000000000000, 0.0 },
+  { 2670.9883037012560, 1.0000000000000000, 10.000000000000000, 0.0 },
+  { 328124.92197020649, 1.0000000000000000, 15.000000000000000, 0.0 },
+  { 42454973.385127783, 1.0000000000000000, 20.000000000000000, 0.0 },
+  { 5657865129.8787022, 1.0000000000000000, 25.000000000000000, 0.0 },
+  { 768532038938.95667, 1.0000000000000000, 30.000000000000000, 0.0 },
+  { 105794126051896.17, 1.0000000000000000, 35.000000000000000, 0.0 },
+  { 14707396163259352., 1.0000000000000000, 40.000000000000000, 0.0 },
+  { 2.0601334620815780e+18, 1.0000000000000000, 45.000000000000000, 0.0 },
+  { 2.9030785901035638e+20, 1.0000000000000000, 50.000000000000000, 0.0 },
+  { 4.1108986452992812e+22, 1.0000000000000000, 55.000000000000000, 0.0 },
+  { 5.8447515883904527e+24, 1.0000000000000000, 60.000000000000000, 0.0 },
+  { 8.3381485471501288e+26, 1.0000000000000000, 65.000000000000000, 0.0 },
+  { 1.1929750788892366e+29, 1.0000000000000000, 70.000000000000000, 0.0 },
+  { 1.7111160152965382e+31, 1.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.4596595795675343e+33, 1.0000000000000000, 80.000000000000000, 0.0 },
+  { 3.5424536064404024e+35, 1.0000000000000000, 85.000000000000000, 0.0 },
+  { 5.1106068152566129e+37, 1.0000000000000000, 90.000000000000000, 0.0 },
+  { 7.3841518091360182e+39, 1.0000000000000000, 95.000000000000000, 0.0 },
+  { 1.0683693903381569e+42, 1.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler014 = 5.0000000000000039e-13;
+const double toler020 = 5.0000000000000039e-13;
 
 // Test data for nu=2.0000000000000000.
-// max(|f - f_GSL|): 6.3444427013375739e+27
-// max(|f - f_GSL| / |f_GSL|): 6.0286366727804324e-15
+// max(|f - f_GSL|): 6.1897001964269014e+27 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.0553248866140883e-14
+// mean(f - f_GSL): 2.9514880793266611e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_i<double>
-data015[21] =
+data021[21] =
 {
-  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000 },
-  { 17.505614966624233, 2.0000000000000000, 5.0000000000000000 },
-  { 2281.5189677260046, 2.0000000000000000, 10.000000000000000 },
-  { 295899.38370188628, 2.0000000000000000, 15.000000000000000 },
-  { 39312785.221040756, 2.0000000000000000, 20.000000000000000 },
-  { 5321931396.0760155, 2.0000000000000000, 25.000000000000000 },
-  { 730436828561.38013, 2.0000000000000000, 30.000000000000000 },
-  { 101293439862977.19, 2.0000000000000000, 35.000000000000000 },
-  { 14159404985256922., 2.0000000000000000, 40.000000000000000 },
-  { 1.9918525879736883e+18, 2.0000000000000000, 45.000000000000000 },
-  { 2.8164306402451938e+20, 2.0000000000000000, 50.000000000000000 },
-  { 3.9993023372677540e+22, 2.0000000000000000, 55.000000000000000 },
-  { 5.6992520026634433e+24, 2.0000000000000000, 60.000000000000000 },
-  { 8.1464814287900378e+26, 2.0000000000000000, 65.000000000000000 },
-  { 1.1675039556585663e+29, 2.0000000000000000, 70.000000000000000 },
-  { 1.6770093176278926e+31, 2.0000000000000000, 75.000000000000000 },
-  { 2.4136869148449879e+33, 2.0000000000000000, 80.000000000000000 },
-  { 3.4801257808448186e+35, 2.0000000000000000, 85.000000000000000 },
-  { 5.0256693051696307e+37, 2.0000000000000000, 90.000000000000000 },
-  { 7.2678700343145818e+39, 2.0000000000000000, 95.000000000000000 },
-  { 1.0523843193243042e+42, 2.0000000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 17.505614966624233, 2.0000000000000000, 5.0000000000000000, 0.0 },
+  { 2281.5189677260046, 2.0000000000000000, 10.000000000000000, 0.0 },
+  { 295899.38370188628, 2.0000000000000000, 15.000000000000000, 0.0 },
+  { 39312785.221040756, 2.0000000000000000, 20.000000000000000, 0.0 },
+  { 5321931396.0760155, 2.0000000000000000, 25.000000000000000, 0.0 },
+  { 730436828561.38013, 2.0000000000000000, 30.000000000000000, 0.0 },
+  { 101293439862977.19, 2.0000000000000000, 35.000000000000000, 0.0 },
+  { 14159404985256920., 2.0000000000000000, 40.000000000000000, 0.0 },
+  { 1.9918525879736883e+18, 2.0000000000000000, 45.000000000000000, 0.0 },
+  { 2.8164306402451938e+20, 2.0000000000000000, 50.000000000000000, 0.0 },
+  { 3.9993023372677540e+22, 2.0000000000000000, 55.000000000000000, 0.0 },
+  { 5.6992520026634433e+24, 2.0000000000000000, 60.000000000000000, 0.0 },
+  { 8.1464814287900364e+26, 2.0000000000000000, 65.000000000000000, 0.0 },
+  { 1.1675039556585663e+29, 2.0000000000000000, 70.000000000000000, 0.0 },
+  { 1.6770093176278926e+31, 2.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.4136869148449879e+33, 2.0000000000000000, 80.000000000000000, 0.0 },
+  { 3.4801257808448186e+35, 2.0000000000000000, 85.000000000000000, 0.0 },
+  { 5.0256693051696307e+37, 2.0000000000000000, 90.000000000000000, 0.0 },
+  { 7.2678700343145818e+39, 2.0000000000000000, 95.000000000000000, 0.0 },
+  { 1.0523843193243042e+42, 2.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler015 = 5.0000000000000039e-13;
+const double toler021 = 1.0000000000000008e-12;
 
 // Test data for nu=5.0000000000000000.
-// max(|f - f_GSL|): 7.7371252455336267e+26
-// max(|f - f_GSL| / |f_GSL|): 1.6729319922562276e-15
+// max(|f - f_GSL|): 1.0831975343747077e+27 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.0289491375166011e-14
+// mean(f - f_GSL): -5.2041812077613416e+25
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_i<double>
-data016[21] =
+data022[21] =
 {
-  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000 },
-  { 2.1579745473225476, 5.0000000000000000, 5.0000000000000000 },
-  { 777.18828640326012, 5.0000000000000000, 10.000000000000000 },
-  { 144572.01120063409, 5.0000000000000000, 15.000000000000000 },
-  { 23018392.213413671, 5.0000000000000000, 20.000000000000000 },
-  { 3472466208.7419176, 5.0000000000000000, 25.000000000000000 },
-  { 512151465476.93494, 5.0000000000000000, 30.000000000000000 },
-  { 74756743552251.547, 5.0000000000000000, 35.000000000000000 },
-  { 10858318337624280., 5.0000000000000000, 40.000000000000000 },
-  { 1.5736087399245911e+18, 5.0000000000000000, 45.000000000000000 },
-  { 2.2785483079112825e+20, 5.0000000000000000, 50.000000000000000 },
-  { 3.2989391052963687e+22, 5.0000000000000000, 55.000000000000000 },
-  { 4.7777652072561732e+24, 5.0000000000000000, 60.000000000000000 },
-  { 6.9232165147172657e+26, 5.0000000000000000, 65.000000000000000 },
-  { 1.0038643002095155e+29, 5.0000000000000000, 70.000000000000000 },
-  { 1.4566328222327073e+31, 5.0000000000000000, 75.000000000000000 },
-  { 2.1151488565944835e+33, 5.0000000000000000, 80.000000000000000 },
-  { 3.0735883450768239e+35, 5.0000000000000000, 85.000000000000000 },
-  { 4.4694790189230327e+37, 5.0000000000000000, 90.000000000000000 },
-  { 6.5037505570430995e+39, 5.0000000000000000, 95.000000000000000 },
-  { 9.4700938730355882e+41, 5.0000000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000, 0.0 },
+  { 2.1579745473225476, 5.0000000000000000, 5.0000000000000000, 0.0 },
+  { 777.18828640326012, 5.0000000000000000, 10.000000000000000, 0.0 },
+  { 144572.01120063409, 5.0000000000000000, 15.000000000000000, 0.0 },
+  { 23018392.213413671, 5.0000000000000000, 20.000000000000000, 0.0 },
+  { 3472466208.7419176, 5.0000000000000000, 25.000000000000000, 0.0 },
+  { 512151465476.93494, 5.0000000000000000, 30.000000000000000, 0.0 },
+  { 74756743552251.547, 5.0000000000000000, 35.000000000000000, 0.0 },
+  { 10858318337624278., 5.0000000000000000, 40.000000000000000, 0.0 },
+  { 1.5736087399245911e+18, 5.0000000000000000, 45.000000000000000, 0.0 },
+  { 2.2785483079112825e+20, 5.0000000000000000, 50.000000000000000, 0.0 },
+  { 3.2989391052963687e+22, 5.0000000000000000, 55.000000000000000, 0.0 },
+  { 4.7777652072561732e+24, 5.0000000000000000, 60.000000000000000, 0.0 },
+  { 6.9232165147172657e+26, 5.0000000000000000, 65.000000000000000, 0.0 },
+  { 1.0038643002095155e+29, 5.0000000000000000, 70.000000000000000, 0.0 },
+  { 1.4566328222327073e+31, 5.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.1151488565944835e+33, 5.0000000000000000, 80.000000000000000, 0.0 },
+  { 3.0735883450768239e+35, 5.0000000000000000, 85.000000000000000, 0.0 },
+  { 4.4694790189230327e+37, 5.0000000000000000, 90.000000000000000, 0.0 },
+  { 6.5037505570430995e+39, 5.0000000000000000, 95.000000000000000, 0.0 },
+  { 9.4700938730355882e+41, 5.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler016 = 2.5000000000000020e-13;
+const double toler022 = 1.0000000000000008e-12;
 
 // Test data for nu=10.000000000000000.
-// max(|f - f_GSL|): 2.3211375736600880e+26
-// max(|f - f_GSL| / |f_GSL|): 3.0834307473515225e-15
+// max(|f - f_GSL|): 1.5474250491067253e+26 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.2009151331790140e-14
+// mean(f - f_GSL): 7.4845081675400805e+24
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_i<double>
-data017[21] =
+data023[21] =
 {
-  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000 },
-  { 0.0045800444191760525, 10.000000000000000, 5.0000000000000000 },
-  { 21.891706163723381, 10.000000000000000, 10.000000000000000 },
-  { 12267.475049806462, 10.000000000000000, 15.000000000000000 },
-  { 3540200.2090195213, 10.000000000000000, 20.000000000000000 },
-  { 771298871.17072666, 10.000000000000000, 25.000000000000000 },
-  { 145831809975.96710, 10.000000000000000, 30.000000000000000 },
-  { 25449470018534.777, 10.000000000000000, 35.000000000000000 },
-  { 4228469210516757.5, 10.000000000000000, 40.000000000000000 },
-  { 6.8049404557505165e+17, 10.000000000000000, 45.000000000000000 },
-  { 1.0715971594776370e+20, 10.000000000000000, 50.000000000000000 },
-  { 1.6618215752886714e+22, 10.000000000000000, 55.000000000000000 },
-  { 2.5486246072566784e+24, 10.000000000000000, 60.000000000000000 },
-  { 3.8764628702155481e+26, 10.000000000000000, 65.000000000000000 },
-  { 5.8592538145409686e+28, 10.000000000000000, 70.000000000000000 },
-  { 8.8135370711317444e+30, 10.000000000000000, 75.000000000000000 },
-  { 1.3207418268325279e+33, 10.000000000000000, 80.000000000000000 },
-  { 1.9732791360862190e+35, 10.000000000000000, 85.000000000000000 },
-  { 2.9411893748384672e+37, 10.000000000000000, 90.000000000000000 },
-  { 4.3754494922439984e+39, 10.000000000000000, 95.000000000000000 },
-  { 6.4989755247201446e+41, 10.000000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000, 0.0 },
+  { 0.0045800444191760525, 10.000000000000000, 5.0000000000000000, 0.0 },
+  { 21.891706163723381, 10.000000000000000, 10.000000000000000, 0.0 },
+  { 12267.475049806462, 10.000000000000000, 15.000000000000000, 0.0 },
+  { 3540200.2090195213, 10.000000000000000, 20.000000000000000, 0.0 },
+  { 771298871.17072666, 10.000000000000000, 25.000000000000000, 0.0 },
+  { 145831809975.96710, 10.000000000000000, 30.000000000000000, 0.0 },
+  { 25449470018534.777, 10.000000000000000, 35.000000000000000, 0.0 },
+  { 4228469210516757.0, 10.000000000000000, 40.000000000000000, 0.0 },
+  { 6.8049404557505165e+17, 10.000000000000000, 45.000000000000000, 0.0 },
+  { 1.0715971594776370e+20, 10.000000000000000, 50.000000000000000, 0.0 },
+  { 1.6618215752886714e+22, 10.000000000000000, 55.000000000000000, 0.0 },
+  { 2.5486246072566784e+24, 10.000000000000000, 60.000000000000000, 0.0 },
+  { 3.8764628702155475e+26, 10.000000000000000, 65.000000000000000, 0.0 },
+  { 5.8592538145409686e+28, 10.000000000000000, 70.000000000000000, 0.0 },
+  { 8.8135370711317444e+30, 10.000000000000000, 75.000000000000000, 0.0 },
+  { 1.3207418268325279e+33, 10.000000000000000, 80.000000000000000, 0.0 },
+  { 1.9732791360862190e+35, 10.000000000000000, 85.000000000000000, 0.0 },
+  { 2.9411893748384672e+37, 10.000000000000000, 90.000000000000000, 0.0 },
+  { 4.3754494922439984e+39, 10.000000000000000, 95.000000000000000, 0.0 },
+  { 6.4989755247201446e+41, 10.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler017 = 2.5000000000000020e-13;
+const double toler023 = 1.0000000000000008e-12;
 
 // Test data for nu=20.000000000000000.
-// max(|f - f_GSL|): 1.9342813113834067e+25
-// max(|f - f_GSL| / |f_GSL|): 4.7061265485304859e-15
+// max(|f - f_GSL|): 1.9342813113834067e+25 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.5819230756119302e-14
+// mean(f - f_GSL): 1.0213821732843951e+24
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_i<double>
-data018[21] =
+data024[21] =
 {
-  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000 },
-  { 5.0242393579718066e-11, 20.000000000000000, 5.0000000000000000 },
-  { 0.00012507997356449481, 20.000000000000000, 10.000000000000000 },
-  { 1.6470152535015836, 20.000000000000000, 15.000000000000000 },
-  { 3188.7503288536154, 20.000000000000000, 20.000000000000000 },
-  { 2449840.5422952301, 20.000000000000000, 25.000000000000000 },
-  { 1126985104.4483771, 20.000000000000000, 30.000000000000000 },
-  { 379617876611.88580, 20.000000000000000, 35.000000000000000 },
-  { 104459633129479.89, 20.000000000000000, 40.000000000000000 },
-  { 25039579987216524., 20.000000000000000, 45.000000000000000 },
-  { 5.4420084027529984e+18, 20.000000000000000, 50.000000000000000 },
-  { 1.1007498584335495e+21, 20.000000000000000, 55.000000000000000 },
-  { 2.1091734863057236e+23, 20.000000000000000, 60.000000000000000 },
-  { 3.8763618091286899e+25, 20.000000000000000, 65.000000000000000 },
-  { 6.8946130527930870e+27, 20.000000000000000, 70.000000000000000 },
-  { 1.1946319948836447e+30, 20.000000000000000, 75.000000000000000 },
-  { 2.0265314377577587e+32, 20.000000000000000, 80.000000000000000 },
-  { 3.3784665214179985e+34, 20.000000000000000, 85.000000000000000 },
-  { 5.5516089411796646e+36, 20.000000000000000, 90.000000000000000 },
-  { 9.0129310795305151e+38, 20.000000000000000, 95.000000000000000 },
-  { 1.4483461256427176e+41, 20.000000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000, 0.0 },
+  { 5.0242393579718066e-11, 20.000000000000000, 5.0000000000000000, 0.0 },
+  { 0.00012507997356449481, 20.000000000000000, 10.000000000000000, 0.0 },
+  { 1.6470152535015836, 20.000000000000000, 15.000000000000000, 0.0 },
+  { 3188.7503288536154, 20.000000000000000, 20.000000000000000, 0.0 },
+  { 2449840.5422952301, 20.000000000000000, 25.000000000000000, 0.0 },
+  { 1126985104.4483771, 20.000000000000000, 30.000000000000000, 0.0 },
+  { 379617876611.88580, 20.000000000000000, 35.000000000000000, 0.0 },
+  { 104459633129479.88, 20.000000000000000, 40.000000000000000, 0.0 },
+  { 25039579987216524., 20.000000000000000, 45.000000000000000, 0.0 },
+  { 5.4420084027529984e+18, 20.000000000000000, 50.000000000000000, 0.0 },
+  { 1.1007498584335495e+21, 20.000000000000000, 55.000000000000000, 0.0 },
+  { 2.1091734863057236e+23, 20.000000000000000, 60.000000000000000, 0.0 },
+  { 3.8763618091286891e+25, 20.000000000000000, 65.000000000000000, 0.0 },
+  { 6.8946130527930870e+27, 20.000000000000000, 70.000000000000000, 0.0 },
+  { 1.1946319948836447e+30, 20.000000000000000, 75.000000000000000, 0.0 },
+  { 2.0265314377577587e+32, 20.000000000000000, 80.000000000000000, 0.0 },
+  { 3.3784665214179985e+34, 20.000000000000000, 85.000000000000000, 0.0 },
+  { 5.5516089411796646e+36, 20.000000000000000, 90.000000000000000, 0.0 },
+  { 9.0129310795305151e+38, 20.000000000000000, 95.000000000000000, 0.0 },
+  { 1.4483461256427176e+41, 20.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler018 = 2.5000000000000020e-13;
+const double toler024 = 1.0000000000000008e-12;
 
 // Test data for nu=50.000000000000000.
-// max(|f - f_GSL|): 4.5452777397620335e+22
+// max(|f - f_GSL|): 4.4862481587261630e+22 at index 20
 // max(|f - f_GSL| / |f_GSL|): 6.0191728870880627e-14
+// mean(f - f_GSL): 2.1246678955085789e+21
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_i<double>
-data019[21] =
+data025[21] =
 {
-  { 0.0000000000000000, 50.000000000000000, 0.0000000000000000 },
-  { 2.9314696468108517e-45, 50.000000000000000, 5.0000000000000000 },
-  { 4.7568945607268442e-30, 50.000000000000000, 10.000000000000000 },
-  { 5.5468372730667069e-21, 50.000000000000000, 15.000000000000000 },
-  { 2.2551205757604056e-14, 50.000000000000000, 20.000000000000000 },
-  { 4.5344251866130257e-09, 50.000000000000000, 25.000000000000000 },
-  { 0.00014590106916468940, 50.000000000000000, 30.000000000000000 },
-  { 1.3965549457254882, 50.000000000000000, 35.000000000000000 },
-  { 5726.8656631289896, 50.000000000000000, 40.000000000000000 },
-  { 12672593.113027781, 50.000000000000000, 45.000000000000000 },
-  { 17650802430.016712, 50.000000000000000, 50.000000000000000 },
-  { 17220231607789.926, 50.000000000000000, 55.000000000000000 },
-  { 12704607933652176., 50.000000000000000, 60.000000000000000 },
-  { 7.4989491942193725e+18, 50.000000000000000, 65.000000000000000 },
-  { 3.6944034898904922e+21, 50.000000000000000, 70.000000000000000 },
-  { 1.5691634774370186e+24, 50.000000000000000, 75.000000000000000 },
-  { 5.8927749458163587e+26, 50.000000000000000, 80.000000000000000 },
-  { 1.9958849054749339e+29, 50.000000000000000, 85.000000000000000 },
-  { 6.1946050361781500e+31, 50.000000000000000, 90.000000000000000 },
-  { 1.7845429728697119e+34, 50.000000000000000, 95.000000000000000 },
-  { 4.8219580855940819e+36, 50.000000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 50.000000000000000, 0.0000000000000000, 0.0 },
+  { 2.9314696468108517e-45, 50.000000000000000, 5.0000000000000000, 0.0 },
+  { 4.7568945607268435e-30, 50.000000000000000, 10.000000000000000, 0.0 },
+  { 5.5468372730667069e-21, 50.000000000000000, 15.000000000000000, 0.0 },
+  { 2.2551205757604056e-14, 50.000000000000000, 20.000000000000000, 0.0 },
+  { 4.5344251866130257e-09, 50.000000000000000, 25.000000000000000, 0.0 },
+  { 0.00014590106916468940, 50.000000000000000, 30.000000000000000, 0.0 },
+  { 1.3965549457254882, 50.000000000000000, 35.000000000000000, 0.0 },
+  { 5726.8656631289887, 50.000000000000000, 40.000000000000000, 0.0 },
+  { 12672593.113027781, 50.000000000000000, 45.000000000000000, 0.0 },
+  { 17650802430.016712, 50.000000000000000, 50.000000000000000, 0.0 },
+  { 17220231607789.926, 50.000000000000000, 55.000000000000000, 0.0 },
+  { 12704607933652176., 50.000000000000000, 60.000000000000000, 0.0 },
+  { 7.4989491942193715e+18, 50.000000000000000, 65.000000000000000, 0.0 },
+  { 3.6944034898904922e+21, 50.000000000000000, 70.000000000000000, 0.0 },
+  { 1.5691634774370186e+24, 50.000000000000000, 75.000000000000000, 0.0 },
+  { 5.8927749458163587e+26, 50.000000000000000, 80.000000000000000, 0.0 },
+  { 1.9958849054749339e+29, 50.000000000000000, 85.000000000000000, 0.0 },
+  { 6.1946050361781500e+31, 50.000000000000000, 90.000000000000000, 0.0 },
+  { 1.7845429728697119e+34, 50.000000000000000, 95.000000000000000, 0.0 },
+  { 4.8219580855940819e+36, 50.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler019 = 5.0000000000000029e-12;
+const double toler025 = 5.0000000000000029e-12;
 
 // Test data for nu=100.00000000000000.
-// max(|f - f_GSL|): 186646528.00000000
+// max(|f - f_GSL|): 185597952.00000000 at index 20
 // max(|f - f_GSL| / |f_GSL|): 2.8278213985558577e-13
+// mean(f - f_GSL): 8855366.2060860656
+// variance(f - f_GSL): 4.2527168883984777e+19
+// stddev(f - f_GSL): 6521285830.5693655
 const testcase_cyl_bessel_i<double>
-data020[21] =
+data026[21] =
 {
-  { 0.0000000000000000, 100.00000000000000, 0.0000000000000000 },
-  { 7.0935514885313123e-119, 100.00000000000000, 5.0000000000000000 },
-  { 1.0823442017492018e-88, 100.00000000000000, 10.000000000000000 },
-  { 5.9887888536468904e-71, 100.00000000000000, 15.000000000000000 },
-  { 2.8703193216428771e-58, 100.00000000000000, 20.000000000000000 },
-  { 2.4426896913122370e-48, 100.00000000000000, 25.000000000000000 },
-  { 3.9476420053334271e-40, 100.00000000000000, 30.000000000000000 },
-  { 4.2836596180818780e-33, 100.00000000000000, 35.000000000000000 },
-  { 6.6249380222596129e-27, 100.00000000000000, 40.000000000000000 },
-  { 2.3702587262788900e-21, 100.00000000000000, 45.000000000000000 },
-  { 2.7278879470966917e-16, 100.00000000000000, 50.000000000000000 },
-  { 1.2763258878228082e-11, 100.00000000000000, 55.000000000000000 },
-  { 2.8832770906491972e-07, 100.00000000000000, 60.000000000000000 },
-  { 0.0035805902717061227, 100.00000000000000, 65.000000000000000 },
-  { 27.017219102595387, 100.00000000000000, 70.000000000000000 },
-  { 134001.44891209516, 100.00000000000000, 75.000000000000000 },
-  { 465194832.85060996, 100.00000000000000, 80.000000000000000 },
-  { 1189280653119.4814, 100.00000000000000, 85.000000000000000 },
-  { 2334119331258728.0, 100.00000000000000, 90.000000000000000 },
-  { 3.6399223078502436e+18, 100.00000000000000, 95.000000000000000 },
-  { 4.6415349416162005e+21, 100.00000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 100.00000000000000, 0.0000000000000000, 0.0 },
+  { 7.0935514885313123e-119, 100.00000000000000, 5.0000000000000000, 0.0 },
+  { 1.0823442017492015e-88, 100.00000000000000, 10.000000000000000, 0.0 },
+  { 5.9887888536468904e-71, 100.00000000000000, 15.000000000000000, 0.0 },
+  { 2.8703193216428771e-58, 100.00000000000000, 20.000000000000000, 0.0 },
+  { 2.4426896913122370e-48, 100.00000000000000, 25.000000000000000, 0.0 },
+  { 3.9476420053334271e-40, 100.00000000000000, 30.000000000000000, 0.0 },
+  { 4.2836596180818780e-33, 100.00000000000000, 35.000000000000000, 0.0 },
+  { 6.6249380222596129e-27, 100.00000000000000, 40.000000000000000, 0.0 },
+  { 2.3702587262788900e-21, 100.00000000000000, 45.000000000000000, 0.0 },
+  { 2.7278879470966917e-16, 100.00000000000000, 50.000000000000000, 0.0 },
+  { 1.2763258878228082e-11, 100.00000000000000, 55.000000000000000, 0.0 },
+  { 2.8832770906491972e-07, 100.00000000000000, 60.000000000000000, 0.0 },
+  { 0.0035805902717061223, 100.00000000000000, 65.000000000000000, 0.0 },
+  { 27.017219102595387, 100.00000000000000, 70.000000000000000, 0.0 },
+  { 134001.44891209516, 100.00000000000000, 75.000000000000000, 0.0 },
+  { 465194832.85060996, 100.00000000000000, 80.000000000000000, 0.0 },
+  { 1189280653119.4814, 100.00000000000000, 85.000000000000000, 0.0 },
+  { 2334119331258728.0, 100.00000000000000, 90.000000000000000, 0.0 },
+  { 3.6399223078502436e+18, 100.00000000000000, 95.000000000000000, 0.0 },
+  { 4.6415349416162005e+21, 100.00000000000000, 100.00000000000000, 0.0 },
 };
-const double toler020 = 2.5000000000000014e-11;
+const double toler026 = 2.5000000000000014e-11;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_cyl_bessel_i<Tp> (&data)[Num], Tp toler)
+  test(const testcase_cyl_bessel_i<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::cyl_bessel_i(data[i].nu, data[i].x);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::cyl_bessel_i(data[i].nu, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
@@ -668,12 +728,6 @@ template<typename Tp, unsigned int Num>
 int
 main()
 {
-  test(data001, toler001);
-  test(data002, toler002);
-  test(data003, toler003);
-  test(data004, toler004);
-  test(data005, toler005);
-  test(data006, toler006);
   test(data007, toler007);
   test(data008, toler008);
   test(data009, toler009);
@@ -688,5 +742,11 @@ main()
   test(data018, toler018);
   test(data019, toler019);
   test(data020, toler020);
+  test(data021, toler021);
+  test(data022, toler022);
+  test(data023, toler023);
+  test(data024, toler024);
+  test(data025, toler025);
+  test(data026, toler026);
   return 0;
 }
index 237f484..7070149 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for nu=0.0000000000000000.
-// max(|f - f_GSL|): 1.6653345369377348e-16
-// max(|f - f_GSL| / |f_GSL|): 6.5276306654894409e-16
+// max(|f - f_GSL|): 1.0547118733938987e-14 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.0733293243042314e-14
+// mean(f - f_GSL): -2.4682636886755713e-15
+// variance(f - f_GSL): 3.4179114172015086e-31
+// stddev(f - f_GSL): 5.8462906335568952e-16
 const testcase_cyl_bessel_j<double>
-data001[21] =
+data007[21] =
 {
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
-  { 0.98443592929585266, 0.0000000000000000, 0.25000000000000000 },
-  { 0.93846980724081297, 0.0000000000000000, 0.50000000000000000 },
-  { 0.86424227516664853, 0.0000000000000000, 0.75000000000000000 },
-  { 0.76519768655796661, 0.0000000000000000, 1.0000000000000000 },
-  { 0.64590608527128535, 0.0000000000000000, 1.2500000000000000 },
-  { 0.51182767173591814, 0.0000000000000000, 1.5000000000000000 },
-  { 0.36903253018515075, 0.0000000000000000, 1.7500000000000000 },
-  { 0.22389077914123562, 0.0000000000000000, 2.0000000000000000 },
-  { 0.082749851288734022, 0.0000000000000000, 2.2500000000000000 },
-  { -0.048383776468197998, 0.0000000000000000, 2.5000000000000000 },
-  { -0.16414142780851368, 0.0000000000000000, 2.7500000000000000 },
-  { -0.26005195490193334, 0.0000000000000000, 3.0000000000000000 },
-  { -0.33275080217061132, 0.0000000000000000, 3.2500000000000000 },
-  { -0.38012773998726335, 0.0000000000000000, 3.5000000000000000 },
-  { -0.40140605493617426, 0.0000000000000000, 3.7500000000000000 },
-  { -0.39714980986384740, 0.0000000000000000, 4.0000000000000000 },
-  { -0.36919977029989554, 0.0000000000000000, 4.2500000000000000 },
-  { -0.32054250898512149, 0.0000000000000000, 4.5000000000000000 },
-  { -0.25512082749137405, 0.0000000000000000, 4.7500000000000000 },
-  { -0.17759677131433835, 0.0000000000000000, 5.0000000000000000 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.98443592929585266, 0.0000000000000000, 0.25000000000000000, 0.0 },
+  { 0.93846980724081297, 0.0000000000000000, 0.50000000000000000, 0.0 },
+  { 0.86424227516664853, 0.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.76519768655796661, 0.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.64590608527128535, 0.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.51182767173591814, 0.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.36903253018515075, 0.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.22389077914123562, 0.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.082749851288734022, 0.0000000000000000, 2.2500000000000000, 0.0 },
+  { -0.048383776468197998, 0.0000000000000000, 2.5000000000000000, 0.0 },
+  { -0.16414142780851368, 0.0000000000000000, 2.7500000000000000, 0.0 },
+  { -0.26005195490193334, 0.0000000000000000, 3.0000000000000000, 0.0 },
+  { -0.33275080217061132, 0.0000000000000000, 3.2500000000000000, 0.0 },
+  { -0.38012773998726335, 0.0000000000000000, 3.5000000000000000, 0.0 },
+  { -0.40140605493617426, 0.0000000000000000, 3.7500000000000000, 0.0 },
+  { -0.39714980986384740, 0.0000000000000000, 4.0000000000000000, 0.0 },
+  { -0.36919977029989554, 0.0000000000000000, 4.2500000000000000, 0.0 },
+  { -0.32054250898512149, 0.0000000000000000, 4.5000000000000000, 0.0 },
+  { -0.25512082749137405, 0.0000000000000000, 4.7500000000000000, 0.0 },
+  { -0.17759677131433835, 0.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler001 = 2.5000000000000020e-13;
+const double toler007 = 1.0000000000000008e-12;
 
 // Test data for nu=0.33333333333333331.
-// max(|f - f_GSL|): 7.7715611723760958e-16
-// max(|f - f_GSL| / |f_GSL|): 1.2121143083098064e-15
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 4
+// max(|f - f_GSL| / |f_GSL|): 8.0807620553987087e-16
+// mean(f - f_GSL): 1.2423924323186276e-16
+// variance(f - f_GSL): 4.4388099670639150e-33
+// stddev(f - f_GSL): 6.6624394684409066e-17
 const testcase_cyl_bessel_j<double>
-data002[21] =
+data008[21] =
 {
-  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000 },
-  { 0.55338359549647709, 0.33333333333333331, 0.25000000000000000 },
-  { 0.67283082949794537, 0.33333333333333331, 0.50000000000000000 },
-  { 0.72490863199379008, 0.33333333333333331, 0.75000000000000000 },
-  { 0.73087640216944760, 0.33333333333333331, 1.0000000000000000 },
-  { 0.69953374433894455, 0.33333333333333331, 1.2500000000000000 },
-  { 0.63713263706489176, 0.33333333333333331, 1.5000000000000000 },
-  { 0.54956352730788460, 0.33333333333333331, 1.7500000000000000 },
-  { 0.44293981814857586, 0.33333333333333331, 2.0000000000000000 },
-  { 0.32366988946292502, 0.33333333333333331, 2.2500000000000000 },
-  { 0.19832093341860796, 0.33333333333333331, 2.5000000000000000 },
-  { 0.073389637874297489, 0.33333333333333331, 2.7500000000000000 },
-  { -0.044963820940233351, 0.33333333333333331, 3.0000000000000000 },
-  { -0.15118395956666372, 0.33333333333333331, 3.2500000000000000 },
-  { -0.24056593952693625, 0.33333333333333331, 3.5000000000000000 },
-  { -0.30946094681921288, 0.33333333333333331, 3.7500000000000000 },
-  { -0.35542737345457609, 0.33333333333333331, 4.0000000000000000 },
-  { -0.37731852825457068, 0.33333333333333331, 4.2500000000000000 },
-  { -0.37530189159358079, 0.33333333333333331, 4.5000000000000000 },
-  { -0.35080916720916927, 0.33333333333333331, 4.7500000000000000 },
-  { -0.30642046380026405, 0.33333333333333331, 5.0000000000000000 },
+  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000, 0.0 },
+  { 0.55338359549647709, 0.33333333333333331, 0.25000000000000000, 0.0 },
+  { 0.67283082949794537, 0.33333333333333331, 0.50000000000000000, 0.0 },
+  { 0.72490863199379019, 0.33333333333333331, 0.75000000000000000, 0.0 },
+  { 0.73087640216944749, 0.33333333333333331, 1.0000000000000000, 0.0 },
+  { 0.69953374433894455, 0.33333333333333331, 1.2500000000000000, 0.0 },
+  { 0.63713263706489176, 0.33333333333333331, 1.5000000000000000, 0.0 },
+  { 0.54956352730788460, 0.33333333333333331, 1.7500000000000000, 0.0 },
+  { 0.44293981814857586, 0.33333333333333331, 2.0000000000000000, 0.0 },
+  { 0.32366988946292502, 0.33333333333333331, 2.2500000000000000, 0.0 },
+  { 0.19832093341860796, 0.33333333333333331, 2.5000000000000000, 0.0 },
+  { 0.073389637874297461, 0.33333333333333331, 2.7500000000000000, 0.0 },
+  { -0.044963820940233351, 0.33333333333333331, 3.0000000000000000, 0.0 },
+  { -0.15118395956666372, 0.33333333333333331, 3.2500000000000000, 0.0 },
+  { -0.24056593952693622, 0.33333333333333331, 3.5000000000000000, 0.0 },
+  { -0.30946094681921288, 0.33333333333333331, 3.7500000000000000, 0.0 },
+  { -0.35542737345457609, 0.33333333333333331, 4.0000000000000000, 0.0 },
+  { -0.37731852825457068, 0.33333333333333331, 4.2500000000000000, 0.0 },
+  { -0.37530189159358079, 0.33333333333333331, 4.5000000000000000, 0.0 },
+  { -0.35080916720916927, 0.33333333333333331, 4.7500000000000000, 0.0 },
+  { -0.30642046380026405, 0.33333333333333331, 5.0000000000000000, 0.0 },
 };
-const double toler002 = 2.5000000000000020e-13;
+const double toler008 = 2.5000000000000020e-13;
 
 // Test data for nu=0.50000000000000000.
-// max(|f - f_GSL|): 7.7715611723760958e-16
-// max(|f - f_GSL| / |f_GSL|): 1.1959227189513475e-15
+// max(|f - f_GSL|): 5.5511151231257827e-16 at index 6
+// max(|f - f_GSL| / |f_GSL|): 8.6943152885834554e-16
+// mean(f - f_GSL): 1.6058583034756728e-16
+// variance(f - f_GSL): 1.3538599676919272e-33
+// stddev(f - f_GSL): 3.6794836155253190e-17
 const testcase_cyl_bessel_j<double>
-data003[21] =
+data009[21] =
 {
-  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
-  { 0.39479959874136972, 0.50000000000000000, 0.25000000000000000 },
-  { 0.54097378993452760, 0.50000000000000000, 0.50000000000000000 },
-  { 0.62800587637588623, 0.50000000000000000, 0.75000000000000000 },
-  { 0.67139670714180244, 0.50000000000000000, 1.0000000000000000 },
-  { 0.67724253810014312, 0.50000000000000000, 1.2500000000000000 },
-  { 0.64983807475374655, 0.50000000000000000, 1.5000000000000000 },
-  { 0.59348525447147382, 0.50000000000000000, 1.7500000000000000 },
-  { 0.51301613656182721, 0.50000000000000000, 2.0000000000000000 },
-  { 0.41387506064759982, 0.50000000000000000, 2.2500000000000000 },
-  { 0.30200490606236535, 0.50000000000000000, 2.5000000000000000 },
-  { 0.18363332138431521, 0.50000000000000000, 2.7500000000000000 },
-  { 0.065008182877375753, 0.50000000000000000, 3.0000000000000000 },
-  { -0.047885729975898544, 0.50000000000000000, 3.2500000000000000 },
-  { -0.14960456964952620, 0.50000000000000000, 3.5000000000000000 },
-  { -0.23549801845815513, 0.50000000000000000, 3.7500000000000000 },
-  { -0.30192051329163944, 0.50000000000000000, 4.0000000000000000 },
-  { -0.34638850218952444, 0.50000000000000000, 4.2500000000000000 },
-  { -0.36767487332724025, 0.50000000000000000, 4.5000000000000000 },
-  { -0.36583563802350400, 0.50000000000000000, 4.7500000000000000 },
-  { -0.34216798479816180, 0.50000000000000000, 5.0000000000000000 },
+  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 0.39479959874136972, 0.50000000000000000, 0.25000000000000000, 0.0 },
+  { 0.54097378993452760, 0.50000000000000000, 0.50000000000000000, 0.0 },
+  { 0.62800587637588623, 0.50000000000000000, 0.75000000000000000, 0.0 },
+  { 0.67139670714180244, 0.50000000000000000, 1.0000000000000000, 0.0 },
+  { 0.67724253810014312, 0.50000000000000000, 1.2500000000000000, 0.0 },
+  { 0.64983807475374655, 0.50000000000000000, 1.5000000000000000, 0.0 },
+  { 0.59348525447147382, 0.50000000000000000, 1.7500000000000000, 0.0 },
+  { 0.51301613656182721, 0.50000000000000000, 2.0000000000000000, 0.0 },
+  { 0.41387506064759988, 0.50000000000000000, 2.2500000000000000, 0.0 },
+  { 0.30200490606236535, 0.50000000000000000, 2.5000000000000000, 0.0 },
+  { 0.18363332138431521, 0.50000000000000000, 2.7500000000000000, 0.0 },
+  { 0.065008182877375753, 0.50000000000000000, 3.0000000000000000, 0.0 },
+  { -0.047885729975898537, 0.50000000000000000, 3.2500000000000000, 0.0 },
+  { -0.14960456964952618, 0.50000000000000000, 3.5000000000000000, 0.0 },
+  { -0.23549801845815518, 0.50000000000000000, 3.7500000000000000, 0.0 },
+  { -0.30192051329163944, 0.50000000000000000, 4.0000000000000000, 0.0 },
+  { -0.34638850218952444, 0.50000000000000000, 4.2500000000000000, 0.0 },
+  { -0.36767487332724025, 0.50000000000000000, 4.5000000000000000, 0.0 },
+  { -0.36583563802350400, 0.50000000000000000, 4.7500000000000000, 0.0 },
+  { -0.34216798479816180, 0.50000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler003 = 2.5000000000000020e-13;
+const double toler009 = 2.5000000000000020e-13;
 
 // Test data for nu=0.66666666666666663.
-// max(|f - f_GSL|): 7.7715611723760958e-16
-// max(|f - f_GSL| / |f_GSL|): 1.4163878424300161e-15
+// max(|f - f_GSL|): 1.2212453270876722e-15 at index 4
+// max(|f - f_GSL| / |f_GSL|): 2.1504146437492276e-15
+// mean(f - f_GSL): -4.8208791456193557e-16
+// variance(f - f_GSL): 1.8468435800786558e-32
+// stddev(f - f_GSL): 1.3589862324831168e-16
 const testcase_cyl_bessel_j<double>
-data004[21] =
+data010[21] =
 {
-  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000 },
-  { 0.27434438998865135, 0.66666666666666663, 0.25000000000000000 },
-  { 0.42331075068448321, 0.66666666666666663, 0.50000000000000000 },
-  { 0.52870551548162792, 0.66666666666666663, 0.75000000000000000 },
-  { 0.59794997367362801, 0.66666666666666663, 1.0000000000000000 },
-  { 0.63338726889075891, 0.66666666666666663, 1.2500000000000000 },
-  { 0.63673234502877385, 0.66666666666666663, 1.5000000000000000 },
-  { 0.61022230460131899, 0.66666666666666663, 1.7500000000000000 },
-  { 0.55696967691913712, 0.66666666666666663, 2.0000000000000000 },
-  { 0.48101276749106114, 0.66666666666666663, 2.2500000000000000 },
-  { 0.38721242477084306, 0.66666666666666663, 2.5000000000000000 },
-  { 0.28105724771080542, 0.66666666666666663, 2.7500000000000000 },
-  { 0.16841218049067044, 0.66666666666666663, 3.0000000000000000 },
-  { 0.055235893475364915, 0.66666666666666663, 3.2500000000000000 },
-  { -0.052711584404031925, 0.66666666666666663, 3.5000000000000000 },
-  { -0.15015178042293029, 0.66666666666666663, 3.7500000000000000 },
-  { -0.23254408502670390, 0.66666666666666663, 4.0000000000000000 },
-  { -0.29630067002972543, 0.66666666666666663, 4.2500000000000000 },
-  { -0.33894810189777724, 0.66666666666666663, 4.5000000000000000 },
-  { -0.35922706960321099, 0.66666666666666663, 4.7500000000000000 },
-  { -0.35712533549168868, 0.66666666666666663, 5.0000000000000000 },
+  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000, 0.0 },
+  { 0.27434438998865140, 0.66666666666666663, 0.25000000000000000, 0.0 },
+  { 0.42331075068448332, 0.66666666666666663, 0.50000000000000000, 0.0 },
+  { 0.52870551548162803, 0.66666666666666663, 0.75000000000000000, 0.0 },
+  { 0.59794997367362812, 0.66666666666666663, 1.0000000000000000, 0.0 },
+  { 0.63338726889075903, 0.66666666666666663, 1.2500000000000000, 0.0 },
+  { 0.63673234502877407, 0.66666666666666663, 1.5000000000000000, 0.0 },
+  { 0.61022230460131910, 0.66666666666666663, 1.7500000000000000, 0.0 },
+  { 0.55696967691913724, 0.66666666666666663, 2.0000000000000000, 0.0 },
+  { 0.48101276749106131, 0.66666666666666663, 2.2500000000000000, 0.0 },
+  { 0.38721242477084322, 0.66666666666666663, 2.5000000000000000, 0.0 },
+  { 0.28105724771080548, 0.66666666666666663, 2.7500000000000000, 0.0 },
+  { 0.16841218049067047, 0.66666666666666663, 3.0000000000000000, 0.0 },
+  { 0.055235893475364936, 0.66666666666666663, 3.2500000000000000, 0.0 },
+  { -0.052711584404031932, 0.66666666666666663, 3.5000000000000000, 0.0 },
+  { -0.15015178042293031, 0.66666666666666663, 3.7500000000000000, 0.0 },
+  { -0.23254408502670393, 0.66666666666666663, 4.0000000000000000, 0.0 },
+  { -0.29630067002972543, 0.66666666666666663, 4.2500000000000000, 0.0 },
+  { -0.33894810189777724, 0.66666666666666663, 4.5000000000000000, 0.0 },
+  { -0.35922706960321099, 0.66666666666666663, 4.7500000000000000, 0.0 },
+  { -0.35712533549168868, 0.66666666666666663, 5.0000000000000000, 0.0 },
 };
-const double toler004 = 2.5000000000000020e-13;
+const double toler010 = 2.5000000000000020e-13;
 
 // Test data for nu=1.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 6.7783500059747526e-16
+// max(|f - f_GSL|): 6.1062266354383610e-15 at index 7
+// max(|f - f_GSL| / |f_GSL|): 1.0805601471765146e-14
+// mean(f - f_GSL): -2.7170725986585303e-15
+// variance(f - f_GSL): 4.1990134041171014e-31
+// stddev(f - f_GSL): 6.4799794784529226e-16
 const testcase_cyl_bessel_j<double>
-data005[21] =
+data011[21] =
 {
-  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000 },
-  { 0.12402597732272694, 1.0000000000000000, 0.25000000000000000 },
-  { 0.24226845767487390, 1.0000000000000000, 0.50000000000000000 },
-  { 0.34924360217486222, 1.0000000000000000, 0.75000000000000000 },
-  { 0.44005058574493355, 1.0000000000000000, 1.0000000000000000 },
-  { 0.51062326031988059, 1.0000000000000000, 1.2500000000000000 },
-  { 0.55793650791009952, 1.0000000000000000, 1.5000000000000000 },
-  { 0.58015619763899240, 1.0000000000000000, 1.7500000000000000 },
-  { 0.57672480775687363, 1.0000000000000000, 2.0000000000000000 },
-  { 0.54837835664696011, 1.0000000000000000, 2.2500000000000000 },
-  { 0.49709410246427416, 1.0000000000000000, 2.5000000000000000 },
-  { 0.42597230295790256, 1.0000000000000000, 2.7500000000000000 },
-  { 0.33905895852593648, 1.0000000000000000, 3.0000000000000000 },
-  { 0.24111968801520400, 1.0000000000000000, 3.2500000000000000 },
-  { 0.13737752736232706, 1.0000000000000000, 3.5000000000000000 },
-  { 0.033229349129679724, 1.0000000000000000, 3.7500000000000000 },
-  { -0.066043328023549230, 1.0000000000000000, 4.0000000000000000 },
-  { -0.15555319297834286, 1.0000000000000000, 4.2500000000000000 },
-  { -0.23106043192337070, 1.0000000000000000, 4.5000000000000000 },
-  { -0.28918679864711044, 1.0000000000000000, 4.7500000000000000 },
-  { -0.32757913759146529, 1.0000000000000000, 5.0000000000000000 },
+  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.12402597732272694, 1.0000000000000000, 0.25000000000000000, 0.0 },
+  { 0.24226845767487390, 1.0000000000000000, 0.50000000000000000, 0.0 },
+  { 0.34924360217486222, 1.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.44005058574493355, 1.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.51062326031988059, 1.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.55793650791009952, 1.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.58015619763899240, 1.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.57672480775687363, 1.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.54837835664696011, 1.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.49709410246427416, 1.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.42597230295790256, 1.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.33905895852593648, 1.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.24111968801520400, 1.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.13737752736232706, 1.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.033229349129679724, 1.0000000000000000, 3.7500000000000000, 0.0 },
+  { -0.066043328023549230, 1.0000000000000000, 4.0000000000000000, 0.0 },
+  { -0.15555319297834286, 1.0000000000000000, 4.2500000000000000, 0.0 },
+  { -0.23106043192337070, 1.0000000000000000, 4.5000000000000000, 0.0 },
+  { -0.28918679864711044, 1.0000000000000000, 4.7500000000000000, 0.0 },
+  { -0.32757913759146529, 1.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler005 = 2.5000000000000020e-13;
+const double toler011 = 1.0000000000000008e-12;
 
 // Test data for nu=2.0000000000000000.
-// max(|f - f_GSL|): 5.5511151231257827e-17
-// max(|f - f_GSL| / |f_GSL|): 2.4155555971238584e-16
+// max(|f - f_GSL|): 5.1625370645069779e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 1.0822675144009871e-14
+// mean(f - f_GSL): -2.7863789318177942e-15
+// variance(f - f_GSL): 2.7454120215792639e-31
+// stddev(f - f_GSL): 5.2396679490014096e-16
 const testcase_cyl_bessel_j<double>
-data006[21] =
+data012[21] =
 {
-  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000 },
-  { 0.0077718892859626760, 2.0000000000000000, 0.25000000000000000 },
-  { 0.030604023458682638, 2.0000000000000000, 0.50000000000000000 },
-  { 0.067073997299650551, 2.0000000000000000, 0.75000000000000000 },
-  { 0.11490348493190047, 2.0000000000000000, 1.0000000000000000 },
-  { 0.17109113124052350, 2.0000000000000000, 1.2500000000000000 },
-  { 0.23208767214421472, 2.0000000000000000, 1.5000000000000000 },
-  { 0.29400312425941216, 2.0000000000000000, 1.7500000000000000 },
-  { 0.35283402861563773, 2.0000000000000000, 2.0000000000000000 },
-  { 0.40469757684189717, 2.0000000000000000, 2.2500000000000000 },
-  { 0.44605905843961718, 2.0000000000000000, 2.5000000000000000 },
-  { 0.47393946632335160, 2.0000000000000000, 2.7500000000000000 },
-  { 0.48609126058589119, 2.0000000000000000, 3.0000000000000000 },
-  { 0.48113214864150627, 2.0000000000000000, 3.2500000000000000 },
-  { 0.45862918419430765, 2.0000000000000000, 3.5000000000000000 },
-  { 0.41912837447200352, 2.0000000000000000, 3.7500000000000000 },
-  { 0.36412814585207293, 2.0000000000000000, 4.0000000000000000 },
-  { 0.29599826772185189, 2.0000000000000000, 4.2500000000000000 },
-  { 0.21784898368584549, 2.0000000000000000, 4.5000000000000000 },
-  { 0.13335796490311685, 2.0000000000000000, 4.7500000000000000 },
-  { 0.046565116277751971, 2.0000000000000000, 5.0000000000000000 },
+  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.0077718892859626760, 2.0000000000000000, 0.25000000000000000, 0.0 },
+  { 0.030604023458682638, 2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 0.067073997299650551, 2.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.11490348493190047, 2.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.17109113124052350, 2.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.23208767214421472, 2.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.29400312425941216, 2.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.35283402861563773, 2.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.40469757684189717, 2.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.44605905843961718, 2.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.47393946632335160, 2.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.48609126058589119, 2.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.48113214864150627, 2.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.45862918419430765, 2.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.41912837447200352, 2.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.36412814585207293, 2.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.29599826772185189, 2.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.21784898368584549, 2.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.13335796490311685, 2.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.046565116277751971, 2.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler006 = 2.5000000000000020e-13;
+const double toler012 = 1.0000000000000008e-12;
 
 // Test data for nu=5.0000000000000000.
-// max(|f - f_GSL|): 1.3877787807814457e-16
-// max(|f - f_GSL| / |f_GSL|): 1.4609680807504906e-15
+// max(|f - f_GSL|): 2.6645352591003757e-15 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.1360392768632928e-14
+// mean(f - f_GSL): -6.6594499701393519e-16
+// variance(f - f_GSL): 2.0970405937460423e-31
+// stddev(f - f_GSL): 4.5793455796063728e-16
 const testcase_cyl_bessel_j<double>
-data007[21] =
+data013[21] =
 {
-  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000 },
-  { 2.5365161587472413e-07, 5.0000000000000000, 0.25000000000000000 },
-  { 8.0536272413574753e-06, 5.0000000000000000, 0.50000000000000000 },
-  { 6.0364166510576438e-05, 5.0000000000000000, 0.75000000000000000 },
-  { 0.00024975773021123450, 5.0000000000000000, 1.0000000000000000 },
-  { 0.00074440885254749821, 5.0000000000000000, 1.2500000000000000 },
-  { 0.0017994217673606111, 5.0000000000000000, 1.5000000000000000 },
-  { 0.0037577257273157133, 5.0000000000000000, 1.7500000000000000 },
-  { 0.0070396297558716842, 5.0000000000000000, 2.0000000000000000 },
-  { 0.012121078633445751, 5.0000000000000000, 2.2500000000000000 },
-  { 0.019501625134503223, 5.0000000000000000, 2.5000000000000000 },
-  { 0.029664058320006174, 5.0000000000000000, 2.7500000000000000 },
-  { 0.043028434877047578, 5.0000000000000000, 3.0000000000000000 },
-  { 0.059903888098560426, 5.0000000000000000, 3.2500000000000000 },
-  { 0.080441986647991792, 5.0000000000000000, 3.5000000000000000 },
-  { 0.10459554742314070, 5.0000000000000000, 3.7500000000000000 },
-  { 0.13208665604709827, 5.0000000000000000, 4.0000000000000000 },
-  { 0.16238721643623680, 5.0000000000000000, 4.2500000000000000 },
-  { 0.19471465863871368, 5.0000000000000000, 4.5000000000000000 },
-  { 0.22804452118769436, 5.0000000000000000, 4.7500000000000000 },
-  { 0.26114054612017007, 5.0000000000000000, 5.0000000000000000 },
+  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000, 0.0 },
+  { 2.5365161587472413e-07, 5.0000000000000000, 0.25000000000000000, 0.0 },
+  { 8.0536272413574753e-06, 5.0000000000000000, 0.50000000000000000, 0.0 },
+  { 6.0364166510576438e-05, 5.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.00024975773021123450, 5.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.00074440885254749821, 5.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.0017994217673606111, 5.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.0037577257273157133, 5.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.0070396297558716842, 5.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.012121078633445751, 5.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.019501625134503223, 5.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.029664058320006174, 5.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.043028434877047578, 5.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.059903888098560426, 5.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.080441986647991792, 5.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.10459554742314070, 5.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.13208665604709827, 5.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.16238721643623680, 5.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.19471465863871368, 5.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.22804452118769436, 5.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.26114054612017007, 5.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler007 = 2.5000000000000020e-13;
+const double toler013 = 1.0000000000000008e-12;
 
 // Test data for nu=10.000000000000000.
-// max(|f - f_GSL|): 3.2526065174565133e-18
-// max(|f - f_GSL| / |f_GSL|): 3.9336732209858561e-15
+// max(|f - f_GSL|): 1.6263032587282567e-17 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.2824480053608853e-14
+// mean(f - f_GSL): -1.9939226062419386e-18
+// variance(f - f_GSL): 1.0689393731679246e-35
+// stddev(f - f_GSL): 3.2694638293884283e-18
 const testcase_cyl_bessel_j<double>
-data008[21] =
+data014[21] =
 {
-  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000 },
-  { 2.5628321598050096e-16, 10.000000000000000, 0.25000000000000000 },
-  { 2.6131773608228023e-13, 10.000000000000000, 0.50000000000000000 },
-  { 1.4962171311759677e-11, 10.000000000000000, 0.75000000000000000 },
-  { 2.6306151236874524e-10, 10.000000000000000, 1.0000000000000000 },
-  { 2.4187548221114514e-09, 10.000000000000000, 1.2500000000000000 },
-  { 1.4743269078039996e-08, 10.000000000000000, 1.5000000000000000 },
-  { 6.7608502849897560e-08, 10.000000000000000, 1.7500000000000000 },
-  { 2.5153862827167358e-07, 10.000000000000000, 2.0000000000000000 },
-  { 7.9717051583730038e-07, 10.000000000000000, 2.2500000000000000 },
-  { 2.2247284173983839e-06, 10.000000000000000, 2.5000000000000000 },
-  { 5.5985475639210430e-06, 10.000000000000000, 2.7500000000000000 },
-  { 1.2928351645715880e-05, 10.000000000000000, 3.0000000000000000 },
-  { 2.7761691354244538e-05, 10.000000000000000, 3.2500000000000000 },
-  { 5.6009495875078844e-05, 10.000000000000000, 3.5000000000000000 },
-  { 0.00010703761729231951, 10.000000000000000, 3.7500000000000000 },
-  { 0.00019504055466003446, 10.000000000000000, 4.0000000000000000 },
-  { 0.00034068888474064193, 10.000000000000000, 4.2500000000000000 },
-  { 0.00057300977667164505, 10.000000000000000, 4.5000000000000000 },
-  { 0.00093142172588886810, 10.000000000000000, 4.7500000000000000 },
-  { 0.0014678026473104744, 10.000000000000000, 5.0000000000000000 },
+  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000, 0.0 },
+  { 2.5628321598050096e-16, 10.000000000000000, 0.25000000000000000, 0.0 },
+  { 2.6131773608228023e-13, 10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.4962171311759677e-11, 10.000000000000000, 0.75000000000000000, 0.0 },
+  { 2.6306151236874524e-10, 10.000000000000000, 1.0000000000000000, 0.0 },
+  { 2.4187548221114514e-09, 10.000000000000000, 1.2500000000000000, 0.0 },
+  { 1.4743269078039996e-08, 10.000000000000000, 1.5000000000000000, 0.0 },
+  { 6.7608502849897560e-08, 10.000000000000000, 1.7500000000000000, 0.0 },
+  { 2.5153862827167358e-07, 10.000000000000000, 2.0000000000000000, 0.0 },
+  { 7.9717051583730038e-07, 10.000000000000000, 2.2500000000000000, 0.0 },
+  { 2.2247284173983839e-06, 10.000000000000000, 2.5000000000000000, 0.0 },
+  { 5.5985475639210430e-06, 10.000000000000000, 2.7500000000000000, 0.0 },
+  { 1.2928351645715880e-05, 10.000000000000000, 3.0000000000000000, 0.0 },
+  { 2.7761691354244538e-05, 10.000000000000000, 3.2500000000000000, 0.0 },
+  { 5.6009495875078844e-05, 10.000000000000000, 3.5000000000000000, 0.0 },
+  { 0.00010703761729231951, 10.000000000000000, 3.7500000000000000, 0.0 },
+  { 0.00019504055466003446, 10.000000000000000, 4.0000000000000000, 0.0 },
+  { 0.00034068888474064193, 10.000000000000000, 4.2500000000000000, 0.0 },
+  { 0.00057300977667164505, 10.000000000000000, 4.5000000000000000, 0.0 },
+  { 0.00093142172588886810, 10.000000000000000, 4.7500000000000000, 0.0 },
+  { 0.0014678026473104744, 10.000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler008 = 2.5000000000000020e-13;
+const double toler014 = 1.0000000000000008e-12;
 
 // Test data for nu=20.000000000000000.
-// max(|f - f_GSL|): 1.9387045606711586e-26
-// max(|f - f_GSL| / |f_GSL|): 2.1275572270326799e-15
+// max(|f - f_GSL|): 3.8450973786644646e-25 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.6112330065488876e-14
+// mean(f - f_GSL): -2.9366599259721097e-26
+// variance(f - f_GSL): 6.6216490672203760e-51
+// stddev(f - f_GSL): 8.1373515760475631e-26
 const testcase_cyl_bessel_j<double>
-data009[21] =
+data015[21] =
 {
-  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000 },
-  { 3.5624805510586969e-37, 20.000000000000000, 0.25000000000000000 },
-  { 3.7272019617047132e-31, 20.000000000000000, 0.50000000000000000 },
-  { 1.2347870693633488e-27, 20.000000000000000, 0.75000000000000000 },
-  { 3.8735030085246562e-25, 20.000000000000000, 1.0000000000000000 },
-  { 3.3372897667043766e-23, 20.000000000000000, 1.2500000000000000 },
-  { 1.2689972189332558e-21, 20.000000000000000, 1.5000000000000000 },
-  { 2.7427715944032989e-20, 20.000000000000000, 1.7500000000000000 },
-  { 3.9189728050907524e-19, 20.000000000000000, 2.0000000000000000 },
-  { 4.0805232551365158e-18, 20.000000000000000, 2.2500000000000000 },
-  { 3.3090793836587786e-17, 20.000000000000000, 2.5000000000000000 },
-  { 2.1915404680645990e-16, 20.000000000000000, 2.7500000000000000 },
-  { 1.2275946737992981e-15, 20.000000000000000, 3.0000000000000000 },
-  { 5.9727663938305382e-15, 20.000000000000000, 3.2500000000000000 },
-  { 2.5768553102807590e-14, 20.000000000000000, 3.5000000000000000 },
-  { 1.0021112208287217e-13, 20.000000000000000, 3.7500000000000000 },
-  { 3.5595116285938516e-13, 20.000000000000000, 4.0000000000000000 },
-  { 1.1673622958555074e-12, 20.000000000000000, 4.2500000000000000 },
-  { 3.5665470983611762e-12, 20.000000000000000, 4.5000000000000000 },
-  { 1.0227564044880958e-11, 20.000000000000000, 4.7500000000000000 },
-  { 2.7703300521289426e-11, 20.000000000000000, 5.0000000000000000 },
+  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000, 0.0 },
+  { 3.5624805510586969e-37, 20.000000000000000, 0.25000000000000000, 0.0 },
+  { 3.7272019617047132e-31, 20.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2347870693633488e-27, 20.000000000000000, 0.75000000000000000, 0.0 },
+  { 3.8735030085246562e-25, 20.000000000000000, 1.0000000000000000, 0.0 },
+  { 3.3372897667043766e-23, 20.000000000000000, 1.2500000000000000, 0.0 },
+  { 1.2689972189332558e-21, 20.000000000000000, 1.5000000000000000, 0.0 },
+  { 2.7427715944032989e-20, 20.000000000000000, 1.7500000000000000, 0.0 },
+  { 3.9189728050907524e-19, 20.000000000000000, 2.0000000000000000, 0.0 },
+  { 4.0805232551365158e-18, 20.000000000000000, 2.2500000000000000, 0.0 },
+  { 3.3090793836587786e-17, 20.000000000000000, 2.5000000000000000, 0.0 },
+  { 2.1915404680645990e-16, 20.000000000000000, 2.7500000000000000, 0.0 },
+  { 1.2275946737992981e-15, 20.000000000000000, 3.0000000000000000, 0.0 },
+  { 5.9727663938305382e-15, 20.000000000000000, 3.2500000000000000, 0.0 },
+  { 2.5768553102807590e-14, 20.000000000000000, 3.5000000000000000, 0.0 },
+  { 1.0021112208287217e-13, 20.000000000000000, 3.7500000000000000, 0.0 },
+  { 3.5595116285938516e-13, 20.000000000000000, 4.0000000000000000, 0.0 },
+  { 1.1673622958555074e-12, 20.000000000000000, 4.2500000000000000, 0.0 },
+  { 3.5665470983611762e-12, 20.000000000000000, 4.5000000000000000, 0.0 },
+  { 1.0227564044880958e-11, 20.000000000000000, 4.7500000000000000, 0.0 },
+  { 2.7703300521289426e-11, 20.000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler009 = 2.5000000000000020e-13;
+const double toler015 = 1.0000000000000008e-12;
 //  cyl_bessel_j
 
 // Test data for nu=0.0000000000000000.
-// max(|f - f_GSL|): 7.6709472107694410e-15
+// max(|f - f_GSL|): 7.6709472107694410e-15 at index 13
 // max(|f - f_GSL| / |f_GSL|): 4.1048891312746575e-13
+// mean(f - f_GSL): -4.8105534106433027e-16
+// variance(f - f_GSL): 9.0295585401833436e-31
+// stddev(f - f_GSL): 9.5023989287881106e-16
 const testcase_cyl_bessel_j<double>
-data010[21] =
+data016[21] =
 {
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
-  { -0.17759677131433835, 0.0000000000000000, 5.0000000000000000 },
-  { -0.24593576445134835, 0.0000000000000000, 10.000000000000000 },
-  { -0.014224472826780771, 0.0000000000000000, 15.000000000000000 },
-  { 0.16702466434058319, 0.0000000000000000, 20.000000000000000 },
-  { 0.096266783275958154, 0.0000000000000000, 25.000000000000000 },
-  { -0.086367983581040142, 0.0000000000000000, 30.000000000000000 },
-  { -0.12684568275631256, 0.0000000000000000, 35.000000000000000 },
-  { 0.0073668905842374085, 0.0000000000000000, 40.000000000000000 },
-  { 0.11581867067325631, 0.0000000000000000, 45.000000000000000 },
-  { 0.055812327669251746, 0.0000000000000000, 50.000000000000000 },
-  { -0.074548302648236808, 0.0000000000000000, 55.000000000000000 },
-  { -0.091471804089061859, 0.0000000000000000, 60.000000000000000 },
-  { 0.018687343227677979, 0.0000000000000000, 65.000000000000000 },
-  { 0.094908726483013545, 0.0000000000000000, 70.000000000000000 },
-  { 0.034643913805097008, 0.0000000000000000, 75.000000000000000 },
-  { -0.069742165512210033, 0.0000000000000000, 80.000000000000000 },
-  { -0.070940394796273273, 0.0000000000000000, 85.000000000000000 },
-  { 0.026630016699969526, 0.0000000000000000, 90.000000000000000 },
-  { 0.081811967783384135, 0.0000000000000000, 95.000000000000000 },
-  { 0.019985850304223170, 0.0000000000000000, 100.00000000000000 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+  { -0.17759677131433835, 0.0000000000000000, 5.0000000000000000, 0.0 },
+  { -0.24593576445134835, 0.0000000000000000, 10.000000000000000, 0.0 },
+  { -0.014224472826780771, 0.0000000000000000, 15.000000000000000, 0.0 },
+  { 0.16702466434058319, 0.0000000000000000, 20.000000000000000, 0.0 },
+  { 0.096266783275958154, 0.0000000000000000, 25.000000000000000, 0.0 },
+  { -0.086367983581040142, 0.0000000000000000, 30.000000000000000, 0.0 },
+  { -0.12684568275631256, 0.0000000000000000, 35.000000000000000, 0.0 },
+  { 0.0073668905842374085, 0.0000000000000000, 40.000000000000000, 0.0 },
+  { 0.11581867067325631, 0.0000000000000000, 45.000000000000000, 0.0 },
+  { 0.055812327669251746, 0.0000000000000000, 50.000000000000000, 0.0 },
+  { -0.074548302648236808, 0.0000000000000000, 55.000000000000000, 0.0 },
+  { -0.091471804089061859, 0.0000000000000000, 60.000000000000000, 0.0 },
+  { 0.018687343227677979, 0.0000000000000000, 65.000000000000000, 0.0 },
+  { 0.094908726483013545, 0.0000000000000000, 70.000000000000000, 0.0 },
+  { 0.034643913805097008, 0.0000000000000000, 75.000000000000000, 0.0 },
+  { -0.069742165512210033, 0.0000000000000000, 80.000000000000000, 0.0 },
+  { -0.070940394796273273, 0.0000000000000000, 85.000000000000000, 0.0 },
+  { 0.026630016699969526, 0.0000000000000000, 90.000000000000000, 0.0 },
+  { 0.081811967783384135, 0.0000000000000000, 95.000000000000000, 0.0 },
+  { 0.019985850304223170, 0.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler010 = 2.5000000000000014e-11;
+const double toler016 = 2.5000000000000014e-11;
 
 // Test data for nu=0.33333333333333331.
-// max(|f - f_GSL|): 7.9311557321659620e-15
-// max(|f - f_GSL| / |f_GSL|): 4.2444155318123211e-12
+// max(|f - f_GSL|): 7.9363599025938925e-15 at index 15
+// max(|f - f_GSL| / |f_GSL|): 4.2442260743498463e-12
+// mean(f - f_GSL): -4.0073144868561849e-16
+// variance(f - f_GSL): 1.2341887679989061e-30
+// stddev(f - f_GSL): 1.1109404880545609e-15
 const testcase_cyl_bessel_j<double>
-data011[21] =
+data017[21] =
 {
-  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000 },
-  { -0.30642046380026405, 0.33333333333333331, 5.0000000000000000 },
-  { -0.18614516704869571, 0.33333333333333331, 10.000000000000000 },
-  { 0.089740004221152650, 0.33333333333333331, 15.000000000000000 },
-  { 0.17606058001293901, 0.33333333333333331, 20.000000000000000 },
-  { 0.020097162141383233, 0.33333333333333331, 25.000000000000000 },
-  { -0.13334053387426159, 0.33333333333333331, 30.000000000000000 },
-  { -0.087118009397765497, 0.33333333333333331, 35.000000000000000 },
-  { 0.069202942818858179, 0.33333333333333331, 40.000000000000000 },
-  { 0.11387616964518317, 0.33333333333333331, 45.000000000000000 },
-  { -0.00057226680771808045, 0.33333333333333331, 50.000000000000000 },
-  { -0.10331600929280822, 0.33333333333333331, 55.000000000000000 },
-  { -0.055618147270528003, 0.33333333333333331, 60.000000000000000 },
-  { 0.064711954014113948, 0.33333333333333331, 65.000000000000000 },
-  { 0.086879926462481605, 0.33333333333333331, 70.000000000000000 },
-  { -0.012614484229891068, 0.33333333333333331, 75.000000000000000 },
-  { -0.088199784400034537, 0.33333333333333331, 80.000000000000000 },
-  { -0.036703611076564523, 0.33333333333333331, 85.000000000000000 },
-  { 0.062916286828779547, 0.33333333333333331, 90.000000000000000 },
-  { 0.069465244416806030, 0.33333333333333331, 95.000000000000000 },
-  { -0.021271244853702364, 0.33333333333333331, 100.00000000000000 },
+  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000, 0.0 },
+  { -0.30642046380026405, 0.33333333333333331, 5.0000000000000000, 0.0 },
+  { -0.18614516704869571, 0.33333333333333331, 10.000000000000000, 0.0 },
+  { 0.089740004221152650, 0.33333333333333331, 15.000000000000000, 0.0 },
+  { 0.17606058001293901, 0.33333333333333331, 20.000000000000000, 0.0 },
+  { 0.020097162141383233, 0.33333333333333331, 25.000000000000000, 0.0 },
+  { -0.13334053387426159, 0.33333333333333331, 30.000000000000000, 0.0 },
+  { -0.087118009397765497, 0.33333333333333331, 35.000000000000000, 0.0 },
+  { 0.069202942818858179, 0.33333333333333331, 40.000000000000000, 0.0 },
+  { 0.11387616964518317, 0.33333333333333331, 45.000000000000000, 0.0 },
+  { -0.00057226680771808045, 0.33333333333333331, 50.000000000000000, 0.0 },
+  { -0.10331600929280822, 0.33333333333333331, 55.000000000000000, 0.0 },
+  { -0.055618147270528003, 0.33333333333333331, 60.000000000000000, 0.0 },
+  { 0.064711954014113948, 0.33333333333333331, 65.000000000000000, 0.0 },
+  { 0.086879926462481605, 0.33333333333333331, 70.000000000000000, 0.0 },
+  { -0.012614484229891068, 0.33333333333333331, 75.000000000000000, 0.0 },
+  { -0.088199784400034537, 0.33333333333333331, 80.000000000000000, 0.0 },
+  { -0.036703611076564523, 0.33333333333333331, 85.000000000000000, 0.0 },
+  { 0.062916286828779547, 0.33333333333333331, 90.000000000000000, 0.0 },
+  { 0.069465244416806030, 0.33333333333333331, 95.000000000000000, 0.0 },
+  { -0.021271244853702364, 0.33333333333333331, 100.00000000000000, 0.0 },
 };
-const double toler011 = 2.5000000000000017e-10;
+const double toler017 = 2.5000000000000017e-10;
 
 // Test data for nu=0.50000000000000000.
-// max(|f - f_GSL|): 7.4246164771807344e-15
-// max(|f - f_GSL| / |f_GSL|): 3.6725252809051799e-13
+// max(|f - f_GSL|): 7.4384942649885488e-15 at index 15
+// max(|f - f_GSL| / |f_GSL|): 3.6736636954373887e-13
+// mean(f - f_GSL): -2.3914402204537413e-16
+// variance(f - f_GSL): 7.8293530348883143e-31
+// stddev(f - f_GSL): 8.8483631451745435e-16
 const testcase_cyl_bessel_j<double>
-data012[21] =
+data018[21] =
 {
-  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
-  { -0.34216798479816180, 0.50000000000000000, 5.0000000000000000 },
-  { -0.13726373575505049, 0.50000000000000000, 10.000000000000000 },
-  { 0.13396768882243937, 0.50000000000000000, 15.000000000000000 },
-  { 0.16288076385502984, 0.50000000000000000, 20.000000000000000 },
-  { -0.021120283599650493, 0.50000000000000000, 25.000000000000000 },
-  { -0.14392965337039987, 0.50000000000000000, 30.000000000000000 },
-  { -0.057747757589458777, 0.50000000000000000, 35.000000000000000 },
-  { 0.094000962389533649, 0.50000000000000000, 40.000000000000000 },
-  { 0.10120783324271411, 0.50000000000000000, 45.000000000000000 },
-  { -0.029605831888924641, 0.50000000000000000, 50.000000000000000 },
-  { -0.10756039213265806, 0.50000000000000000, 55.000000000000000 },
-  { -0.031397461182520438, 0.50000000000000000, 60.000000000000000 },
-  { 0.081827430775628554, 0.50000000000000000, 65.000000000000000 },
-  { 0.073802429539054554, 0.50000000000000000, 70.000000000000000 },
-  { -0.035727009681702615, 0.50000000000000000, 75.000000000000000 },
-  { -0.088661035811765460, 0.50000000000000000, 80.000000000000000 },
-  { -0.015238065106312516, 0.50000000000000000, 85.000000000000000 },
-  { 0.075189068550269425, 0.50000000000000000, 90.000000000000000 },
-  { 0.055932643481494133, 0.50000000000000000, 95.000000000000000 },
-  { -0.040402132716252127, 0.50000000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+  { -0.34216798479816180, 0.50000000000000000, 5.0000000000000000, 0.0 },
+  { -0.13726373575505049, 0.50000000000000000, 10.000000000000000, 0.0 },
+  { 0.13396768882243937, 0.50000000000000000, 15.000000000000000, 0.0 },
+  { 0.16288076385502984, 0.50000000000000000, 20.000000000000000, 0.0 },
+  { -0.021120283599650493, 0.50000000000000000, 25.000000000000000, 0.0 },
+  { -0.14392965337039987, 0.50000000000000000, 30.000000000000000, 0.0 },
+  { -0.057747757589458777, 0.50000000000000000, 35.000000000000000, 0.0 },
+  { 0.094000962389533649, 0.50000000000000000, 40.000000000000000, 0.0 },
+  { 0.10120783324271411, 0.50000000000000000, 45.000000000000000, 0.0 },
+  { -0.029605831888924641, 0.50000000000000000, 50.000000000000000, 0.0 },
+  { -0.10756039213265806, 0.50000000000000000, 55.000000000000000, 0.0 },
+  { -0.031397461182520438, 0.50000000000000000, 60.000000000000000, 0.0 },
+  { 0.081827430775628554, 0.50000000000000000, 65.000000000000000, 0.0 },
+  { 0.073802429539054554, 0.50000000000000000, 70.000000000000000, 0.0 },
+  { -0.035727009681702615, 0.50000000000000000, 75.000000000000000, 0.0 },
+  { -0.088661035811765460, 0.50000000000000000, 80.000000000000000, 0.0 },
+  { -0.015238065106312516, 0.50000000000000000, 85.000000000000000, 0.0 },
+  { 0.075189068550269425, 0.50000000000000000, 90.000000000000000, 0.0 },
+  { 0.055932643481494133, 0.50000000000000000, 95.000000000000000, 0.0 },
+  { -0.040402132716252127, 0.50000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler012 = 2.5000000000000014e-11;
+const double toler018 = 2.5000000000000014e-11;
 
 // Test data for nu=0.66666666666666663.
-// max(|f - f_GSL|): 6.3629657098829284e-15
-// max(|f - f_GSL| / |f_GSL|): 1.2254869540384518e-12
+// max(|f - f_GSL|): 6.3699046037868357e-15 at index 15
+// max(|f - f_GSL| / |f_GSL|): 1.2249770426844829e-12
+// mean(f - f_GSL): -1.1601995819092502e-16
+// variance(f - f_GSL): 5.5905222078728605e-31
+// stddev(f - f_GSL): 7.4769794756123678e-16
 const testcase_cyl_bessel_j<double>
-data013[21] =
+data019[21] =
 {
-  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000 },
-  { -0.35712533549168868, 0.66666666666666663, 5.0000000000000000 },
-  { -0.080149603304315808, 0.66666666666666663, 10.000000000000000 },
-  { 0.16918875175798079, 0.66666666666666663, 15.000000000000000 },
-  { 0.13904826122116531, 0.66666666666666663, 20.000000000000000 },
-  { -0.060770629698497600, 0.66666666666666663, 25.000000000000000 },
-  { -0.14489851974205062, 0.66666666666666663, 30.000000000000000 },
-  { -0.024604880159644394, 0.66666666666666663, 35.000000000000000 },
-  { 0.11243936464912010, 0.66666666666666663, 40.000000000000000 },
-  { 0.081776275512525309, 0.66666666666666663, 45.000000000000000 },
-  { -0.056589908749367777, 0.66666666666666663, 50.000000000000000 },
-  { -0.10455814523765931, 0.66666666666666663, 55.000000000000000 },
-  { -0.0051030148548608456, 0.66666666666666663, 60.000000000000000 },
-  { 0.093398227061639236, 0.66666666666666663, 65.000000000000000 },
-  { 0.055763883611864913, 0.66666666666666663, 70.000000000000000 },
-  { -0.056395322915757364, 0.66666666666666663, 75.000000000000000 },
-  { -0.083131347805783087, 0.66666666666666663, 80.000000000000000 },
-  { 0.0072315397874096648, 0.66666666666666663, 85.000000000000000 },
-  { 0.082362798520905250, 0.66666666666666663, 90.000000000000000 },
-  { 0.038630504403446168, 0.66666666666666663, 95.000000000000000 },
-  { -0.056778819380529734, 0.66666666666666663, 100.00000000000000 },
+  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000, 0.0 },
+  { -0.35712533549168868, 0.66666666666666663, 5.0000000000000000, 0.0 },
+  { -0.080149603304315808, 0.66666666666666663, 10.000000000000000, 0.0 },
+  { 0.16918875175798079, 0.66666666666666663, 15.000000000000000, 0.0 },
+  { 0.13904826122116531, 0.66666666666666663, 20.000000000000000, 0.0 },
+  { -0.060770629698497600, 0.66666666666666663, 25.000000000000000, 0.0 },
+  { -0.14489851974205062, 0.66666666666666663, 30.000000000000000, 0.0 },
+  { -0.024604880159644394, 0.66666666666666663, 35.000000000000000, 0.0 },
+  { 0.11243936464912010, 0.66666666666666663, 40.000000000000000, 0.0 },
+  { 0.081776275512525309, 0.66666666666666663, 45.000000000000000, 0.0 },
+  { -0.056589908749367777, 0.66666666666666663, 50.000000000000000, 0.0 },
+  { -0.10455814523765931, 0.66666666666666663, 55.000000000000000, 0.0 },
+  { -0.0051030148548608456, 0.66666666666666663, 60.000000000000000, 0.0 },
+  { 0.093398227061639236, 0.66666666666666663, 65.000000000000000, 0.0 },
+  { 0.055763883611864913, 0.66666666666666663, 70.000000000000000, 0.0 },
+  { -0.056395322915757364, 0.66666666666666663, 75.000000000000000, 0.0 },
+  { -0.083131347805783087, 0.66666666666666663, 80.000000000000000, 0.0 },
+  { 0.0072315397874096648, 0.66666666666666663, 85.000000000000000, 0.0 },
+  { 0.082362798520905250, 0.66666666666666663, 90.000000000000000, 0.0 },
+  { 0.038630504403446168, 0.66666666666666663, 95.000000000000000, 0.0 },
+  { -0.056778819380529734, 0.66666666666666663, 100.00000000000000, 0.0 },
 };
-const double toler013 = 1.0000000000000006e-10;
+const double toler019 = 1.0000000000000006e-10;
 
 // Test data for nu=1.0000000000000000.
-// max(|f - f_GSL|): 7.1435912740724916e-15
-// max(|f - f_GSL| / |f_GSL|): 1.7857949645087573e-12
+// max(|f - f_GSL|): 7.1418565505965148e-15 at index 14
+// max(|f - f_GSL| / |f_GSL|): 1.7859762266854228e-12
+// mean(f - f_GSL): 9.6132592627048056e-17
+// variance(f - f_GSL): 8.7314103995980843e-32
+// stddev(f - f_GSL): 2.9548960048702366e-16
 const testcase_cyl_bessel_j<double>
-data014[21] =
+data020[21] =
 {
-  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000 },
-  { -0.32757913759146529, 1.0000000000000000, 5.0000000000000000 },
-  { 0.043472746168861459, 1.0000000000000000, 10.000000000000000 },
-  { 0.20510403861352280, 1.0000000000000000, 15.000000000000000 },
-  { 0.066833124175850078, 1.0000000000000000, 20.000000000000000 },
-  { -0.12535024958028990, 1.0000000000000000, 25.000000000000000 },
-  { -0.11875106261662294, 1.0000000000000000, 30.000000000000000 },
-  { 0.043990942179625646, 1.0000000000000000, 35.000000000000000 },
-  { 0.12603831803758500, 1.0000000000000000, 40.000000000000000 },
-  { 0.028348854376424561, 1.0000000000000000, 45.000000000000000 },
-  { -0.097511828125175129, 1.0000000000000000, 50.000000000000000 },
-  { -0.078250038308684711, 1.0000000000000000, 55.000000000000000 },
-  { 0.046598383758166370, 1.0000000000000000, 60.000000000000000 },
-  { 0.097330172226126929, 1.0000000000000000, 65.000000000000000 },
-  { 0.0099877887848385128, 1.0000000000000000, 70.000000000000000 },
-  { -0.085139995044829081, 1.0000000000000000, 75.000000000000000 },
-  { -0.056057296675712555, 1.0000000000000000, 80.000000000000000 },
-  { 0.049151460334891130, 1.0000000000000000, 85.000000000000000 },
-  { 0.079925646708868092, 1.0000000000000000, 90.000000000000000 },
-  { -0.0023925612997269283, 1.0000000000000000, 95.000000000000000 },
-  { -0.077145352014112129, 1.0000000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000, 0.0 },
+  { -0.32757913759146529, 1.0000000000000000, 5.0000000000000000, 0.0 },
+  { 0.043472746168861459, 1.0000000000000000, 10.000000000000000, 0.0 },
+  { 0.20510403861352280, 1.0000000000000000, 15.000000000000000, 0.0 },
+  { 0.066833124175850078, 1.0000000000000000, 20.000000000000000, 0.0 },
+  { -0.12535024958028990, 1.0000000000000000, 25.000000000000000, 0.0 },
+  { -0.11875106261662294, 1.0000000000000000, 30.000000000000000, 0.0 },
+  { 0.043990942179625646, 1.0000000000000000, 35.000000000000000, 0.0 },
+  { 0.12603831803758500, 1.0000000000000000, 40.000000000000000, 0.0 },
+  { 0.028348854376424561, 1.0000000000000000, 45.000000000000000, 0.0 },
+  { -0.097511828125175129, 1.0000000000000000, 50.000000000000000, 0.0 },
+  { -0.078250038308684711, 1.0000000000000000, 55.000000000000000, 0.0 },
+  { 0.046598383758166370, 1.0000000000000000, 60.000000000000000, 0.0 },
+  { 0.097330172226126929, 1.0000000000000000, 65.000000000000000, 0.0 },
+  { 0.0099877887848385128, 1.0000000000000000, 70.000000000000000, 0.0 },
+  { -0.085139995044829081, 1.0000000000000000, 75.000000000000000, 0.0 },
+  { -0.056057296675712555, 1.0000000000000000, 80.000000000000000, 0.0 },
+  { 0.049151460334891130, 1.0000000000000000, 85.000000000000000, 0.0 },
+  { 0.079925646708868092, 1.0000000000000000, 90.000000000000000, 0.0 },
+  { -0.0023925612997269283, 1.0000000000000000, 95.000000000000000, 0.0 },
+  { -0.077145352014112129, 1.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler014 = 1.0000000000000006e-10;
+const double toler020 = 1.0000000000000006e-10;
 
 // Test data for nu=2.0000000000000000.
-// max(|f - f_GSL|): 7.6050277186823223e-15
+// max(|f - f_GSL|): 7.5980888247784151e-15 at index 13
 // max(|f - f_GSL| / |f_GSL|): 2.0010877493528614e-12
+// mean(f - f_GSL): 4.4867383617942993e-16
+// variance(f - f_GSL): 8.9441502176883788e-31
+// stddev(f - f_GSL): 9.4573517528367196e-16
 const testcase_cyl_bessel_j<double>
-data015[21] =
+data021[21] =
 {
-  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000 },
-  { 0.046565116277751971, 2.0000000000000000, 5.0000000000000000 },
-  { 0.25463031368512068, 2.0000000000000000, 10.000000000000000 },
-  { 0.041571677975250486, 2.0000000000000000, 15.000000000000000 },
-  { -0.16034135192299820, 2.0000000000000000, 20.000000000000000 },
-  { -0.10629480324238134, 2.0000000000000000, 25.000000000000000 },
-  { 0.078451246073265299, 2.0000000000000000, 30.000000000000000 },
-  { 0.12935945088086259, 2.0000000000000000, 35.000000000000000 },
-  { -0.0010649746823579794, 2.0000000000000000, 40.000000000000000 },
-  { -0.11455872158985966, 2.0000000000000000, 45.000000000000000 },
-  { -0.059712800794258863, 2.0000000000000000, 50.000000000000000 },
-  { 0.071702846709739240, 2.0000000000000000, 55.000000000000000 },
-  { 0.093025083547667420, 2.0000000000000000, 60.000000000000000 },
-  { -0.015692568697643128, 2.0000000000000000, 65.000000000000000 },
-  { -0.094623361089161029, 2.0000000000000000, 70.000000000000000 },
-  { -0.036914313672959179, 2.0000000000000000, 75.000000000000000 },
-  { 0.068340733095317172, 2.0000000000000000, 80.000000000000000 },
-  { 0.072096899745329540, 2.0000000000000000, 85.000000000000000 },
-  { -0.024853891217550248, 2.0000000000000000, 90.000000000000000 },
-  { -0.081862337494957332, 2.0000000000000000, 95.000000000000000 },
-  { -0.021528757344505364, 2.0000000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.046565116277751971, 2.0000000000000000, 5.0000000000000000, 0.0 },
+  { 0.25463031368512068, 2.0000000000000000, 10.000000000000000, 0.0 },
+  { 0.041571677975250486, 2.0000000000000000, 15.000000000000000, 0.0 },
+  { -0.16034135192299820, 2.0000000000000000, 20.000000000000000, 0.0 },
+  { -0.10629480324238134, 2.0000000000000000, 25.000000000000000, 0.0 },
+  { 0.078451246073265299, 2.0000000000000000, 30.000000000000000, 0.0 },
+  { 0.12935945088086259, 2.0000000000000000, 35.000000000000000, 0.0 },
+  { -0.0010649746823579794, 2.0000000000000000, 40.000000000000000, 0.0 },
+  { -0.11455872158985966, 2.0000000000000000, 45.000000000000000, 0.0 },
+  { -0.059712800794258863, 2.0000000000000000, 50.000000000000000, 0.0 },
+  { 0.071702846709739240, 2.0000000000000000, 55.000000000000000, 0.0 },
+  { 0.093025083547667420, 2.0000000000000000, 60.000000000000000, 0.0 },
+  { -0.015692568697643128, 2.0000000000000000, 65.000000000000000, 0.0 },
+  { -0.094623361089161029, 2.0000000000000000, 70.000000000000000, 0.0 },
+  { -0.036914313672959179, 2.0000000000000000, 75.000000000000000, 0.0 },
+  { 0.068340733095317172, 2.0000000000000000, 80.000000000000000, 0.0 },
+  { 0.072096899745329540, 2.0000000000000000, 85.000000000000000, 0.0 },
+  { -0.024853891217550248, 2.0000000000000000, 90.000000000000000, 0.0 },
+  { -0.081862337494957332, 2.0000000000000000, 95.000000000000000, 0.0 },
+  { -0.021528757344505364, 2.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler015 = 2.5000000000000017e-10;
+const double toler021 = 2.5000000000000017e-10;
 
 // Test data for nu=5.0000000000000000.
-// max(|f - f_GSL|): 6.8521577301083880e-15
-// max(|f - f_GSL| / |f_GSL|): 5.6813560677959848e-13
+// max(|f - f_GSL|): 6.8452188362044808e-15 at index 14
+// max(|f - f_GSL| / |f_GSL|): 5.6871180922055143e-13
+// mean(f - f_GSL): -8.6612264979127729e-17
+// variance(f - f_GSL): 1.4989992815624512e-31
+// stddev(f - f_GSL): 3.8716912087128681e-16
 const testcase_cyl_bessel_j<double>
-data016[21] =
+data022[21] =
 {
-  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000 },
-  { 0.26114054612017007, 5.0000000000000000, 5.0000000000000000 },
-  { -0.23406152818679371, 5.0000000000000000, 10.000000000000000 },
-  { 0.13045613456502966, 5.0000000000000000, 15.000000000000000 },
-  { 0.15116976798239498, 5.0000000000000000, 20.000000000000000 },
-  { -0.066007995398422933, 5.0000000000000000, 25.000000000000000 },
-  { -0.14324029551207709, 5.0000000000000000, 30.000000000000000 },
-  { -0.0015053072953907251, 5.0000000000000000, 35.000000000000000 },
-  { 0.12257346597711777, 5.0000000000000000, 40.000000000000000 },
-  { 0.057984499200954109, 5.0000000000000000, 45.000000000000000 },
-  { -0.081400247696569616, 5.0000000000000000, 50.000000000000000 },
-  { -0.092569895786432765, 5.0000000000000000, 55.000000000000000 },
-  { 0.027454744228344204, 5.0000000000000000, 60.000000000000000 },
-  { 0.099110527701539025, 5.0000000000000000, 65.000000000000000 },
-  { 0.026058129823895364, 5.0000000000000000, 70.000000000000000 },
-  { -0.078523977013751398, 5.0000000000000000, 75.000000000000000 },
-  { -0.065862349140031584, 5.0000000000000000, 80.000000000000000 },
-  { 0.038669072284680979, 5.0000000000000000, 85.000000000000000 },
-  { 0.082759319528415157, 5.0000000000000000, 90.000000000000000 },
-  { 0.0079423372702472871, 5.0000000000000000, 95.000000000000000 },
-  { -0.074195736964513898, 5.0000000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.26114054612017007, 5.0000000000000000, 5.0000000000000000, 0.0 },
+  { -0.23406152818679371, 5.0000000000000000, 10.000000000000000, 0.0 },
+  { 0.13045613456502966, 5.0000000000000000, 15.000000000000000, 0.0 },
+  { 0.15116976798239498, 5.0000000000000000, 20.000000000000000, 0.0 },
+  { -0.066007995398422933, 5.0000000000000000, 25.000000000000000, 0.0 },
+  { -0.14324029551207709, 5.0000000000000000, 30.000000000000000, 0.0 },
+  { -0.0015053072953907251, 5.0000000000000000, 35.000000000000000, 0.0 },
+  { 0.12257346597711777, 5.0000000000000000, 40.000000000000000, 0.0 },
+  { 0.057984499200954109, 5.0000000000000000, 45.000000000000000, 0.0 },
+  { -0.081400247696569616, 5.0000000000000000, 50.000000000000000, 0.0 },
+  { -0.092569895786432765, 5.0000000000000000, 55.000000000000000, 0.0 },
+  { 0.027454744228344204, 5.0000000000000000, 60.000000000000000, 0.0 },
+  { 0.099110527701539025, 5.0000000000000000, 65.000000000000000, 0.0 },
+  { 0.026058129823895364, 5.0000000000000000, 70.000000000000000, 0.0 },
+  { -0.078523977013751398, 5.0000000000000000, 75.000000000000000, 0.0 },
+  { -0.065862349140031584, 5.0000000000000000, 80.000000000000000, 0.0 },
+  { 0.038669072284680979, 5.0000000000000000, 85.000000000000000, 0.0 },
+  { 0.082759319528415157, 5.0000000000000000, 90.000000000000000, 0.0 },
+  { 0.0079423372702472871, 5.0000000000000000, 95.000000000000000, 0.0 },
+  { -0.074195736964513898, 5.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler016 = 5.0000000000000028e-11;
+const double toler022 = 5.0000000000000028e-11;
 
 // Test data for nu=10.000000000000000.
-// max(|f - f_GSL|): 7.2303274478713320e-15
-// max(|f - f_GSL| / |f_GSL|): 3.6974790630140835e-13
+// max(|f - f_GSL|): 7.2337968948232856e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.6992532852132266e-13
+// mean(f - f_GSL): 4.8246996675604947e-16
+// variance(f - f_GSL): 7.6040256561433464e-31
+// stddev(f - f_GSL): 8.7201064535608434e-16
 const testcase_cyl_bessel_j<double>
-data017[21] =
+data023[21] =
 {
-  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000 },
-  { 0.0014678026473104744, 10.000000000000000, 5.0000000000000000 },
-  { 0.20748610663335865, 10.000000000000000, 10.000000000000000 },
-  { -0.090071811047659087, 10.000000000000000, 15.000000000000000 },
-  { 0.18648255802394512, 10.000000000000000, 20.000000000000000 },
-  { -0.075179843948523312, 10.000000000000000, 25.000000000000000 },
-  { -0.12987689399858882, 10.000000000000000, 30.000000000000000 },
-  { 0.063546391343962866, 10.000000000000000, 35.000000000000000 },
-  { 0.11938336278226094, 10.000000000000000, 40.000000000000000 },
-  { -0.026971402475010831, 10.000000000000000, 45.000000000000000 },
-  { -0.11384784914946940, 10.000000000000000, 50.000000000000000 },
-  { -0.015773790303746080, 10.000000000000000, 55.000000000000000 },
-  { 0.097177143328071064, 10.000000000000000, 60.000000000000000 },
-  { 0.054617389951112129, 10.000000000000000, 65.000000000000000 },
-  { -0.065870338561952013, 10.000000000000000, 70.000000000000000 },
-  { -0.080417867891894437, 10.000000000000000, 75.000000000000000 },
-  { 0.024043850978184747, 10.000000000000000, 80.000000000000000 },
-  { 0.086824832700067869, 10.000000000000000, 85.000000000000000 },
-  { 0.019554748856312299, 10.000000000000000, 90.000000000000000 },
-  { -0.072341598669443757, 10.000000000000000, 95.000000000000000 },
-  { -0.054732176935472096, 10.000000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000, 0.0 },
+  { 0.0014678026473104744, 10.000000000000000, 5.0000000000000000, 0.0 },
+  { 0.20748610663335865, 10.000000000000000, 10.000000000000000, 0.0 },
+  { -0.090071811047659087, 10.000000000000000, 15.000000000000000, 0.0 },
+  { 0.18648255802394512, 10.000000000000000, 20.000000000000000, 0.0 },
+  { -0.075179843948523312, 10.000000000000000, 25.000000000000000, 0.0 },
+  { -0.12987689399858882, 10.000000000000000, 30.000000000000000, 0.0 },
+  { 0.063546391343962866, 10.000000000000000, 35.000000000000000, 0.0 },
+  { 0.11938336278226094, 10.000000000000000, 40.000000000000000, 0.0 },
+  { -0.026971402475010831, 10.000000000000000, 45.000000000000000, 0.0 },
+  { -0.11384784914946940, 10.000000000000000, 50.000000000000000, 0.0 },
+  { -0.015773790303746080, 10.000000000000000, 55.000000000000000, 0.0 },
+  { 0.097177143328071064, 10.000000000000000, 60.000000000000000, 0.0 },
+  { 0.054617389951112129, 10.000000000000000, 65.000000000000000, 0.0 },
+  { -0.065870338561952013, 10.000000000000000, 70.000000000000000, 0.0 },
+  { -0.080417867891894437, 10.000000000000000, 75.000000000000000, 0.0 },
+  { 0.024043850978184747, 10.000000000000000, 80.000000000000000, 0.0 },
+  { 0.086824832700067869, 10.000000000000000, 85.000000000000000, 0.0 },
+  { 0.019554748856312299, 10.000000000000000, 90.000000000000000, 0.0 },
+  { -0.072341598669443757, 10.000000000000000, 95.000000000000000, 0.0 },
+  { -0.054732176935472096, 10.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler017 = 2.5000000000000014e-11;
+const double toler023 = 2.5000000000000014e-11;
 
 // Test data for nu=20.000000000000000.
-// max(|f - f_GSL|): 7.7177847446208148e-15
-// max(|f - f_GSL| / |f_GSL|): 1.1191513260854523e-12
+// max(|f - f_GSL|): 7.7212541915727684e-15 at index 15
+// max(|f - f_GSL| / |f_GSL|): 1.1196544285022136e-12
+// mean(f - f_GSL): 5.2156489342296849e-16
+// variance(f - f_GSL): 3.4201480080426176e-31
+// stddev(f - f_GSL): 5.8482031497226715e-16
 const testcase_cyl_bessel_j<double>
-data018[21] =
+data024[21] =
 {
-  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000 },
-  { 2.7703300521289426e-11, 20.000000000000000, 5.0000000000000000 },
-  { 1.1513369247813403e-05, 20.000000000000000, 10.000000000000000 },
-  { 0.0073602340792234934, 20.000000000000000, 15.000000000000000 },
-  { 0.16474777377532665, 20.000000000000000, 20.000000000000000 },
-  { 0.051994049228303307, 20.000000000000000, 25.000000000000000 },
-  { 0.0048310199934040923, 20.000000000000000, 30.000000000000000 },
-  { -0.10927417397178038, 20.000000000000000, 35.000000000000000 },
-  { 0.12779393355084889, 20.000000000000000, 40.000000000000000 },
-  { 0.0047633437900313621, 20.000000000000000, 45.000000000000000 },
-  { -0.11670435275957974, 20.000000000000000, 50.000000000000000 },
-  { 0.025389204574566639, 20.000000000000000, 55.000000000000000 },
-  { 0.10266020557876326, 20.000000000000000, 60.000000000000000 },
-  { -0.023138582263434154, 20.000000000000000, 65.000000000000000 },
-  { -0.096058573489952365, 20.000000000000000, 70.000000000000000 },
-  { 0.0068961047221522270, 20.000000000000000, 75.000000000000000 },
-  { 0.090565405489918357, 20.000000000000000, 80.000000000000000 },
-  { 0.015985497599497172, 20.000000000000000, 85.000000000000000 },
-  { -0.080345344044422534, 20.000000000000000, 90.000000000000000 },
-  { -0.040253075701614051, 20.000000000000000, 95.000000000000000 },
-  { 0.062217458498338672, 20.000000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000, 0.0 },
+  { 2.7703300521289426e-11, 20.000000000000000, 5.0000000000000000, 0.0 },
+  { 1.1513369247813403e-05, 20.000000000000000, 10.000000000000000, 0.0 },
+  { 0.0073602340792234934, 20.000000000000000, 15.000000000000000, 0.0 },
+  { 0.16474777377532665, 20.000000000000000, 20.000000000000000, 0.0 },
+  { 0.051994049228303307, 20.000000000000000, 25.000000000000000, 0.0 },
+  { 0.0048310199934040923, 20.000000000000000, 30.000000000000000, 0.0 },
+  { -0.10927417397178038, 20.000000000000000, 35.000000000000000, 0.0 },
+  { 0.12779393355084889, 20.000000000000000, 40.000000000000000, 0.0 },
+  { 0.0047633437900313621, 20.000000000000000, 45.000000000000000, 0.0 },
+  { -0.11670435275957974, 20.000000000000000, 50.000000000000000, 0.0 },
+  { 0.025389204574566639, 20.000000000000000, 55.000000000000000, 0.0 },
+  { 0.10266020557876326, 20.000000000000000, 60.000000000000000, 0.0 },
+  { -0.023138582263434154, 20.000000000000000, 65.000000000000000, 0.0 },
+  { -0.096058573489952365, 20.000000000000000, 70.000000000000000, 0.0 },
+  { 0.0068961047221522270, 20.000000000000000, 75.000000000000000, 0.0 },
+  { 0.090565405489918357, 20.000000000000000, 80.000000000000000, 0.0 },
+  { 0.015985497599497172, 20.000000000000000, 85.000000000000000, 0.0 },
+  { -0.080345344044422534, 20.000000000000000, 90.000000000000000, 0.0 },
+  { -0.040253075701614051, 20.000000000000000, 95.000000000000000, 0.0 },
+  { 0.062217458498338672, 20.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler018 = 1.0000000000000006e-10;
+const double toler024 = 1.0000000000000006e-10;
 
 // Test data for nu=50.000000000000000.
-// max(|f - f_GSL|): 6.6543992538470320e-15
+// max(|f - f_GSL|): 6.6543992538470320e-15 at index 17
 // max(|f - f_GSL| / |f_GSL|): 1.6466369526724007e-13
+// mean(f - f_GSL): -1.7248164093189558e-16
+// variance(f - f_GSL): 3.3098955753115488e-31
+// stddev(f - f_GSL): 5.7531691921162455e-16
 const testcase_cyl_bessel_j<double>
-data019[21] =
+data025[21] =
 {
-  { 0.0000000000000000, 50.000000000000000, 0.0000000000000000 },
-  { 2.2942476159525415e-45, 50.000000000000000, 5.0000000000000000 },
-  { 1.7845136078715964e-30, 50.000000000000000, 10.000000000000000 },
-  { 6.1060519495338733e-22, 50.000000000000000, 15.000000000000000 },
-  { 4.4510392847006872e-16, 50.000000000000000, 20.000000000000000 },
-  { 9.7561594280229808e-12, 50.000000000000000, 25.000000000000000 },
-  { 2.0581656631564172e-08, 50.000000000000000, 30.000000000000000 },
-  { 7.6069951699272960e-06, 50.000000000000000, 35.000000000000000 },
-  { 0.00068185243531768309, 50.000000000000000, 40.000000000000000 },
-  { 0.017284343240791214, 50.000000000000000, 45.000000000000000 },
-  { 0.12140902189761507, 50.000000000000000, 50.000000000000000 },
-  { 0.13594720957176012, 50.000000000000000, 55.000000000000000 },
-  { -0.13798273148535209, 50.000000000000000, 60.000000000000000 },
-  { 0.12116217746619409, 50.000000000000000, 65.000000000000000 },
-  { -0.11394866738787145, 50.000000000000000, 70.000000000000000 },
-  { 0.094076799581573348, 50.000000000000000, 75.000000000000000 },
-  { -0.039457764590251347, 50.000000000000000, 80.000000000000000 },
-  { -0.040412060734136383, 50.000000000000000, 85.000000000000000 },
-  { 0.090802099838032266, 50.000000000000000, 90.000000000000000 },
-  { -0.055979156267280165, 50.000000000000000, 95.000000000000000 },
-  { -0.038698339728525440, 50.000000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 50.000000000000000, 0.0000000000000000, 0.0 },
+  { 2.2942476159525415e-45, 50.000000000000000, 5.0000000000000000, 0.0 },
+  { 1.7845136078715964e-30, 50.000000000000000, 10.000000000000000, 0.0 },
+  { 6.1060519495338733e-22, 50.000000000000000, 15.000000000000000, 0.0 },
+  { 4.4510392847006872e-16, 50.000000000000000, 20.000000000000000, 0.0 },
+  { 9.7561594280229808e-12, 50.000000000000000, 25.000000000000000, 0.0 },
+  { 2.0581656631564172e-08, 50.000000000000000, 30.000000000000000, 0.0 },
+  { 7.6069951699272960e-06, 50.000000000000000, 35.000000000000000, 0.0 },
+  { 0.00068185243531768309, 50.000000000000000, 40.000000000000000, 0.0 },
+  { 0.017284343240791214, 50.000000000000000, 45.000000000000000, 0.0 },
+  { 0.12140902189761507, 50.000000000000000, 50.000000000000000, 0.0 },
+  { 0.13594720957176012, 50.000000000000000, 55.000000000000000, 0.0 },
+  { -0.13798273148535209, 50.000000000000000, 60.000000000000000, 0.0 },
+  { 0.12116217746619409, 50.000000000000000, 65.000000000000000, 0.0 },
+  { -0.11394866738787145, 50.000000000000000, 70.000000000000000, 0.0 },
+  { 0.094076799581573348, 50.000000000000000, 75.000000000000000, 0.0 },
+  { -0.039457764590251347, 50.000000000000000, 80.000000000000000, 0.0 },
+  { -0.040412060734136383, 50.000000000000000, 85.000000000000000, 0.0 },
+  { 0.090802099838032266, 50.000000000000000, 90.000000000000000, 0.0 },
+  { -0.055979156267280165, 50.000000000000000, 95.000000000000000, 0.0 },
+  { -0.038698339728525440, 50.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler019 = 1.0000000000000006e-11;
+const double toler025 = 1.0000000000000006e-11;
 
 // Test data for nu=100.00000000000000.
-// max(|f - f_GSL|): 4.8138576458356397e-17
-// max(|f - f_GSL| / |f_GSL|): 1.0835289187603112e-13
+// max(|f - f_GSL|): 6.3751087742147661e-17 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3655432948759698e-13
+// mean(f - f_GSL): -3.2198025339906150e-18
+// variance(f - f_GSL): 7.7469087160903957e-35
+// stddev(f - f_GSL): 8.8016525244356221e-18
 const testcase_cyl_bessel_j<double>
-data020[21] =
+data026[21] =
 {
-  { 0.0000000000000000, 100.00000000000000, 0.0000000000000000 },
-  { 6.2677893955418763e-119, 100.00000000000000, 5.0000000000000000 },
-  { 6.5973160641553816e-89, 100.00000000000000, 10.000000000000000 },
-  { 1.9660095611249536e-71, 100.00000000000000, 15.000000000000000 },
-  { 3.9617550943362524e-59, 100.00000000000000, 20.000000000000000 },
-  { 1.1064482655301687e-49, 100.00000000000000, 25.000000000000000 },
-  { 4.5788015281752354e-42, 100.00000000000000, 30.000000000000000 },
-  { 9.9210206714732606e-36, 100.00000000000000, 35.000000000000000 },
-  { 2.3866062996027414e-30, 100.00000000000000, 40.000000000000000 },
-  { 1.0329791804565538e-25, 100.00000000000000, 45.000000000000000 },
-  { 1.1159273690838340e-21, 100.00000000000000, 50.000000000000000 },
-  { 3.7899753451900682e-18, 100.00000000000000, 55.000000000000000 },
-  { 4.7832744078781205e-15, 100.00000000000000, 60.000000000000000 },
-  { 2.5375564579490517e-12, 100.00000000000000, 65.000000000000000 },
-  { 6.1982452141641260e-10, 100.00000000000000, 70.000000000000000 },
-  { 7.4479005905904457e-08, 100.00000000000000, 75.000000000000000 },
-  { 4.6065530648234948e-06, 100.00000000000000, 80.000000000000000 },
-  { 0.00015043869999501765, 100.00000000000000, 85.000000000000000 },
-  { 0.0026021305819963472, 100.00000000000000, 90.000000000000000 },
-  { 0.023150768009428030, 100.00000000000000, 95.000000000000000 },
-  { 0.096366673295861571, 100.00000000000000, 100.00000000000000 },
+  { 0.0000000000000000, 100.00000000000000, 0.0000000000000000, 0.0 },
+  { 6.2677893955418763e-119, 100.00000000000000, 5.0000000000000000, 0.0 },
+  { 6.5973160641553816e-89, 100.00000000000000, 10.000000000000000, 0.0 },
+  { 1.9660095611249536e-71, 100.00000000000000, 15.000000000000000, 0.0 },
+  { 3.9617550943362524e-59, 100.00000000000000, 20.000000000000000, 0.0 },
+  { 1.1064482655301687e-49, 100.00000000000000, 25.000000000000000, 0.0 },
+  { 4.5788015281752354e-42, 100.00000000000000, 30.000000000000000, 0.0 },
+  { 9.9210206714735426e-36, 100.00000000000000, 35.000000000000000, 0.0 },
+  { 2.3866062996026735e-30, 100.00000000000000, 40.000000000000000, 0.0 },
+  { 1.0329791804565538e-25, 100.00000000000000, 45.000000000000000, 0.0 },
+  { 1.1159273690838498e-21, 100.00000000000000, 50.000000000000000, 0.0 },
+  { 3.7899753451900944e-18, 100.00000000000000, 55.000000000000000, 0.0 },
+  { 4.7832744078782562e-15, 100.00000000000000, 60.000000000000000, 0.0 },
+  { 2.5375564579490428e-12, 100.00000000000000, 65.000000000000000, 0.0 },
+  { 6.1982452141641260e-10, 100.00000000000000, 70.000000000000000, 0.0 },
+  { 7.4479005905904457e-08, 100.00000000000000, 75.000000000000000, 0.0 },
+  { 4.6065530648234940e-06, 100.00000000000000, 80.000000000000000, 0.0 },
+  { 0.00015043869999501787, 100.00000000000000, 85.000000000000000, 0.0 },
+  { 0.0026021305819963628, 100.00000000000000, 90.000000000000000, 0.0 },
+  { 0.023150768009428030, 100.00000000000000, 95.000000000000000, 0.0 },
+  { 0.096366673295861571, 100.00000000000000, 100.00000000000000, 0.0 },
 };
-const double toler020 = 1.0000000000000006e-11;
+const double toler026 = 1.0000000000000006e-11;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_cyl_bessel_j<Tp> (&data)[Num], Tp toler)
+  test(const testcase_cyl_bessel_j<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::cyl_bessel_j(data[i].nu, data[i].x);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::cyl_bessel_j(data[i].nu, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
@@ -668,12 +728,6 @@ template<typename Tp, unsigned int Num>
 int
 main()
 {
-  test(data001, toler001);
-  test(data002, toler002);
-  test(data003, toler003);
-  test(data004, toler004);
-  test(data005, toler005);
-  test(data006, toler006);
   test(data007, toler007);
   test(data008, toler008);
   test(data009, toler009);
@@ -688,5 +742,11 @@ main()
   test(data018, toler018);
   test(data019, toler019);
   test(data020, toler020);
+  test(data021, toler021);
+  test(data022, toler022);
+  test(data023, toler023);
+  test(data024, toler024);
+  test(data025, toler025);
+  test(data026, toler026);
   return 0;
 }
index 6d9e44a..64171ac 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for nu=0.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 1.7863051312335036e-16
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 0
+// max(|f - f_GSL| / |f_GSL|): 3.3025402038894216e-16
+// mean(f - f_GSL): 1.0473392986209972e-17
+// variance(f - f_GSL): 5.5842559222476003e-36
+// stddev(f - f_GSL): 2.3631030282760842e-18
 const testcase_cyl_bessel_k<double>
-data001[20] =
+data007[20] =
 {
-  { 1.5415067512483025, 0.0000000000000000, 0.25000000000000000 },
-  { 0.92441907122766565, 0.0000000000000000, 0.50000000000000000 },
-  { 0.61058242211646430, 0.0000000000000000, 0.75000000000000000 },
-  { 0.42102443824070829, 0.0000000000000000, 1.0000000000000000 },
-  { 0.29760308908410588, 0.0000000000000000, 1.2500000000000000 },
-  { 0.21380556264752565, 0.0000000000000000, 1.5000000000000000 },
-  { 0.15537981238660362, 0.0000000000000000, 1.7500000000000000 },
-  { 0.11389387274953360, 0.0000000000000000, 2.0000000000000000 },
-  { 0.084043111974658191, 0.0000000000000000, 2.2500000000000000 },
-  { 0.062347553200366168, 0.0000000000000000, 2.5000000000000000 },
-  { 0.046454901308760774, 0.0000000000000000, 2.7500000000000000 },
-  { 0.034739504386279256, 0.0000000000000000, 3.0000000000000000 },
-  { 0.026058755255154966, 0.0000000000000000, 3.2500000000000000 },
-  { 0.019598897170368501, 0.0000000000000000, 3.5000000000000000 },
-  { 0.014774250877128706, 0.0000000000000000, 3.7500000000000000 },
-  { 0.011159676085853026, 0.0000000000000000, 4.0000000000000000 },
-  { 0.0084443877245429649, 0.0000000000000000, 4.2500000000000000 },
-  { 0.0063998572432339747, 0.0000000000000000, 4.5000000000000000 },
-  { 0.0048572045578879524, 0.0000000000000000, 4.7500000000000000 },
-  { 0.0036910983340425947, 0.0000000000000000, 5.0000000000000000 },
+  { 1.5415067512483025, 0.0000000000000000, 0.25000000000000000, 0.0 },
+  { 0.92441907122766565, 0.0000000000000000, 0.50000000000000000, 0.0 },
+  { 0.61058242211646430, 0.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.42102443824070834, 0.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.29760308908410588, 0.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.21380556264752565, 0.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.15537981238660359, 0.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.11389387274953360, 0.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.084043111974658191, 0.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.062347553200366168, 0.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.046454901308760774, 0.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.034739504386279256, 0.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.026058755255154966, 0.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.019598897170368501, 0.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.014774250877128707, 0.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.011159676085853030, 0.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.0084443877245429649, 0.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.0063998572432339756, 0.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.0048572045578879524, 0.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.0036910983340425947, 0.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler001 = 2.5000000000000020e-13;
+const double toler007 = 2.5000000000000020e-13;
 
 // Test data for nu=0.33333333333333331.
-// max(|f - f_GSL|): 1.3322676295501878e-15
-// max(|f - f_GSL| / |f_GSL|): 4.3522010494015439e-15
+// max(|f - f_GSL|): 9.1593399531575415e-16 at index 5
+// max(|f - f_GSL| / |f_GSL|): 4.1603543087763551e-15
+// mean(f - f_GSL): -2.0157486790850499e-16
+// variance(f - f_GSL): 2.2511040095474369e-33
+// stddev(f - f_GSL): 4.7445800757785052e-17
 const testcase_cyl_bessel_k<double>
-data002[20] =
+data008[20] =
 {
-  { 1.7144912564234518, 0.33333333333333331, 0.25000000000000000 },
-  { 0.98903107424672421, 0.33333333333333331, 0.50000000000000000 },
-  { 0.64216899667282989, 0.33333333333333331, 0.75000000000000000 },
-  { 0.43843063344153432, 0.33333333333333331, 1.0000000000000000 },
-  { 0.30788192414945043, 0.33333333333333331, 1.2500000000000000 },
-  { 0.22015769026776688, 0.33333333333333331, 1.5000000000000000 },
-  { 0.15943413057311245, 0.33333333333333331, 1.7500000000000000 },
-  { 0.11654496129616534, 0.33333333333333331, 2.0000000000000000 },
-  { 0.085809609306439674, 0.33333333333333331, 2.2500000000000000 },
-  { 0.063542537454733386, 0.33333333333333331, 2.5000000000000000 },
-  { 0.047273354184795509, 0.33333333333333331, 2.7500000000000000 },
-  { 0.035305904902162587, 0.33333333333333331, 3.0000000000000000 },
-  { 0.026454186892773169, 0.33333333333333331, 3.2500000000000000 },
-  { 0.019877061407943805, 0.33333333333333331, 3.5000000000000000 },
-  { 0.014971213514760214, 0.33333333333333331, 3.7500000000000000 },
-  { 0.011299947573672165, 0.33333333333333331, 4.0000000000000000 },
-  { 0.0085447959546110473, 0.33333333333333331, 4.2500000000000000 },
-  { 0.0064720581217078237, 0.33333333333333331, 4.5000000000000000 },
-  { 0.0049093342803275264, 0.33333333333333331, 4.7500000000000000 },
-  { 0.0037288750960535887, 0.33333333333333331, 5.0000000000000000 },
+  { 1.7144912564234513, 0.33333333333333331, 0.25000000000000000, 0.0 },
+  { 0.98903107424672421, 0.33333333333333331, 0.50000000000000000, 0.0 },
+  { 0.64216899667282989, 0.33333333333333331, 0.75000000000000000, 0.0 },
+  { 0.43843063344153443, 0.33333333333333331, 1.0000000000000000, 0.0 },
+  { 0.30788192414945043, 0.33333333333333331, 1.2500000000000000, 0.0 },
+  { 0.22015769026776688, 0.33333333333333331, 1.5000000000000000, 0.0 },
+  { 0.15943413057311243, 0.33333333333333331, 1.7500000000000000, 0.0 },
+  { 0.11654496129616534, 0.33333333333333331, 2.0000000000000000, 0.0 },
+  { 0.085809609306439674, 0.33333333333333331, 2.2500000000000000, 0.0 },
+  { 0.063542537454733386, 0.33333333333333331, 2.5000000000000000, 0.0 },
+  { 0.047273354184795509, 0.33333333333333331, 2.7500000000000000, 0.0 },
+  { 0.035305904902162587, 0.33333333333333331, 3.0000000000000000, 0.0 },
+  { 0.026454186892773169, 0.33333333333333331, 3.2500000000000000, 0.0 },
+  { 0.019877061407943805, 0.33333333333333331, 3.5000000000000000, 0.0 },
+  { 0.014971213514760216, 0.33333333333333331, 3.7500000000000000, 0.0 },
+  { 0.011299947573672166, 0.33333333333333331, 4.0000000000000000, 0.0 },
+  { 0.0085447959546110473, 0.33333333333333331, 4.2500000000000000, 0.0 },
+  { 0.0064720581217078245, 0.33333333333333331, 4.5000000000000000, 0.0 },
+  { 0.0049093342803275264, 0.33333333333333331, 4.7500000000000000, 0.0 },
+  { 0.0037288750960535887, 0.33333333333333331, 5.0000000000000000, 0.0 },
 };
-const double toler002 = 2.5000000000000020e-13;
+const double toler008 = 2.5000000000000020e-13;
 
 // Test data for nu=0.50000000000000000.
-// max(|f - f_GSL|): 1.3322676295501878e-15
-// max(|f - f_GSL| / |f_GSL|): 1.5172850443872369e-15
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.3827172837936134e-15
+// mean(f - f_GSL): 7.5200262683594590e-17
+// variance(f - f_GSL): 3.1330080374967473e-34
+// stddev(f - f_GSL): 1.7700305188037711e-17
 const testcase_cyl_bessel_k<double>
-data003[20] =
+data009[20] =
 {
-  { 1.9521640631515476, 0.50000000000000000, 0.25000000000000000 },
-  { 1.0750476034999195, 0.50000000000000000, 0.50000000000000000 },
-  { 0.68361006034952421, 0.50000000000000000, 0.75000000000000000 },
-  { 0.46106850444789454, 0.50000000000000000, 1.0000000000000000 },
-  { 0.32117137397144746, 0.50000000000000000, 1.2500000000000000 },
-  { 0.22833505222826550, 0.50000000000000000, 1.5000000000000000 },
-  { 0.16463628997380864, 0.50000000000000000, 1.7500000000000000 },
-  { 0.11993777196806145, 0.50000000000000000, 2.0000000000000000 },
-  { 0.088065558803650454, 0.50000000000000000, 2.2500000000000000 },
-  { 0.065065943154009986, 0.50000000000000000, 2.5000000000000000 },
-  { 0.048315198301417825, 0.50000000000000000, 2.7500000000000000 },
-  { 0.036025985131764589, 0.50000000000000000, 3.0000000000000000 },
-  { 0.026956356532443351, 0.50000000000000000, 3.2500000000000000 },
-  { 0.020229969578139294, 0.50000000000000000, 3.5000000000000000 },
-  { 0.015220888252975564, 0.50000000000000000, 3.7500000000000000 },
-  { 0.011477624576608052, 0.50000000000000000, 4.0000000000000000 },
-  { 0.0086718932956978342, 0.50000000000000000, 4.2500000000000000 },
-  { 0.0065633945646345407, 0.50000000000000000, 4.5000000000000000 },
-  { 0.0049752435421262292, 0.50000000000000000, 4.7500000000000000 },
-  { 0.0037766133746428825, 0.50000000000000000, 5.0000000000000000 },
+  { 1.9521640631515476, 0.50000000000000000, 0.25000000000000000, 0.0 },
+  { 1.0750476034999195, 0.50000000000000000, 0.50000000000000000, 0.0 },
+  { 0.68361006034952432, 0.50000000000000000, 0.75000000000000000, 0.0 },
+  { 0.46106850444789443, 0.50000000000000000, 1.0000000000000000, 0.0 },
+  { 0.32117137397144746, 0.50000000000000000, 1.2500000000000000, 0.0 },
+  { 0.22833505222826550, 0.50000000000000000, 1.5000000000000000, 0.0 },
+  { 0.16463628997380861, 0.50000000000000000, 1.7500000000000000, 0.0 },
+  { 0.11993777196806145, 0.50000000000000000, 2.0000000000000000, 0.0 },
+  { 0.088065558803650454, 0.50000000000000000, 2.2500000000000000, 0.0 },
+  { 0.065065943154009986, 0.50000000000000000, 2.5000000000000000, 0.0 },
+  { 0.048315198301417825, 0.50000000000000000, 2.7500000000000000, 0.0 },
+  { 0.036025985131764589, 0.50000000000000000, 3.0000000000000000, 0.0 },
+  { 0.026956356532443351, 0.50000000000000000, 3.2500000000000000, 0.0 },
+  { 0.020229969578139294, 0.50000000000000000, 3.5000000000000000, 0.0 },
+  { 0.015220888252975568, 0.50000000000000000, 3.7500000000000000, 0.0 },
+  { 0.011477624576608053, 0.50000000000000000, 4.0000000000000000, 0.0 },
+  { 0.0086718932956978342, 0.50000000000000000, 4.2500000000000000, 0.0 },
+  { 0.0065633945646345424, 0.50000000000000000, 4.5000000000000000, 0.0 },
+  { 0.0049752435421262292, 0.50000000000000000, 4.7500000000000000, 0.0 },
+  { 0.0037766133746428825, 0.50000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler003 = 2.5000000000000020e-13;
+const double toler009 = 2.5000000000000020e-13;
 
 // Test data for nu=0.66666666666666663.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 8.1483075013172610e-16
+// max(|f - f_GSL|): 8.3266726846886741e-16 at index 4
+// max(|f - f_GSL| / |f_GSL|): 2.4444922503951783e-15
+// mean(f - f_GSL): 1.5718763096694843e-16
+// variance(f - f_GSL): 1.3764253709076715e-33
+// stddev(f - f_GSL): 3.7100207154511570e-17
 const testcase_cyl_bessel_k<double>
-data004[20] =
+data010[20] =
 {
-  { 2.3289060745544101, 0.66666666666666663, 0.25000000000000000 },
-  { 1.2059304647203353, 0.66666666666666663, 0.50000000000000000 },
-  { 0.74547232976647215, 0.66666666666666663, 0.75000000000000000 },
-  { 0.49447506210420827, 0.66666666666666663, 1.0000000000000000 },
-  { 0.34062994813514252, 0.66666666666666663, 1.2500000000000000 },
-  { 0.24024045240315581, 0.66666666666666663, 1.5000000000000000 },
-  { 0.17217716908452310, 0.66666666666666663, 1.7500000000000000 },
-  { 0.12483892748812841, 0.66666666666666663, 2.0000000000000000 },
-  { 0.091315296079621050, 0.66666666666666663, 2.2500000000000000 },
-  { 0.067255322171623361, 0.66666666666666663, 2.5000000000000000 },
-  { 0.049809546542402224, 0.66666666666666663, 2.7500000000000000 },
-  { 0.037057074495188531, 0.66666666666666663, 3.0000000000000000 },
-  { 0.027674365504886729, 0.66666666666666663, 3.2500000000000000 },
-  { 0.020733915836010912, 0.66666666666666663, 3.5000000000000000 },
-  { 0.015577015510251332, 0.66666666666666663, 3.7500000000000000 },
-  { 0.011730801456525336, 0.66666666666666663, 4.0000000000000000 },
-  { 0.0088528343204658851, 0.66666666666666663, 4.2500000000000000 },
-  { 0.0066933190915775560, 0.66666666666666663, 4.5000000000000000 },
-  { 0.0050689292106255480, 0.66666666666666663, 4.7500000000000000 },
-  { 0.0038444246344968226, 0.66666666666666663, 5.0000000000000000 },
+  { 2.3289060745544101, 0.66666666666666663, 0.25000000000000000, 0.0 },
+  { 1.2059304647203353, 0.66666666666666663, 0.50000000000000000, 0.0 },
+  { 0.74547232976647226, 0.66666666666666663, 0.75000000000000000, 0.0 },
+  { 0.49447506210420811, 0.66666666666666663, 1.0000000000000000, 0.0 },
+  { 0.34062994813514252, 0.66666666666666663, 1.2500000000000000, 0.0 },
+  { 0.24024045240315581, 0.66666666666666663, 1.5000000000000000, 0.0 },
+  { 0.17217716908452307, 0.66666666666666663, 1.7500000000000000, 0.0 },
+  { 0.12483892748812841, 0.66666666666666663, 2.0000000000000000, 0.0 },
+  { 0.091315296079621050, 0.66666666666666663, 2.2500000000000000, 0.0 },
+  { 0.067255322171623361, 0.66666666666666663, 2.5000000000000000, 0.0 },
+  { 0.049809546542402224, 0.66666666666666663, 2.7500000000000000, 0.0 },
+  { 0.037057074495188531, 0.66666666666666663, 3.0000000000000000, 0.0 },
+  { 0.027674365504886729, 0.66666666666666663, 3.2500000000000000, 0.0 },
+  { 0.020733915836010912, 0.66666666666666663, 3.5000000000000000, 0.0 },
+  { 0.015577015510251336, 0.66666666666666663, 3.7500000000000000, 0.0 },
+  { 0.011730801456525337, 0.66666666666666663, 4.0000000000000000, 0.0 },
+  { 0.0088528343204658851, 0.66666666666666663, 4.2500000000000000, 0.0 },
+  { 0.0066933190915775568, 0.66666666666666663, 4.5000000000000000, 0.0 },
+  { 0.0050689292106255480, 0.66666666666666663, 4.7500000000000000, 0.0 },
+  { 0.0038444246344968226, 0.66666666666666663, 5.0000000000000000, 0.0 },
 };
-const double toler004 = 2.5000000000000020e-13;
+const double toler010 = 2.5000000000000020e-13;
 
 // Test data for nu=1.0000000000000000.
-// max(|f - f_GSL|): 5.5511151231257827e-17
-// max(|f - f_GSL| / |f_GSL|): 2.7422040631145076e-16
+// max(|f - f_GSL|): 5.5511151231257827e-17 at index 5
+// max(|f - f_GSL| / |f_GSL|): 4.1133060946717609e-16
+// mean(f - f_GSL): 9.1072982488782376e-19
+// variance(f - f_GSL): 4.5951734844332747e-38
+// stddev(f - f_GSL): 2.1436355764059512e-19
 const testcase_cyl_bessel_k<double>
-data005[20] =
+data011[20] =
 {
-  { 3.7470259744407115, 1.0000000000000000, 0.25000000000000000 },
-  { 1.6564411200033007, 1.0000000000000000, 0.50000000000000000 },
-  { 0.94958046696214016, 1.0000000000000000, 0.75000000000000000 },
-  { 0.60190723019723458, 1.0000000000000000, 1.0000000000000000 },
-  { 0.40212407978419540, 1.0000000000000000, 1.2500000000000000 },
-  { 0.27738780045684375, 1.0000000000000000, 1.5000000000000000 },
-  { 0.19547745347439310, 1.0000000000000000, 1.7500000000000000 },
-  { 0.13986588181652262, 1.0000000000000000, 2.0000000000000000 },
-  { 0.10121630256832535, 1.0000000000000000, 2.2500000000000000 },
-  { 0.073890816347747038, 1.0000000000000000, 2.5000000000000000 },
-  { 0.054318522758919859, 1.0000000000000000, 2.7500000000000000 },
-  { 0.040156431128194198, 1.0000000000000000, 3.0000000000000000 },
-  { 0.029825529796040143, 1.0000000000000000, 3.2500000000000000 },
-  { 0.022239392925923845, 1.0000000000000000, 3.5000000000000000 },
-  { 0.016638191754688912, 1.0000000000000000, 3.7500000000000000 },
-  { 0.012483498887268435, 1.0000000000000000, 4.0000000000000000 },
-  { 0.0093896806560432589, 1.0000000000000000, 4.2500000000000000 },
-  { 0.0070780949089680901, 1.0000000000000000, 4.5000000000000000 },
-  { 0.0053459218178228390, 1.0000000000000000, 4.7500000000000000 },
-  { 0.0040446134454521655, 1.0000000000000000, 5.0000000000000000 },
+  { 3.7470259744407115, 1.0000000000000000, 0.25000000000000000, 0.0 },
+  { 1.6564411200033007, 1.0000000000000000, 0.50000000000000000, 0.0 },
+  { 0.94958046696214016, 1.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.60190723019723458, 1.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.40212407978419540, 1.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.27738780045684375, 1.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.19547745347439305, 1.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.13986588181652262, 1.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.10121630256832535, 1.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.073890816347747038, 1.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.054318522758919859, 1.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.040156431128194198, 1.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.029825529796040143, 1.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.022239392925923845, 1.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.016638191754688916, 1.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.012483498887268437, 1.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.0093896806560432589, 1.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.0070780949089680918, 1.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.0053459218178228390, 1.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.0040446134454521655, 1.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler005 = 2.5000000000000020e-13;
+const double toler011 = 2.5000000000000020e-13;
 
 // Test data for nu=2.0000000000000000.
-// max(|f - f_GSL|): 3.5527136788005009e-15
-// max(|f - f_GSL| / |f_GSL|): 1.9937716861613039e-16
+// max(|f - f_GSL|): 3.5527136788005009e-15 at index 0
+// max(|f - f_GSL| / |f_GSL|): 3.2289213139335320e-16
+// mean(f - f_GSL): -2.2187113257743364e-16
+// variance(f - f_GSL): 2.7486114598283265e-33
+// stddev(f - f_GSL): 5.2427201525814123e-17
 const testcase_cyl_bessel_k<double>
-data006[20] =
+data012[20] =
 {
-  { 31.517714546773998, 2.0000000000000000, 0.25000000000000000 },
-  { 7.5501835512408695, 2.0000000000000000, 0.50000000000000000 },
-  { 3.1427970006821715, 2.0000000000000000, 0.75000000000000000 },
-  { 1.6248388986351774, 2.0000000000000000, 1.0000000000000000 },
-  { 0.94100161673881855, 2.0000000000000000, 1.2500000000000000 },
-  { 0.58365596325665070, 2.0000000000000000, 1.5000000000000000 },
-  { 0.37878261635733856, 2.0000000000000000, 1.7500000000000000 },
-  { 0.25375975456605621, 2.0000000000000000, 2.0000000000000000 },
-  { 0.17401315870205850, 2.0000000000000000, 2.2500000000000000 },
-  { 0.12146020627856381, 2.0000000000000000, 2.5000000000000000 },
-  { 0.085959281497066137, 2.0000000000000000, 2.7500000000000000 },
-  { 0.061510458471742059, 2.0000000000000000, 3.0000000000000000 },
-  { 0.044412927437333515, 2.0000000000000000, 3.2500000000000000 },
-  { 0.032307121699467839, 2.0000000000000000, 3.5000000000000000 },
-  { 0.023647953146296127, 2.0000000000000000, 3.7500000000000000 },
-  { 0.017401425529487244, 2.0000000000000000, 4.0000000000000000 },
-  { 0.012863060974445674, 2.0000000000000000, 4.2500000000000000 },
-  { 0.0095456772027753475, 2.0000000000000000, 4.5000000000000000 },
-  { 0.0071081190074975690, 2.0000000000000000, 4.7500000000000000 },
-  { 0.0053089437122234608, 2.0000000000000000, 5.0000000000000000 },
+  { 31.517714546773998, 2.0000000000000000, 0.25000000000000000, 0.0 },
+  { 7.5501835512408695, 2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 3.1427970006821715, 2.0000000000000000, 0.75000000000000000, 0.0 },
+  { 1.6248388986351774, 2.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.94100161673881855, 2.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.58365596325665070, 2.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.37878261635733851, 2.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.25375975456605621, 2.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.17401315870205850, 2.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.12146020627856381, 2.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.085959281497066137, 2.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.061510458471742059, 2.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.044412927437333515, 2.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.032307121699467839, 2.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.023647953146296131, 2.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.017401425529487247, 2.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.012863060974445674, 2.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.0095456772027753493, 2.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.0071081190074975690, 2.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.0053089437122234608, 2.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler006 = 2.5000000000000020e-13;
+const double toler012 = 2.5000000000000020e-13;
 
 // Test data for nu=5.0000000000000000.
-// max(|f - f_GSL|): 5.8207660913467407e-11
-// max(|f - f_GSL| / |f_GSL|): 2.4867363835720159e-16
+// max(|f - f_GSL|): 5.8207660913467407e-11 at index 0
+// max(|f - f_GSL| / |f_GSL|): 5.4133817134973930e-16
+// mean(f - f_GSL): -3.0029749520377179e-12
+// variance(f - f_GSL): 4.9960666134422494e-25
+// stddev(f - f_GSL): 7.0682859403410163e-13
 const testcase_cyl_bessel_k<double>
-data007[20] =
+data013[20] =
 {
-  { 391683.98962334893, 5.0000000000000000, 0.25000000000000000 },
-  { 12097.979476096394, 5.0000000000000000, 0.50000000000000000 },
-  { 1562.5870339691098, 5.0000000000000000, 0.75000000000000000 },
-  { 360.96058960124066, 5.0000000000000000, 1.0000000000000000 },
-  { 114.29321426334016, 5.0000000000000000, 1.2500000000000000 },
-  { 44.067781159301056, 5.0000000000000000, 1.5000000000000000 },
-  { 19.426568687730292, 5.0000000000000000, 1.7500000000000000 },
-  { 9.4310491005964820, 5.0000000000000000, 2.0000000000000000 },
-  { 4.9221270549918685, 5.0000000000000000, 2.2500000000000000 },
-  { 2.7168842907865423, 5.0000000000000000, 2.5000000000000000 },
-  { 1.5677685890536335, 5.0000000000000000, 2.7500000000000000 },
-  { 0.93777360238680818, 5.0000000000000000, 3.0000000000000000 },
-  { 0.57775534736785106, 5.0000000000000000, 3.2500000000000000 },
-  { 0.36482440208451983, 5.0000000000000000, 3.5000000000000000 },
-  { 0.23520290620082257, 5.0000000000000000, 3.7500000000000000 },
-  { 0.15434254872599723, 5.0000000000000000, 4.0000000000000000 },
-  { 0.10283347176876455, 5.0000000000000000, 4.2500000000000000 },
-  { 0.069423643150881773, 5.0000000000000000, 4.5000000000000000 },
-  { 0.047410616917942211, 5.0000000000000000, 4.7500000000000000 },
-  { 0.032706273712031865, 5.0000000000000000, 5.0000000000000000 },
+  { 391683.98962334893, 5.0000000000000000, 0.25000000000000000, 0.0 },
+  { 12097.979476096394, 5.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1562.5870339691098, 5.0000000000000000, 0.75000000000000000, 0.0 },
+  { 360.96058960124071, 5.0000000000000000, 1.0000000000000000, 0.0 },
+  { 114.29321426334016, 5.0000000000000000, 1.2500000000000000, 0.0 },
+  { 44.067781159301056, 5.0000000000000000, 1.5000000000000000, 0.0 },
+  { 19.426568687730288, 5.0000000000000000, 1.7500000000000000, 0.0 },
+  { 9.4310491005964820, 5.0000000000000000, 2.0000000000000000, 0.0 },
+  { 4.9221270549918685, 5.0000000000000000, 2.2500000000000000, 0.0 },
+  { 2.7168842907865423, 5.0000000000000000, 2.5000000000000000, 0.0 },
+  { 1.5677685890536335, 5.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.93777360238680818, 5.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.57775534736785106, 5.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.36482440208451983, 5.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.23520290620082260, 5.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.15434254872599726, 5.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.10283347176876455, 5.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.069423643150881773, 5.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.047410616917942211, 5.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.032706273712031865, 5.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler007 = 2.5000000000000020e-13;
+const double toler013 = 2.5000000000000020e-13;
 
 // Test data for nu=10.000000000000000.
-// max(|f - f_GSL|): 6.1035156250000000e-05
+// max(|f - f_GSL|): 6.1035156250000000e-05 at index 1
 // max(|f - f_GSL| / |f_GSL|): 7.7998476565326393e-16
+// mean(f - f_GSL): -3.0495557438392496e-06
+// variance(f - f_GSL): 5.1522383752309128e-13
+// stddev(f - f_GSL): 7.1779094277031061e-07
 const testcase_cyl_bessel_k<double>
-data008[20] =
+data014[20] =
 {
-  { 194481817927839.88, 10.000000000000000, 0.25000000000000000 },
-  { 188937569319.90030, 10.000000000000000, 0.50000000000000000 },
-  { 3248187687.8018155, 10.000000000000000, 0.75000000000000000 },
-  { 180713289.90102941, 10.000000000000000, 1.0000000000000000 },
-  { 19104425.945252180, 10.000000000000000, 1.2500000000000000 },
-  { 3027483.5236822353, 10.000000000000000, 1.5000000000000000 },
-  { 633724.71555087867, 10.000000000000000, 1.7500000000000000 },
-  { 162482.40397955943, 10.000000000000000, 2.0000000000000000 },
-  { 48602.446087749791, 10.000000000000000, 2.2500000000000000 },
-  { 16406.916416341937, 10.000000000000000, 2.5000000000000000 },
-  { 6104.1720745909606, 10.000000000000000, 2.7500000000000000 },
-  { 2459.6204220569480, 10.000000000000000, 3.0000000000000000 },
-  { 1059.2358443703381, 10.000000000000000, 3.2500000000000000 },
-  { 482.53582096664758, 10.000000000000000, 3.5000000000000000 },
-  { 230.64249314993776, 10.000000000000000, 3.7500000000000000 },
-  { 114.91408364049620, 10.000000000000000, 4.0000000000000000 },
-  { 59.361613632706479, 10.000000000000000, 4.2500000000000000 },
-  { 31.652958759229868, 10.000000000000000, 4.5000000000000000 },
-  { 17.357723966417399, 10.000000000000000, 4.7500000000000000 },
-  { 9.7585628291778121, 10.000000000000000, 5.0000000000000000 },
+  { 194481817927839.88, 10.000000000000000, 0.25000000000000000, 0.0 },
+  { 188937569319.90030, 10.000000000000000, 0.50000000000000000, 0.0 },
+  { 3248187687.8018155, 10.000000000000000, 0.75000000000000000, 0.0 },
+  { 180713289.90102944, 10.000000000000000, 1.0000000000000000, 0.0 },
+  { 19104425.945252180, 10.000000000000000, 1.2500000000000000, 0.0 },
+  { 3027483.5236822353, 10.000000000000000, 1.5000000000000000, 0.0 },
+  { 633724.71555087867, 10.000000000000000, 1.7500000000000000, 0.0 },
+  { 162482.40397955943, 10.000000000000000, 2.0000000000000000, 0.0 },
+  { 48602.446087749791, 10.000000000000000, 2.2500000000000000, 0.0 },
+  { 16406.916416341937, 10.000000000000000, 2.5000000000000000, 0.0 },
+  { 6104.1720745909606, 10.000000000000000, 2.7500000000000000, 0.0 },
+  { 2459.6204220569480, 10.000000000000000, 3.0000000000000000, 0.0 },
+  { 1059.2358443703381, 10.000000000000000, 3.2500000000000000, 0.0 },
+  { 482.53582096664758, 10.000000000000000, 3.5000000000000000, 0.0 },
+  { 230.64249314993782, 10.000000000000000, 3.7500000000000000, 0.0 },
+  { 114.91408364049623, 10.000000000000000, 4.0000000000000000, 0.0 },
+  { 59.361613632706479, 10.000000000000000, 4.2500000000000000, 0.0 },
+  { 31.652958759229872, 10.000000000000000, 4.5000000000000000, 0.0 },
+  { 17.357723966417399, 10.000000000000000, 4.7500000000000000, 0.0 },
+  { 9.7585628291778121, 10.000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler008 = 2.5000000000000020e-13;
+const double toler014 = 2.5000000000000020e-13;
 
 // Test data for nu=20.000000000000000.
-// max(|f - f_GSL|): 2.7670116110564327e+19
+// max(|f - f_GSL|): 2.7670116110564327e+19 at index 0
 // max(|f - f_GSL| / |f_GSL|): 1.2737005853777639e-15
+// mean(f - f_GSL): -1.3835066851362150e+18
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_k<double>
-data009[20] =
+data015[20] =
 {
-  { 7.0065983661641184e+34, 20.000000000000000, 0.25000000000000000 },
-  { 6.6655498744171593e+28, 20.000000000000000, 0.50000000000000000 },
-  { 1.9962989615380379e+25, 20.000000000000000, 0.75000000000000000 },
-  { 6.2943693604245335e+22, 20.000000000000000, 1.0000000000000000 },
-  { 7.2034511920074182e+20, 20.000000000000000, 1.2500000000000000 },
-  { 1.8620549984645546e+19, 20.000000000000000, 1.5000000000000000 },
-  { 8.4415605303952486e+17, 20.000000000000000, 1.7500000000000000 },
-  { 57708568527002520., 20.000000000000000, 2.0000000000000000 },
-  { 5396824209986879.0, 20.000000000000000, 2.2500000000000000 },
-  { 645996884063683.62, 20.000000000000000, 2.5000000000000000 },
-  { 94387401970996.328, 20.000000000000000, 2.7500000000000000 },
-  { 16254643952204.371, 20.000000000000000, 3.0000000000000000 },
-  { 3212694836166.4053, 20.000000000000000, 3.2500000000000000 },
-  { 713857897923.74072, 20.000000000000000, 3.5000000000000000 },
-  { 175423421958.35925, 20.000000000000000, 3.7500000000000000 },
-  { 47050078926.298080, 20.000000000000000, 4.0000000000000000 },
-  { 13625066095.067503, 20.000000000000000, 4.2500000000000000 },
-  { 4222179870.6810656, 20.000000000000000, 4.5000000000000000 },
-  { 1389634112.7516634, 20.000000000000000, 4.7500000000000000 },
-  { 482700052.06214869, 20.000000000000000, 5.0000000000000000 },
+  { 7.0065983661641184e+34, 20.000000000000000, 0.25000000000000000, 0.0 },
+  { 6.6655498744171593e+28, 20.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.9962989615380379e+25, 20.000000000000000, 0.75000000000000000, 0.0 },
+  { 6.2943693604245335e+22, 20.000000000000000, 1.0000000000000000, 0.0 },
+  { 7.2034511920074182e+20, 20.000000000000000, 1.2500000000000000, 0.0 },
+  { 1.8620549984645546e+19, 20.000000000000000, 1.5000000000000000, 0.0 },
+  { 8.4415605303952486e+17, 20.000000000000000, 1.7500000000000000, 0.0 },
+  { 57708568527002520., 20.000000000000000, 2.0000000000000000, 0.0 },
+  { 5396824209986879.0, 20.000000000000000, 2.2500000000000000, 0.0 },
+  { 645996884063683.62, 20.000000000000000, 2.5000000000000000, 0.0 },
+  { 94387401970996.328, 20.000000000000000, 2.7500000000000000, 0.0 },
+  { 16254643952204.371, 20.000000000000000, 3.0000000000000000, 0.0 },
+  { 3212694836166.4053, 20.000000000000000, 3.2500000000000000, 0.0 },
+  { 713857897923.74072, 20.000000000000000, 3.5000000000000000, 0.0 },
+  { 175423421958.35925, 20.000000000000000, 3.7500000000000000, 0.0 },
+  { 47050078926.298088, 20.000000000000000, 4.0000000000000000, 0.0 },
+  { 13625066095.067503, 20.000000000000000, 4.2500000000000000, 0.0 },
+  { 4222179870.6810660, 20.000000000000000, 4.5000000000000000, 0.0 },
+  { 1389634112.7516634, 20.000000000000000, 4.7500000000000000, 0.0 },
+  { 482700052.06214869, 20.000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler009 = 2.5000000000000020e-13;
+const double toler015 = 2.5000000000000020e-13;
 
 // Test data for nu=50.000000000000000.
-// max(|f - f_GSL|): 3.9111090745622133e+92
+// max(|f - f_GSL|): 3.9111090745622133e+92 at index 0
 // max(|f - f_GSL| / |f_GSL|): 3.7220730535457535e-15
+// mean(f - f_GSL): -1.9555545372811066e+91
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_k<double>
-data010[20] =
+data016[20] =
 {
-  { 4.3394604622138714e+107, 50.000000000000000, 0.25000000000000000 },
-  { 3.8505298918269003e+92, 50.000000000000000, 0.50000000000000000 },
-  { 6.0292756894842793e+83, 50.000000000000000, 0.75000000000000000 },
-  { 3.4068968541616991e+77, 50.000000000000000, 1.0000000000000000 },
-  { 4.8485527365039051e+72, 50.000000000000000, 1.2500000000000000 },
-  { 5.3091717574907920e+68, 50.000000000000000, 1.5000000000000000 },
-  { 2.3762245257445824e+65, 50.000000000000000, 1.7500000000000000 },
-  { 2.9799817396049268e+62, 50.000000000000000, 2.0000000000000000 },
-  { 8.2079431233488581e+59, 50.000000000000000, 2.2500000000000000 },
-  { 4.2046528212987503e+57, 50.000000000000000, 2.5000000000000000 },
-  { 3.5578676911884825e+55, 50.000000000000000, 2.7500000000000000 },
-  { 4.5559542293221535e+53, 50.000000000000000, 3.0000000000000000 },
-  { 8.2606735967628997e+51, 50.000000000000000, 3.2500000000000000 },
-  { 2.0139406747903812e+50, 50.000000000000000, 3.5000000000000000 },
-  { 6.3368727837484600e+48, 50.000000000000000, 3.7500000000000000 },
-  { 2.4897317389325753e+47, 50.000000000000000, 4.0000000000000000 },
-  { 1.1888958173039699e+46, 50.000000000000000, 4.2500000000000000 },
-  { 6.7472593648148542e+44, 50.000000000000000, 4.5000000000000000 },
-  { 4.4664266585930700e+43, 50.000000000000000, 4.7500000000000000 },
-  { 3.3943222434301628e+42, 50.000000000000000, 5.0000000000000000 },
+  { 4.3394604622138714e+107, 50.000000000000000, 0.25000000000000000, 0.0 },
+  { 3.8505298918269003e+92, 50.000000000000000, 0.50000000000000000, 0.0 },
+  { 6.0292756894842793e+83, 50.000000000000000, 0.75000000000000000, 0.0 },
+  { 3.4068968541617001e+77, 50.000000000000000, 1.0000000000000000, 0.0 },
+  { 4.8485527365039051e+72, 50.000000000000000, 1.2500000000000000, 0.0 },
+  { 5.3091717574907920e+68, 50.000000000000000, 1.5000000000000000, 0.0 },
+  { 2.3762245257445824e+65, 50.000000000000000, 1.7500000000000000, 0.0 },
+  { 2.9799817396049268e+62, 50.000000000000000, 2.0000000000000000, 0.0 },
+  { 8.2079431233488581e+59, 50.000000000000000, 2.2500000000000000, 0.0 },
+  { 4.2046528212987503e+57, 50.000000000000000, 2.5000000000000000, 0.0 },
+  { 3.5578676911884825e+55, 50.000000000000000, 2.7500000000000000, 0.0 },
+  { 4.5559542293221535e+53, 50.000000000000000, 3.0000000000000000, 0.0 },
+  { 8.2606735967628997e+51, 50.000000000000000, 3.2500000000000000, 0.0 },
+  { 2.0139406747903812e+50, 50.000000000000000, 3.5000000000000000, 0.0 },
+  { 6.3368727837484613e+48, 50.000000000000000, 3.7500000000000000, 0.0 },
+  { 2.4897317389325757e+47, 50.000000000000000, 4.0000000000000000, 0.0 },
+  { 1.1888958173039699e+46, 50.000000000000000, 4.2500000000000000, 0.0 },
+  { 6.7472593648148550e+44, 50.000000000000000, 4.5000000000000000, 0.0 },
+  { 4.4664266585930700e+43, 50.000000000000000, 4.7500000000000000, 0.0 },
+  { 3.3943222434301628e+42, 50.000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler010 = 2.5000000000000020e-13;
+const double toler016 = 2.5000000000000020e-13;
 
 // Test data for nu=100.00000000000000.
-// max(|f - f_GSL|): 8.5970689361151757e+232
+// max(|f - f_GSL|): 8.5970689361151757e+232 at index 0
 // max(|f - f_GSL| / |f_GSL|): 9.0457919481999128e-14
+// mean(f - f_GSL): -4.2985344680575876e+231
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_k<double>
-data011[20] =
+data017[20] =
 {
-  { 9.5039428115809898e+245, 100.00000000000000, 0.25000000000000000 },
-  { 7.4937399313533112e+215, 100.00000000000000, 0.50000000000000000 },
-  { 1.8417471020730701e+198, 100.00000000000000, 0.75000000000000000 },
-  { 5.9003331836386410e+185, 100.00000000000000, 1.0000000000000000 },
-  { 1.2002130935576950e+176, 100.00000000000000, 1.2500000000000000 },
-  { 1.4467044226487075e+168, 100.00000000000000, 1.5000000000000000 },
-  { 2.9161498411497642e+161, 100.00000000000000, 1.7500000000000000 },
-  { 4.6194159776013925e+155, 100.00000000000000, 2.0000000000000000 },
-  { 3.5332121583541727e+150, 100.00000000000000, 2.2500000000000000 },
-  { 9.3566097231039940e+145, 100.00000000000000, 2.5000000000000000 },
-  { 6.7672283615134532e+141, 100.00000000000000, 2.7500000000000000 },
-  { 1.1219630864949494e+138, 100.00000000000000, 3.0000000000000000 },
-  { 3.7329723699990903e+134, 100.00000000000000, 3.2500000000000000 },
-  { 2.2476893883855163e+131, 100.00000000000000, 3.5000000000000000 },
-  { 2.2564559319883196e+128, 100.00000000000000, 3.7500000000000000 },
-  { 3.5353340499626455e+125, 100.00000000000000, 4.0000000000000000 },
-  { 8.1898439213010234e+122, 100.00000000000000, 4.2500000000000000 },
-  { 2.6823744110726800e+120, 100.00000000000000, 4.5000000000000000 },
-  { 1.1963963615212274e+118, 100.00000000000000, 4.7500000000000000 },
-  { 7.0398601930616815e+115, 100.00000000000000, 5.0000000000000000 },
+  { 9.5039428115809898e+245, 100.00000000000000, 0.25000000000000000, 0.0 },
+  { 7.4937399313533112e+215, 100.00000000000000, 0.50000000000000000, 0.0 },
+  { 1.8417471020730699e+198, 100.00000000000000, 0.75000000000000000, 0.0 },
+  { 5.9003331836386410e+185, 100.00000000000000, 1.0000000000000000, 0.0 },
+  { 1.2002130935576950e+176, 100.00000000000000, 1.2500000000000000, 0.0 },
+  { 1.4467044226487075e+168, 100.00000000000000, 1.5000000000000000, 0.0 },
+  { 2.9161498411497642e+161, 100.00000000000000, 1.7500000000000000, 0.0 },
+  { 4.6194159776013925e+155, 100.00000000000000, 2.0000000000000000, 0.0 },
+  { 3.5332121583541727e+150, 100.00000000000000, 2.2500000000000000, 0.0 },
+  { 9.3566097231039940e+145, 100.00000000000000, 2.5000000000000000, 0.0 },
+  { 6.7672283615134532e+141, 100.00000000000000, 2.7500000000000000, 0.0 },
+  { 1.1219630864949494e+138, 100.00000000000000, 3.0000000000000000, 0.0 },
+  { 3.7329723699990903e+134, 100.00000000000000, 3.2500000000000000, 0.0 },
+  { 2.2476893883855163e+131, 100.00000000000000, 3.5000000000000000, 0.0 },
+  { 2.2564559319883200e+128, 100.00000000000000, 3.7500000000000000, 0.0 },
+  { 3.5353340499626463e+125, 100.00000000000000, 4.0000000000000000, 0.0 },
+  { 8.1898439213010234e+122, 100.00000000000000, 4.2500000000000000, 0.0 },
+  { 2.6823744110726800e+120, 100.00000000000000, 4.5000000000000000, 0.0 },
+  { 1.1963963615212274e+118, 100.00000000000000, 4.7500000000000000, 0.0 },
+  { 7.0398601930616815e+115, 100.00000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler011 = 5.0000000000000029e-12;
+const double toler017 = 5.0000000000000029e-12;
 //  cyl_bessel_k
 
 // Test data for nu=0.0000000000000000.
-// max(|f - f_GSL|): 4.3368086899420177e-19
-// max(|f - f_GSL| / |f_GSL|): 1.8009631353873430e-16
+// max(|f - f_GSL|): 4.3368086899420177e-19 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.3318588132773140e-16
+// mean(f - f_GSL): 2.1684048659978596e-20
+// variance(f - f_GSL): 2.6049748824837649e-41
+// stddev(f - f_GSL): 5.1038954559079328e-21
 const testcase_cyl_bessel_k<double>
-data012[20] =
+data018[20] =
 {
-  { 0.0036910983340425947, 0.0000000000000000, 5.0000000000000000 },
-  { 1.7780062316167650e-05, 0.0000000000000000, 10.000000000000000 },
-  { 9.8195364823964333e-08, 0.0000000000000000, 15.000000000000000 },
-  { 5.7412378153365238e-10, 0.0000000000000000, 20.000000000000000 },
-  { 3.4641615622131151e-12, 0.0000000000000000, 25.000000000000000 },
-  { 2.1324774964630566e-14, 0.0000000000000000, 30.000000000000000 },
-  { 1.3310351491429464e-16, 0.0000000000000000, 35.000000000000000 },
-  { 8.3928611000995700e-19, 0.0000000000000000, 40.000000000000000 },
-  { 5.3334561226187247e-21, 0.0000000000000000, 45.000000000000000 },
-  { 3.4101677497894956e-23, 0.0000000000000000, 50.000000000000000 },
-  { 2.1913102183534147e-25, 0.0000000000000000, 55.000000000000000 },
-  { 1.4138978405591074e-27, 0.0000000000000000, 60.000000000000000 },
-  { 9.1544673210030045e-30, 0.0000000000000000, 65.000000000000000 },
-  { 5.9446613372925013e-32, 0.0000000000000000, 70.000000000000000 },
-  { 3.8701170455869113e-34, 0.0000000000000000, 75.000000000000000 },
-  { 2.5251198425054723e-36, 0.0000000000000000, 80.000000000000000 },
-  { 1.6507623579783908e-38, 0.0000000000000000, 85.000000000000000 },
-  { 1.0810242556984256e-40, 0.0000000000000000, 90.000000000000000 },
-  { 7.0901249699001278e-43, 0.0000000000000000, 95.000000000000000 },
-  { 4.6566282291759032e-45, 0.0000000000000000, 100.00000000000000 },
+  { 0.0036910983340425947, 0.0000000000000000, 5.0000000000000000, 0.0 },
+  { 1.7780062316167647e-05, 0.0000000000000000, 10.000000000000000, 0.0 },
+  { 9.8195364823964333e-08, 0.0000000000000000, 15.000000000000000, 0.0 },
+  { 5.7412378153365238e-10, 0.0000000000000000, 20.000000000000000, 0.0 },
+  { 3.4641615622131151e-12, 0.0000000000000000, 25.000000000000000, 0.0 },
+  { 2.1324774964630566e-14, 0.0000000000000000, 30.000000000000000, 0.0 },
+  { 1.3310351491429464e-16, 0.0000000000000000, 35.000000000000000, 0.0 },
+  { 8.3928611000995700e-19, 0.0000000000000000, 40.000000000000000, 0.0 },
+  { 5.3334561226187247e-21, 0.0000000000000000, 45.000000000000000, 0.0 },
+  { 3.4101677497894956e-23, 0.0000000000000000, 50.000000000000000, 0.0 },
+  { 2.1913102183534147e-25, 0.0000000000000000, 55.000000000000000, 0.0 },
+  { 1.4138978405591074e-27, 0.0000000000000000, 60.000000000000000, 0.0 },
+  { 9.1544673210030045e-30, 0.0000000000000000, 65.000000000000000, 0.0 },
+  { 5.9446613372925013e-32, 0.0000000000000000, 70.000000000000000, 0.0 },
+  { 3.8701170455869113e-34, 0.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.5251198425054720e-36, 0.0000000000000000, 80.000000000000000, 0.0 },
+  { 1.6507623579783908e-38, 0.0000000000000000, 85.000000000000000, 0.0 },
+  { 1.0810242556984256e-40, 0.0000000000000000, 90.000000000000000, 0.0 },
+  { 7.0901249699001278e-43, 0.0000000000000000, 95.000000000000000, 0.0 },
+  { 4.6566282291759025e-45, 0.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler012 = 2.5000000000000020e-13;
+const double toler018 = 2.5000000000000020e-13;
 
 // Test data for nu=0.33333333333333331.
-// max(|f - f_GSL|): 1.0339757656912846e-25
-// max(|f - f_GSL| / |f_GSL|): 1.7960859646361972e-16
+// max(|f - f_GSL|): 1.0339757656912846e-25 at index 3
+// max(|f - f_GSL| / |f_GSL|): 2.3267819230578392e-16
+// mean(f - f_GSL): 5.2104262741326337e-27
+// variance(f - f_GSL): 1.5040743467131125e-54
+// stddev(f - f_GSL): 1.2264070884959499e-27
 const testcase_cyl_bessel_k<double>
-data013[20] =
+data019[20] =
 {
-  { 0.0037288750960535887, 0.33333333333333331, 5.0000000000000000 },
-  { 1.7874608271055339e-05, 0.33333333333333331, 10.000000000000000 },
-  { 9.8548341568798317e-08, 0.33333333333333331, 15.000000000000000 },
-  { 5.7568278247790865e-10, 0.33333333333333331, 20.000000000000000 },
-  { 3.4717201424907059e-12, 0.33333333333333331, 25.000000000000000 },
-  { 2.1363664736611189e-14, 0.33333333333333331, 30.000000000000000 },
-  { 1.3331202314165813e-16, 0.33333333333333331, 35.000000000000000 },
-  { 8.4043837769480934e-19, 0.33333333333333331, 40.000000000000000 },
-  { 5.3399731261024948e-21, 0.33333333333333331, 45.000000000000000 },
-  { 3.4139217813583632e-23, 0.33333333333333331, 50.000000000000000 },
-  { 2.1935050179185627e-25, 0.33333333333333331, 55.000000000000000 },
-  { 1.4151968805623662e-27, 0.33333333333333331, 60.000000000000000 },
-  { 9.1622357217019043e-30, 0.33333333333333331, 65.000000000000000 },
-  { 5.9493479703461315e-32, 0.33333333333333331, 70.000000000000000 },
-  { 3.8729660011055947e-34, 0.33333333333333331, 75.000000000000000 },
-  { 2.5268631828013877e-36, 0.33333333333333331, 80.000000000000000 },
-  { 1.6518353676138867e-38, 0.33333333333333331, 85.000000000000000 },
-  { 1.0816880942511494e-40, 0.33333333333333331, 90.000000000000000 },
-  { 7.0942508599231512e-43, 0.33333333333333331, 95.000000000000000 },
-  { 4.6592031570213454e-45, 0.33333333333333331, 100.00000000000000 },
+  { 0.0037288750960535887, 0.33333333333333331, 5.0000000000000000, 0.0 },
+  { 1.7874608271055336e-05, 0.33333333333333331, 10.000000000000000, 0.0 },
+  { 9.8548341568798317e-08, 0.33333333333333331, 15.000000000000000, 0.0 },
+  { 5.7568278247790865e-10, 0.33333333333333331, 20.000000000000000, 0.0 },
+  { 3.4717201424907059e-12, 0.33333333333333331, 25.000000000000000, 0.0 },
+  { 2.1363664736611189e-14, 0.33333333333333331, 30.000000000000000, 0.0 },
+  { 1.3331202314165813e-16, 0.33333333333333331, 35.000000000000000, 0.0 },
+  { 8.4043837769480934e-19, 0.33333333333333331, 40.000000000000000, 0.0 },
+  { 5.3399731261024948e-21, 0.33333333333333331, 45.000000000000000, 0.0 },
+  { 3.4139217813583632e-23, 0.33333333333333331, 50.000000000000000, 0.0 },
+  { 2.1935050179185627e-25, 0.33333333333333331, 55.000000000000000, 0.0 },
+  { 1.4151968805623662e-27, 0.33333333333333331, 60.000000000000000, 0.0 },
+  { 9.1622357217019043e-30, 0.33333333333333331, 65.000000000000000, 0.0 },
+  { 5.9493479703461315e-32, 0.33333333333333331, 70.000000000000000, 0.0 },
+  { 3.8729660011055947e-34, 0.33333333333333331, 75.000000000000000, 0.0 },
+  { 2.5268631828013874e-36, 0.33333333333333331, 80.000000000000000, 0.0 },
+  { 1.6518353676138867e-38, 0.33333333333333331, 85.000000000000000, 0.0 },
+  { 1.0816880942511494e-40, 0.33333333333333331, 90.000000000000000, 0.0 },
+  { 7.0942508599231512e-43, 0.33333333333333331, 95.000000000000000, 0.0 },
+  { 4.6592031570213448e-45, 0.33333333333333331, 100.00000000000000, 0.0 },
 };
-const double toler013 = 2.5000000000000020e-13;
+const double toler019 = 2.5000000000000020e-13;
 
 // Test data for nu=0.50000000000000000.
-// max(|f - f_GSL|): 1.5046327690525280e-36
-// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 8.0779356694631609e-28 at index 4
+// max(|f - f_GSL| / |f_GSL|): 2.3204515428965958e-16
+// mean(f - f_GSL): 4.0547450415218674e-29
+// variance(f - f_GSL): 9.1085636297762724e-59
+// stddev(f - f_GSL): 9.5438795202874765e-30
 const testcase_cyl_bessel_k<double>
-data014[20] =
+data020[20] =
 {
-  { 0.0037766133746428825, 0.50000000000000000, 5.0000000000000000 },
-  { 1.7993478093705181e-05, 0.50000000000000000, 10.000000000000000 },
-  { 9.8991312032877236e-08, 0.50000000000000000, 15.000000000000000 },
-  { 5.7763739747074450e-10, 0.50000000000000000, 20.000000000000000 },
-  { 3.4811912768406949e-12, 0.50000000000000000, 25.000000000000000 },
-  { 2.1412375659560111e-14, 0.50000000000000000, 30.000000000000000 },
-  { 1.3357311366035824e-16, 0.50000000000000000, 35.000000000000000 },
-  { 8.4188091949489049e-19, 0.50000000000000000, 40.000000000000000 },
-  { 5.3481305002517408e-21, 0.50000000000000000, 45.000000000000000 },
-  { 3.4186200954570754e-23, 0.50000000000000000, 50.000000000000000 },
-  { 2.1962515908772453e-25, 0.50000000000000000, 55.000000000000000 },
-  { 1.4168223500353693e-27, 0.50000000000000000, 60.000000000000000 },
-  { 9.1719554473256892e-30, 0.50000000000000000, 65.000000000000000 },
-  { 5.9552114337788932e-32, 0.50000000000000000, 70.000000000000000 },
-  { 3.8765301321409432e-34, 0.50000000000000000, 75.000000000000000 },
-  { 2.5290440439442910e-36, 0.50000000000000000, 80.000000000000000 },
-  { 1.6531776067605980e-38, 0.50000000000000000, 85.000000000000000 },
-  { 1.0825184636529955e-40, 0.50000000000000000, 90.000000000000000 },
-  { 7.0994115873258822e-43, 0.50000000000000000, 95.000000000000000 },
-  { 4.6624238126346715e-45, 0.50000000000000000, 100.00000000000000 },
+  { 0.0037766133746428825, 0.50000000000000000, 5.0000000000000000, 0.0 },
+  { 1.7993478093705178e-05, 0.50000000000000000, 10.000000000000000, 0.0 },
+  { 9.8991312032877236e-08, 0.50000000000000000, 15.000000000000000, 0.0 },
+  { 5.7763739747074450e-10, 0.50000000000000000, 20.000000000000000, 0.0 },
+  { 3.4811912768406949e-12, 0.50000000000000000, 25.000000000000000, 0.0 },
+  { 2.1412375659560111e-14, 0.50000000000000000, 30.000000000000000, 0.0 },
+  { 1.3357311366035824e-16, 0.50000000000000000, 35.000000000000000, 0.0 },
+  { 8.4188091949489049e-19, 0.50000000000000000, 40.000000000000000, 0.0 },
+  { 5.3481305002517408e-21, 0.50000000000000000, 45.000000000000000, 0.0 },
+  { 3.4186200954570754e-23, 0.50000000000000000, 50.000000000000000, 0.0 },
+  { 2.1962515908772453e-25, 0.50000000000000000, 55.000000000000000, 0.0 },
+  { 1.4168223500353693e-27, 0.50000000000000000, 60.000000000000000, 0.0 },
+  { 9.1719554473256892e-30, 0.50000000000000000, 65.000000000000000, 0.0 },
+  { 5.9552114337788932e-32, 0.50000000000000000, 70.000000000000000, 0.0 },
+  { 3.8765301321409432e-34, 0.50000000000000000, 75.000000000000000, 0.0 },
+  { 2.5290440439442907e-36, 0.50000000000000000, 80.000000000000000, 0.0 },
+  { 1.6531776067605980e-38, 0.50000000000000000, 85.000000000000000, 0.0 },
+  { 1.0825184636529955e-40, 0.50000000000000000, 90.000000000000000, 0.0 },
+  { 7.0994115873258822e-43, 0.50000000000000000, 95.000000000000000, 0.0 },
+  { 4.6624238126346709e-45, 0.50000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler014 = 2.5000000000000020e-13;
+const double toler020 = 2.5000000000000020e-13;
 
 // Test data for nu=0.66666666666666663.
-// max(|f - f_GSL|): 4.3368086899420177e-19
+// max(|f - f_GSL|): 4.3368086899420177e-19 at index 0
 // max(|f - f_GSL| / |f_GSL|): 3.5630695000470094e-16
+// mean(f - f_GSL): -2.1684694793857957e-20
+// variance(f - f_GSL): 2.6051301291012209e-41
+// stddev(f - f_GSL): 5.1040475400423349e-21
 const testcase_cyl_bessel_k<double>
-data015[20] =
+data021[20] =
 {
-  { 0.0038444246344968226, 0.66666666666666663, 5.0000000000000000 },
-  { 1.8161187569530204e-05, 0.66666666666666663, 10.000000000000000 },
-  { 9.9614751542305571e-08, 0.66666666666666663, 15.000000000000000 },
-  { 5.8038484271925811e-10, 0.66666666666666663, 20.000000000000000 },
-  { 3.4944937498488603e-12, 0.66666666666666663, 25.000000000000000 },
-  { 2.1480755645577720e-14, 0.66666666666666663, 30.000000000000000 },
-  { 1.3393949190152161e-16, 0.66666666666666663, 35.000000000000000 },
-  { 8.4390460553642992e-19, 0.66666666666666663, 40.000000000000000 },
-  { 5.3595716143622089e-21, 0.66666666666666663, 45.000000000000000 },
-  { 3.4252085301433749e-23, 0.66666666666666663, 50.000000000000000 },
-  { 2.2001025377982308e-25, 0.66666666666666663, 55.000000000000000 },
-  { 1.4191011274172078e-27, 0.66666666666666663, 60.000000000000000 },
-  { 9.1855803020269763e-30, 0.66666666666666663, 65.000000000000000 },
-  { 5.9634299472578764e-32, 0.66666666666666663, 70.000000000000000 },
-  { 3.8815254026478500e-34, 0.66666666666666663, 75.000000000000000 },
-  { 2.5321003991943851e-36, 0.66666666666666663, 80.000000000000000 },
-  { 1.6550585670593067e-38, 0.66666666666666663, 85.000000000000000 },
-  { 1.0836820479428605e-40, 0.66666666666666663, 90.000000000000000 },
-  { 7.1066428916285356e-43, 0.66666666666666663, 95.000000000000000 },
-  { 4.6669364587280465e-45, 0.66666666666666663, 100.00000000000000 },
+  { 0.0038444246344968226, 0.66666666666666663, 5.0000000000000000, 0.0 },
+  { 1.8161187569530204e-05, 0.66666666666666663, 10.000000000000000, 0.0 },
+  { 9.9614751542305571e-08, 0.66666666666666663, 15.000000000000000, 0.0 },
+  { 5.8038484271925811e-10, 0.66666666666666663, 20.000000000000000, 0.0 },
+  { 3.4944937498488603e-12, 0.66666666666666663, 25.000000000000000, 0.0 },
+  { 2.1480755645577720e-14, 0.66666666666666663, 30.000000000000000, 0.0 },
+  { 1.3393949190152161e-16, 0.66666666666666663, 35.000000000000000, 0.0 },
+  { 8.4390460553642992e-19, 0.66666666666666663, 40.000000000000000, 0.0 },
+  { 5.3595716143622089e-21, 0.66666666666666663, 45.000000000000000, 0.0 },
+  { 3.4252085301433749e-23, 0.66666666666666663, 50.000000000000000, 0.0 },
+  { 2.2001025377982308e-25, 0.66666666666666663, 55.000000000000000, 0.0 },
+  { 1.4191011274172078e-27, 0.66666666666666663, 60.000000000000000, 0.0 },
+  { 9.1855803020269763e-30, 0.66666666666666663, 65.000000000000000, 0.0 },
+  { 5.9634299472578764e-32, 0.66666666666666663, 70.000000000000000, 0.0 },
+  { 3.8815254026478500e-34, 0.66666666666666663, 75.000000000000000, 0.0 },
+  { 2.5321003991943847e-36, 0.66666666666666663, 80.000000000000000, 0.0 },
+  { 1.6550585670593067e-38, 0.66666666666666663, 85.000000000000000, 0.0 },
+  { 1.0836820479428605e-40, 0.66666666666666663, 90.000000000000000, 0.0 },
+  { 7.1066428916285356e-43, 0.66666666666666663, 95.000000000000000, 0.0 },
+  { 4.6669364587280459e-45, 0.66666666666666663, 100.00000000000000, 0.0 },
 };
-const double toler015 = 2.5000000000000020e-13;
+const double toler021 = 2.5000000000000020e-13;
 
 // Test data for nu=1.0000000000000000.
-// max(|f - f_GSL|): 1.0339757656912846e-25
-// max(|f - f_GSL| / |f_GSL|): 2.9112857291682056e-16
+// max(|f - f_GSL|): 1.0339757656912846e-25 at index 3
+// max(|f - f_GSL| / |f_GSL|): 1.7575481510496439e-16
+// mean(f - f_GSL): 5.1899158905965940e-27
+// variance(f - f_GSL): 1.4922563408014978e-54
+// stddev(f - f_GSL): 1.2215794451452995e-27
 const testcase_cyl_bessel_k<double>
-data016[20] =
+data022[20] =
 {
-  { 0.0040446134454521655, 1.0000000000000000, 5.0000000000000000 },
-  { 1.8648773453825582e-05, 1.0000000000000000, 10.000000000000000 },
-  { 1.0141729369762091e-07, 1.0000000000000000, 15.000000000000000 },
-  { 5.8830579695570384e-10, 1.0000000000000000, 20.000000000000000 },
-  { 3.5327780731999345e-12, 1.0000000000000000, 25.000000000000000 },
-  { 2.1677320018915498e-14, 1.0000000000000000, 30.000000000000000 },
-  { 1.3499178340011053e-16, 1.0000000000000000, 35.000000000000000 },
-  { 8.4971319548610435e-19, 1.0000000000000000, 40.000000000000000 },
-  { 5.3923945937225035e-21, 1.0000000000000000, 45.000000000000000 },
-  { 3.4441022267175555e-23, 1.0000000000000000, 50.000000000000000 },
-  { 2.2111422716117463e-25, 1.0000000000000000, 55.000000000000000 },
-  { 1.4256320265171041e-27, 1.0000000000000000, 60.000000000000000 },
-  { 9.2246195278906156e-30, 1.0000000000000000, 65.000000000000000 },
-  { 5.9869736739138550e-32, 1.0000000000000000, 70.000000000000000 },
-  { 3.8958329467421912e-34, 1.0000000000000000, 75.000000000000000 },
-  { 2.5408531275211708e-36, 1.0000000000000000, 80.000000000000000 },
-  { 1.6604444948567571e-38, 1.0000000000000000, 85.000000000000000 },
-  { 1.0870134457498335e-40, 1.0000000000000000, 90.000000000000000 },
-  { 7.1273442329907240e-43, 1.0000000000000000, 95.000000000000000 },
-  { 4.6798537356369101e-45, 1.0000000000000000, 100.00000000000000 },
+  { 0.0040446134454521655, 1.0000000000000000, 5.0000000000000000, 0.0 },
+  { 1.8648773453825579e-05, 1.0000000000000000, 10.000000000000000, 0.0 },
+  { 1.0141729369762091e-07, 1.0000000000000000, 15.000000000000000, 0.0 },
+  { 5.8830579695570384e-10, 1.0000000000000000, 20.000000000000000, 0.0 },
+  { 3.5327780731999345e-12, 1.0000000000000000, 25.000000000000000, 0.0 },
+  { 2.1677320018915498e-14, 1.0000000000000000, 30.000000000000000, 0.0 },
+  { 1.3499178340011053e-16, 1.0000000000000000, 35.000000000000000, 0.0 },
+  { 8.4971319548610435e-19, 1.0000000000000000, 40.000000000000000, 0.0 },
+  { 5.3923945937225035e-21, 1.0000000000000000, 45.000000000000000, 0.0 },
+  { 3.4441022267175555e-23, 1.0000000000000000, 50.000000000000000, 0.0 },
+  { 2.2111422716117463e-25, 1.0000000000000000, 55.000000000000000, 0.0 },
+  { 1.4256320265171041e-27, 1.0000000000000000, 60.000000000000000, 0.0 },
+  { 9.2246195278906156e-30, 1.0000000000000000, 65.000000000000000, 0.0 },
+  { 5.9869736739138550e-32, 1.0000000000000000, 70.000000000000000, 0.0 },
+  { 3.8958329467421912e-34, 1.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.5408531275211705e-36, 1.0000000000000000, 80.000000000000000, 0.0 },
+  { 1.6604444948567571e-38, 1.0000000000000000, 85.000000000000000, 0.0 },
+  { 1.0870134457498335e-40, 1.0000000000000000, 90.000000000000000, 0.0 },
+  { 7.1273442329907240e-43, 1.0000000000000000, 95.000000000000000, 0.0 },
+  { 4.6798537356369088e-45, 1.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler016 = 2.5000000000000020e-13;
+const double toler022 = 2.5000000000000020e-13;
 
 // Test data for nu=2.0000000000000000.
-// max(|f - f_GSL|): 8.6736173798840355e-19
-// max(|f - f_GSL| / |f_GSL|): 1.6337745981208381e-16
+// max(|f - f_GSL|): 8.6736173798840355e-19 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.1559652446630200e-16
+// mean(f - f_GSL): 4.3368092109689917e-20
+// variance(f - f_GSL): 1.0419897026230187e-40
+// stddev(f - f_GSL): 1.0207789685446202e-20
 const testcase_cyl_bessel_k<double>
-data017[20] =
+data023[20] =
 {
-  { 0.0053089437122234608, 2.0000000000000000, 5.0000000000000000 },
-  { 2.1509817006932767e-05, 2.0000000000000000, 10.000000000000000 },
-  { 1.1171767065031378e-07, 2.0000000000000000, 15.000000000000000 },
-  { 6.3295436122922281e-10, 2.0000000000000000, 20.000000000000000 },
-  { 3.7467838080691102e-12, 2.0000000000000000, 25.000000000000000 },
-  { 2.2769929632558265e-14, 2.0000000000000000, 30.000000000000000 },
-  { 1.4081733110858665e-16, 2.0000000000000000, 35.000000000000000 },
-  { 8.8177176978426223e-19, 2.0000000000000000, 40.000000000000000 },
-  { 5.5731181045619470e-21, 2.0000000000000000, 45.000000000000000 },
-  { 3.5479318388581979e-23, 2.0000000000000000, 50.000000000000000 },
-  { 2.2717153918665688e-25, 2.0000000000000000, 55.000000000000000 },
-  { 1.4614189081096777e-27, 2.0000000000000000, 60.000000000000000 },
-  { 9.4383017680150234e-30, 2.0000000000000000, 65.000000000000000 },
-  { 6.1157177279757537e-32, 2.0000000000000000, 70.000000000000000 },
-  { 3.9740059241667034e-34, 2.0000000000000000, 75.000000000000000 },
-  { 2.5886411706935015e-36, 2.0000000000000000, 80.000000000000000 },
-  { 1.6898316402103142e-38, 2.0000000000000000, 85.000000000000000 },
-  { 1.1051801100484218e-40, 2.0000000000000000, 90.000000000000000 },
-  { 7.2401743221736176e-43, 2.0000000000000000, 95.000000000000000 },
-  { 4.7502253038886413e-45, 2.0000000000000000, 100.00000000000000 },
+  { 0.0053089437122234608, 2.0000000000000000, 5.0000000000000000, 0.0 },
+  { 2.1509817006932763e-05, 2.0000000000000000, 10.000000000000000, 0.0 },
+  { 1.1171767065031378e-07, 2.0000000000000000, 15.000000000000000, 0.0 },
+  { 6.3295436122922281e-10, 2.0000000000000000, 20.000000000000000, 0.0 },
+  { 3.7467838080691102e-12, 2.0000000000000000, 25.000000000000000, 0.0 },
+  { 2.2769929632558265e-14, 2.0000000000000000, 30.000000000000000, 0.0 },
+  { 1.4081733110858665e-16, 2.0000000000000000, 35.000000000000000, 0.0 },
+  { 8.8177176978426223e-19, 2.0000000000000000, 40.000000000000000, 0.0 },
+  { 5.5731181045619470e-21, 2.0000000000000000, 45.000000000000000, 0.0 },
+  { 3.5479318388581979e-23, 2.0000000000000000, 50.000000000000000, 0.0 },
+  { 2.2717153918665688e-25, 2.0000000000000000, 55.000000000000000, 0.0 },
+  { 1.4614189081096777e-27, 2.0000000000000000, 60.000000000000000, 0.0 },
+  { 9.4383017680150234e-30, 2.0000000000000000, 65.000000000000000, 0.0 },
+  { 6.1157177279757537e-32, 2.0000000000000000, 70.000000000000000, 0.0 },
+  { 3.9740059241667034e-34, 2.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.5886411706935012e-36, 2.0000000000000000, 80.000000000000000, 0.0 },
+  { 1.6898316402103142e-38, 2.0000000000000000, 85.000000000000000, 0.0 },
+  { 1.1051801100484218e-40, 2.0000000000000000, 90.000000000000000, 0.0 },
+  { 7.2401743221736176e-43, 2.0000000000000000, 95.000000000000000, 0.0 },
+  { 4.7502253038886407e-45, 2.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler017 = 2.5000000000000020e-13;
+const double toler023 = 2.5000000000000020e-13;
 
 // Test data for nu=5.0000000000000000.
-// max(|f - f_GSL|): 6.9388939039072284e-18
-// max(|f - f_GSL| / |f_GSL|): 2.3552470349020973e-16
+// max(|f - f_GSL|): 6.9388939039072284e-18 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.1215788643493719e-16
+// mean(f - f_GSL): 3.4694602906449006e-19
+// variance(f - f_GSL): 6.6687837719455956e-39
+// stddev(f - f_GSL): 8.1662621632822905e-20
 const testcase_cyl_bessel_k<double>
-data018[20] =
+data024[20] =
 {
-  { 0.032706273712031865, 5.0000000000000000, 5.0000000000000000 },
-  { 5.7541849985312288e-05, 5.0000000000000000, 10.000000000000000 },
-  { 2.1878261369258224e-07, 5.0000000000000000, 15.000000000000000 },
-  { 1.0538660139974233e-09, 5.0000000000000000, 20.000000000000000 },
-  { 5.6485921365284157e-12, 5.0000000000000000, 25.000000000000000 },
-  { 3.2103335105890266e-14, 5.0000000000000000, 30.000000000000000 },
-  { 1.8919208406439644e-16, 5.0000000000000000, 35.000000000000000 },
-  { 1.1423814375953188e-18, 5.0000000000000000, 40.000000000000000 },
-  { 7.0181216822204101e-21, 5.0000000000000000, 45.000000000000000 },
-  { 4.3671822541009859e-23, 5.0000000000000000, 50.000000000000000 },
-  { 2.7444967640357869e-25, 5.0000000000000000, 55.000000000000000 },
-  { 1.7382232741886986e-27, 5.0000000000000000, 60.000000000000000 },
-  { 1.1078474298959669e-29, 5.0000000000000000, 65.000000000000000 },
-  { 7.0974537081794416e-32, 5.0000000000000000, 70.000000000000000 },
-  { 4.5667269500061064e-34, 5.0000000000000000, 75.000000000000000 },
-  { 2.9491764420206150e-36, 5.0000000000000000, 80.000000000000000 },
-  { 1.9105685973117463e-38, 5.0000000000000000, 85.000000000000000 },
-  { 1.2411034311592645e-40, 5.0000000000000000, 90.000000000000000 },
-  { 8.0814211331379146e-43, 5.0000000000000000, 95.000000000000000 },
-  { 5.2732561132929509e-45, 5.0000000000000000, 100.00000000000000 },
+  { 0.032706273712031865, 5.0000000000000000, 5.0000000000000000, 0.0 },
+  { 5.7541849985312275e-05, 5.0000000000000000, 10.000000000000000, 0.0 },
+  { 2.1878261369258224e-07, 5.0000000000000000, 15.000000000000000, 0.0 },
+  { 1.0538660139974233e-09, 5.0000000000000000, 20.000000000000000, 0.0 },
+  { 5.6485921365284157e-12, 5.0000000000000000, 25.000000000000000, 0.0 },
+  { 3.2103335105890266e-14, 5.0000000000000000, 30.000000000000000, 0.0 },
+  { 1.8919208406439644e-16, 5.0000000000000000, 35.000000000000000, 0.0 },
+  { 1.1423814375953188e-18, 5.0000000000000000, 40.000000000000000, 0.0 },
+  { 7.0181216822204101e-21, 5.0000000000000000, 45.000000000000000, 0.0 },
+  { 4.3671822541009859e-23, 5.0000000000000000, 50.000000000000000, 0.0 },
+  { 2.7444967640357869e-25, 5.0000000000000000, 55.000000000000000, 0.0 },
+  { 1.7382232741886986e-27, 5.0000000000000000, 60.000000000000000, 0.0 },
+  { 1.1078474298959669e-29, 5.0000000000000000, 65.000000000000000, 0.0 },
+  { 7.0974537081794416e-32, 5.0000000000000000, 70.000000000000000, 0.0 },
+  { 4.5667269500061064e-34, 5.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.9491764420206146e-36, 5.0000000000000000, 80.000000000000000, 0.0 },
+  { 1.9105685973117463e-38, 5.0000000000000000, 85.000000000000000, 0.0 },
+  { 1.2411034311592645e-40, 5.0000000000000000, 90.000000000000000, 0.0 },
+  { 8.0814211331379146e-43, 5.0000000000000000, 95.000000000000000, 0.0 },
+  { 5.2732561132929503e-45, 5.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler018 = 2.5000000000000020e-13;
+const double toler024 = 2.5000000000000020e-13;
 
 // Test data for nu=10.000000000000000.
-// max(|f - f_GSL|): 5.3290705182007514e-15
+// max(|f - f_GSL|): 5.3290705182007514e-15 at index 0
 // max(|f - f_GSL| / |f_GSL|): 5.4609173619982130e-16
+// mean(f - f_GSL): 2.6646441036645034e-16
+// variance(f - f_GSL): 3.9336998333484790e-33
+// stddev(f - f_GSL): 6.2719214227766586e-17
 const testcase_cyl_bessel_k<double>
-data019[20] =
+data025[20] =
 {
-  { 9.7585628291778121, 10.000000000000000, 5.0000000000000000 },
-  { 0.0016142553003906700, 10.000000000000000, 10.000000000000000 },
-  { 2.2605303776606435e-06, 10.000000000000000, 15.000000000000000 },
-  { 6.3162145283215804e-09, 10.000000000000000, 20.000000000000000 },
-  { 2.4076769602801233e-11, 10.000000000000000, 25.000000000000000 },
-  { 1.0842816942222975e-13, 10.000000000000000, 30.000000000000000 },
-  { 5.3976770429777191e-16, 10.000000000000000, 35.000000000000000 },
-  { 2.8680293113671932e-18, 10.000000000000000, 40.000000000000000 },
-  { 1.5939871900169600e-20, 10.000000000000000, 45.000000000000000 },
-  { 9.1509882099879962e-23, 10.000000000000000, 50.000000000000000 },
-  { 5.3823846249592858e-25, 10.000000000000000, 55.000000000000000 },
-  { 3.2253408700563144e-27, 10.000000000000000, 60.000000000000000 },
-  { 1.9613367530075138e-29, 10.000000000000000, 65.000000000000000 },
-  { 1.2068471495933484e-31, 10.000000000000000, 70.000000000000000 },
-  { 7.4979152649449644e-34, 10.000000000000000, 75.000000000000000 },
-  { 4.6957285830490538e-36, 10.000000000000000, 80.000000000000000 },
-  { 2.9606323347034079e-38, 10.000000000000000, 85.000000000000000 },
-  { 1.8773542561131613e-40, 10.000000000000000, 90.000000000000000 },
-  { 1.1962899527846350e-42, 10.000000000000000, 95.000000000000000 },
-  { 7.6554279773881018e-45, 10.000000000000000, 100.00000000000000 },
+  { 9.7585628291778121, 10.000000000000000, 5.0000000000000000, 0.0 },
+  { 0.0016142553003906698, 10.000000000000000, 10.000000000000000, 0.0 },
+  { 2.2605303776606435e-06, 10.000000000000000, 15.000000000000000, 0.0 },
+  { 6.3162145283215804e-09, 10.000000000000000, 20.000000000000000, 0.0 },
+  { 2.4076769602801233e-11, 10.000000000000000, 25.000000000000000, 0.0 },
+  { 1.0842816942222975e-13, 10.000000000000000, 30.000000000000000, 0.0 },
+  { 5.3976770429777191e-16, 10.000000000000000, 35.000000000000000, 0.0 },
+  { 2.8680293113671932e-18, 10.000000000000000, 40.000000000000000, 0.0 },
+  { 1.5939871900169600e-20, 10.000000000000000, 45.000000000000000, 0.0 },
+  { 9.1509882099879962e-23, 10.000000000000000, 50.000000000000000, 0.0 },
+  { 5.3823846249592858e-25, 10.000000000000000, 55.000000000000000, 0.0 },
+  { 3.2253408700563144e-27, 10.000000000000000, 60.000000000000000, 0.0 },
+  { 1.9613367530075138e-29, 10.000000000000000, 65.000000000000000, 0.0 },
+  { 1.2068471495933484e-31, 10.000000000000000, 70.000000000000000, 0.0 },
+  { 7.4979152649449644e-34, 10.000000000000000, 75.000000000000000, 0.0 },
+  { 4.6957285830490531e-36, 10.000000000000000, 80.000000000000000, 0.0 },
+  { 2.9606323347034079e-38, 10.000000000000000, 85.000000000000000, 0.0 },
+  { 1.8773542561131613e-40, 10.000000000000000, 90.000000000000000, 0.0 },
+  { 1.1962899527846350e-42, 10.000000000000000, 95.000000000000000, 0.0 },
+  { 7.6554279773881006e-45, 10.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler019 = 2.5000000000000020e-13;
+const double toler025 = 2.5000000000000020e-13;
 
 // Test data for nu=20.000000000000000.
-// max(|f - f_GSL|): 4.1723251342773438e-07
+// max(|f - f_GSL|): 4.1723251342773438e-07 at index 0
 // max(|f - f_GSL| / |f_GSL|): 1.2224656515794909e-15
+// mean(f - f_GSL): 2.0861629934990416e-08
+// variance(f - f_GSL): 2.4111224573101845e-17
+// stddev(f - f_GSL): 4.9103181743245358e-09
 const testcase_cyl_bessel_k<double>
-data020[20] =
+data026[20] =
 {
-  { 482700052.06214869, 20.000000000000000, 5.0000000000000000 },
-  { 178.74427820770546, 20.000000000000000, 10.000000000000000 },
-  { 0.012141257729731143, 20.000000000000000, 15.000000000000000 },
-  { 5.5431116361258155e-06, 20.000000000000000, 20.000000000000000 },
-  { 6.3744029330352113e-09, 20.000000000000000, 25.000000000000000 },
-  { 1.2304516475442478e-11, 20.000000000000000, 30.000000000000000 },
-  { 3.2673136479809018e-14, 20.000000000000000, 35.000000000000000 },
-  { 1.0703023799997383e-16, 20.000000000000000, 40.000000000000000 },
-  { 4.0549953175660457e-19, 20.000000000000000, 45.000000000000000 },
-  { 1.7061483797220349e-21, 20.000000000000000, 50.000000000000000 },
-  { 7.7617008115659413e-24, 20.000000000000000, 55.000000000000000 },
-  { 3.7482954006874720e-26, 20.000000000000000, 60.000000000000000 },
-  { 1.8966880763956576e-28, 20.000000000000000, 65.000000000000000 },
-  { 9.9615763479998864e-31, 20.000000000000000, 70.000000000000000 },
-  { 5.3921623063091066e-33, 20.000000000000000, 75.000000000000000 },
-  { 2.9920407657642272e-35, 20.000000000000000, 80.000000000000000 },
-  { 1.6948662723618255e-37, 20.000000000000000, 85.000000000000000 },
-  { 9.7689149642963042e-40, 20.000000000000000, 90.000000000000000 },
-  { 5.7143603019220823e-42, 20.000000000000000, 95.000000000000000 },
-  { 3.3852054148901700e-44, 20.000000000000000, 100.00000000000000 },
+  { 482700052.06214869, 20.000000000000000, 5.0000000000000000, 0.0 },
+  { 178.74427820770543, 20.000000000000000, 10.000000000000000, 0.0 },
+  { 0.012141257729731143, 20.000000000000000, 15.000000000000000, 0.0 },
+  { 5.5431116361258155e-06, 20.000000000000000, 20.000000000000000, 0.0 },
+  { 6.3744029330352113e-09, 20.000000000000000, 25.000000000000000, 0.0 },
+  { 1.2304516475442478e-11, 20.000000000000000, 30.000000000000000, 0.0 },
+  { 3.2673136479809018e-14, 20.000000000000000, 35.000000000000000, 0.0 },
+  { 1.0703023799997383e-16, 20.000000000000000, 40.000000000000000, 0.0 },
+  { 4.0549953175660457e-19, 20.000000000000000, 45.000000000000000, 0.0 },
+  { 1.7061483797220349e-21, 20.000000000000000, 50.000000000000000, 0.0 },
+  { 7.7617008115659413e-24, 20.000000000000000, 55.000000000000000, 0.0 },
+  { 3.7482954006874720e-26, 20.000000000000000, 60.000000000000000, 0.0 },
+  { 1.8966880763956576e-28, 20.000000000000000, 65.000000000000000, 0.0 },
+  { 9.9615763479998864e-31, 20.000000000000000, 70.000000000000000, 0.0 },
+  { 5.3921623063091066e-33, 20.000000000000000, 75.000000000000000, 0.0 },
+  { 2.9920407657642266e-35, 20.000000000000000, 80.000000000000000, 0.0 },
+  { 1.6948662723618255e-37, 20.000000000000000, 85.000000000000000, 0.0 },
+  { 9.7689149642963042e-40, 20.000000000000000, 90.000000000000000, 0.0 },
+  { 5.7143603019220823e-42, 20.000000000000000, 95.000000000000000, 0.0 },
+  { 3.3852054148901695e-44, 20.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler020 = 2.5000000000000020e-13;
+const double toler026 = 2.5000000000000020e-13;
 
 // Test data for nu=50.000000000000000.
-// max(|f - f_GSL|): 8.6655802749976619e+27
+// max(|f - f_GSL|): 8.6655802749976619e+27 at index 0
 // max(|f - f_GSL| / |f_GSL|): 2.6684549464729312e-15
+// mean(f - f_GSL): 4.3327901374988334e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_k<double>
-data021[20] =
+data027[20] =
 {
-  { 3.3943222434301628e+42, 50.000000000000000, 5.0000000000000000 },
-  { 2.0613737753892557e+27, 50.000000000000000, 10.000000000000000 },
-  { 1.7267736974519188e+18, 50.000000000000000, 15.000000000000000 },
-  { 411711209122.01788, 50.000000000000000, 20.000000000000000 },
-  { 1972478.7419813874, 50.000000000000000, 25.000000000000000 },
-  { 58.770686258007267, 50.000000000000000, 30.000000000000000 },
-  { 0.0058659391182535178, 50.000000000000000, 35.000000000000000 },
-  { 1.3634854128794101e-06, 50.000000000000000, 40.000000000000000 },
-  { 5.8652396362160819e-10, 50.000000000000000, 45.000000000000000 },
-  { 4.0060134766400893e-13, 50.000000000000000, 50.000000000000000 },
-  { 3.9062324485711016e-16, 50.000000000000000, 55.000000000000000 },
-  { 5.0389298085176510e-19, 50.000000000000000, 60.000000000000000 },
-  { 8.1305344250110424e-22, 50.000000000000000, 65.000000000000000 },
-  { 1.5732816234948991e-24, 50.000000000000000, 70.000000000000000 },
-  { 3.5349854993874412e-27, 50.000000000000000, 75.000000000000000 },
-  { 8.9940101003189485e-30, 50.000000000000000, 80.000000000000000 },
-  { 2.5403205503080723e-32, 50.000000000000000, 85.000000000000000 },
-  { 7.8397596486715721e-35, 50.000000000000000, 90.000000000000000 },
-  { 2.6098900651329542e-37, 50.000000000000000, 95.000000000000000 },
-  { 9.2745226536133258e-40, 50.000000000000000, 100.00000000000000 },
+  { 3.3943222434301628e+42, 50.000000000000000, 5.0000000000000000, 0.0 },
+  { 2.0613737753892554e+27, 50.000000000000000, 10.000000000000000, 0.0 },
+  { 1.7267736974519188e+18, 50.000000000000000, 15.000000000000000, 0.0 },
+  { 411711209122.01788, 50.000000000000000, 20.000000000000000, 0.0 },
+  { 1972478.7419813874, 50.000000000000000, 25.000000000000000, 0.0 },
+  { 58.770686258007267, 50.000000000000000, 30.000000000000000, 0.0 },
+  { 0.0058659391182535178, 50.000000000000000, 35.000000000000000, 0.0 },
+  { 1.3634854128794101e-06, 50.000000000000000, 40.000000000000000, 0.0 },
+  { 5.8652396362160819e-10, 50.000000000000000, 45.000000000000000, 0.0 },
+  { 4.0060134766400893e-13, 50.000000000000000, 50.000000000000000, 0.0 },
+  { 3.9062324485711016e-16, 50.000000000000000, 55.000000000000000, 0.0 },
+  { 5.0389298085176510e-19, 50.000000000000000, 60.000000000000000, 0.0 },
+  { 8.1305344250110424e-22, 50.000000000000000, 65.000000000000000, 0.0 },
+  { 1.5732816234948991e-24, 50.000000000000000, 70.000000000000000, 0.0 },
+  { 3.5349854993874412e-27, 50.000000000000000, 75.000000000000000, 0.0 },
+  { 8.9940101003189471e-30, 50.000000000000000, 80.000000000000000, 0.0 },
+  { 2.5403205503080723e-32, 50.000000000000000, 85.000000000000000, 0.0 },
+  { 7.8397596486715721e-35, 50.000000000000000, 90.000000000000000, 0.0 },
+  { 2.6098900651329542e-37, 50.000000000000000, 95.000000000000000, 0.0 },
+  { 9.2745226536133242e-40, 50.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler021 = 2.5000000000000020e-13;
+const double toler027 = 2.5000000000000020e-13;
 
 // Test data for nu=100.00000000000000.
-// max(|f - f_GSL|): 3.4996011596528191e+101
-// max(|f - f_GSL| / |f_GSL|): 4.9711230957426436e-15
+// max(|f - f_GSL|): 3.4996011596528191e+101 at index 0
+// max(|f - f_GSL| / |f_GSL|): 5.1049818083452373e-15
+// mean(f - f_GSL): 1.7498005798264095e+100
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_bessel_k<double>
-data022[20] =
+data028[20] =
 {
-  { 7.0398601930616815e+115, 100.00000000000000, 5.0000000000000000 },
-  { 4.5966740842695238e+85, 100.00000000000000, 10.000000000000000 },
-  { 8.2565552242653946e+67, 100.00000000000000, 15.000000000000000 },
-  { 1.7081356456876041e+55, 100.00000000000000, 20.000000000000000 },
-  { 1.9858028128780610e+45, 100.00000000000000, 25.000000000000000 },
-  { 1.2131584253026677e+37, 100.00000000000000, 30.000000000000000 },
-  { 1.1016916354696688e+30, 100.00000000000000, 35.000000000000000 },
-  { 7.0074023297775712e+23, 100.00000000000000, 40.000000000000000 },
-  { 1.9236643958470894e+18, 100.00000000000000, 45.000000000000000 },
-  { 16394035276269.250, 100.00000000000000, 50.000000000000000 },
-  { 343254952.89495474, 100.00000000000000, 55.000000000000000 },
-  { 14870.012754946298, 100.00000000000000, 60.000000000000000 },
-  { 1.1708099078572216, 100.00000000000000, 65.000000000000000 },
-  { 0.00015161193930722313, 100.00000000000000, 70.000000000000000 },
-  { 2.9850234381623443e-08, 100.00000000000000, 75.000000000000000 },
-  { 8.3928710724649129e-12, 100.00000000000000, 80.000000000000000 },
-  { 3.2033435630927732e-15, 100.00000000000000, 85.000000000000000 },
-  { 1.5922281431788096e-18, 100.00000000000000, 90.000000000000000 },
-  { 9.9589454577674131e-22, 100.00000000000000, 95.000000000000000 },
-  { 7.6171296304940840e-25, 100.00000000000000, 100.00000000000000 },
+  { 7.0398601930616815e+115, 100.00000000000000, 5.0000000000000000, 0.0 },
+  { 4.5966740842695231e+85, 100.00000000000000, 10.000000000000000, 0.0 },
+  { 8.2565552242653946e+67, 100.00000000000000, 15.000000000000000, 0.0 },
+  { 1.7081356456876041e+55, 100.00000000000000, 20.000000000000000, 0.0 },
+  { 1.9858028128780610e+45, 100.00000000000000, 25.000000000000000, 0.0 },
+  { 1.2131584253026677e+37, 100.00000000000000, 30.000000000000000, 0.0 },
+  { 1.1016916354696688e+30, 100.00000000000000, 35.000000000000000, 0.0 },
+  { 7.0074023297775712e+23, 100.00000000000000, 40.000000000000000, 0.0 },
+  { 1.9236643958470894e+18, 100.00000000000000, 45.000000000000000, 0.0 },
+  { 16394035276269.250, 100.00000000000000, 50.000000000000000, 0.0 },
+  { 343254952.89495474, 100.00000000000000, 55.000000000000000, 0.0 },
+  { 14870.012754946298, 100.00000000000000, 60.000000000000000, 0.0 },
+  { 1.1708099078572216, 100.00000000000000, 65.000000000000000, 0.0 },
+  { 0.00015161193930722313, 100.00000000000000, 70.000000000000000, 0.0 },
+  { 2.9850234381623443e-08, 100.00000000000000, 75.000000000000000, 0.0 },
+  { 8.3928710724649113e-12, 100.00000000000000, 80.000000000000000, 0.0 },
+  { 3.2033435630927732e-15, 100.00000000000000, 85.000000000000000, 0.0 },
+  { 1.5922281431788096e-18, 100.00000000000000, 90.000000000000000, 0.0 },
+  { 9.9589454577674131e-22, 100.00000000000000, 95.000000000000000, 0.0 },
+  { 7.6171296304940831e-25, 100.00000000000000, 100.00000000000000, 0.0 },
 };
-const double toler022 = 2.5000000000000020e-13;
+const double toler028 = 5.0000000000000039e-13;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_cyl_bessel_k<Tp> (&data)[Num], Tp toler)
+  test(const testcase_cyl_bessel_k<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::cyl_bessel_k(data[i].nu, data[i].x);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::cyl_bessel_k(data[i].nu, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
@@ -706,12 +772,6 @@ template<typename Tp, unsigned int Num>
 int
 main()
 {
-  test(data001, toler001);
-  test(data002, toler002);
-  test(data003, toler003);
-  test(data004, toler004);
-  test(data005, toler005);
-  test(data006, toler006);
   test(data007, toler007);
   test(data008, toler008);
   test(data009, toler009);
@@ -728,5 +788,11 @@ main()
   test(data020, toler020);
   test(data021, toler021);
   test(data022, toler022);
+  test(data023, toler023);
+  test(data024, toler024);
+  test(data025, toler025);
+  test(data026, toler026);
+  test(data027, toler027);
+  test(data028, toler028);
   return 0;
 }
index 33fe0a2..23f339b 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for nu=0.0000000000000000.
-// max(|f - f_GSL|): 1.6653345369377348e-16
-// max(|f - f_GSL| / |f_GSL|): 2.6623873675138176e-15
+// max(|f - f_GSL|): 9.9920072216264089e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 1.5769525176812613e-14
+// mean(f - f_GSL): 1.7173762412170391e-17
+// variance(f - f_GSL): 1.8144622474613909e-32
+// stddev(f - f_GSL): 1.3470197650596635e-16
 const testcase_cyl_neumann<double>
-data001[20] =
+data007[20] =
 {
-  { -0.93157302493005878, 0.0000000000000000, 0.25000000000000000 },
-  { -0.44451873350670656, 0.0000000000000000, 0.50000000000000000 },
-  { -0.13717276938577236, 0.0000000000000000, 0.75000000000000000 },
-  { 0.088256964215676942, 0.0000000000000000, 1.0000000000000000 },
-  { 0.25821685159454072, 0.0000000000000000, 1.2500000000000000 },
-  { 0.38244892379775886, 0.0000000000000000, 1.5000000000000000 },
-  { 0.46549262864690610, 0.0000000000000000, 1.7500000000000000 },
-  { 0.51037567264974493, 0.0000000000000000, 2.0000000000000000 },
-  { 0.52006476245727862, 0.0000000000000000, 2.2500000000000000 },
-  { 0.49807035961523194, 0.0000000000000000, 2.5000000000000000 },
-  { 0.44865872156913222, 0.0000000000000000, 2.7500000000000000 },
-  { 0.37685001001279045, 0.0000000000000000, 3.0000000000000000 },
-  { 0.28828690267308710, 0.0000000000000000, 3.2500000000000000 },
-  { 0.18902194392082688, 0.0000000000000000, 3.5000000000000000 },
-  { 0.085256756977362638, 0.0000000000000000, 3.7500000000000000 },
-  { -0.016940739325064763, 0.0000000000000000, 4.0000000000000000 },
-  { -0.11191885116160770, 0.0000000000000000, 4.2500000000000000 },
-  { -0.19470500862950454, 0.0000000000000000, 4.5000000000000000 },
-  { -0.26123250323497549, 0.0000000000000000, 4.7500000000000000 },
-  { -0.30851762524903359, 0.0000000000000000, 5.0000000000000000 },
+  { -0.93157302493005878, 0.0000000000000000, 0.25000000000000000, 0.0 },
+  { -0.44451873350670656, 0.0000000000000000, 0.50000000000000000, 0.0 },
+  { -0.13717276938577236, 0.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.088256964215676942, 0.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.25821685159454072, 0.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.38244892379775886, 0.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.46549262864690610, 0.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.51037567264974493, 0.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.52006476245727862, 0.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.49807035961523194, 0.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.44865872156913222, 0.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.37685001001279045, 0.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.28828690267308710, 0.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.18902194392082688, 0.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.085256756977362638, 0.0000000000000000, 3.7500000000000000, 0.0 },
+  { -0.016940739325064763, 0.0000000000000000, 4.0000000000000000, 0.0 },
+  { -0.11191885116160770, 0.0000000000000000, 4.2500000000000000, 0.0 },
+  { -0.19470500862950454, 0.0000000000000000, 4.5000000000000000, 0.0 },
+  { -0.26123250323497549, 0.0000000000000000, 4.7500000000000000, 0.0 },
+  { -0.30851762524903359, 0.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler001 = 2.5000000000000020e-13;
+const double toler007 = 1.0000000000000008e-12;
 
 // Test data for nu=0.33333333333333331.
-// max(|f - f_GSL|): 5.8286708792820718e-16
-// max(|f - f_GSL| / |f_GSL|): 1.7769445360534625e-14
+// max(|f - f_GSL|): 1.7208456881689926e-15 at index 7
+// max(|f - f_GSL| / |f_GSL|): 5.0141196309547185e-15
+// mean(f - f_GSL): -1.8908485888147198e-17
+// variance(f - f_GSL): 4.0002408539583433e-33
+// stddev(f - f_GSL): 6.3247457292434642e-17
 const testcase_cyl_neumann<double>
-data002[20] =
+data008[20] =
 {
-  { -1.3461842332051077, 0.33333333333333331, 0.25000000000000000 },
-  { -0.84062782604337771, 0.33333333333333331, 0.50000000000000000 },
-  { -0.52488281484097077, 0.33333333333333331, 0.75000000000000000 },
-  { -0.27880164127599205, 0.33333333333333331, 1.0000000000000000 },
-  { -0.074321349727836453, 0.33333333333333331, 1.2500000000000000 },
-  { 0.096610087766627981, 0.33333333333333331, 1.5000000000000000 },
-  { 0.23582564494922068, 0.33333333333333331, 1.7500000000000000 },
-  { 0.34319996626034494, 0.33333333333333331, 2.0000000000000000 },
-  { 0.41835668452349323, 0.33333333333333331, 2.2500000000000000 },
-  { 0.46145947419129157, 0.33333333333333331, 2.5000000000000000 },
-  { 0.47358926135786023, 0.33333333333333331, 2.7500000000000000 },
-  { 0.45689303457230640, 0.33333333333333331, 3.0000000000000000 },
-  { 0.41458485697347386, 0.33333333333333331, 3.2500000000000000 },
-  { 0.35084133277859947, 0.33333333333333331, 3.5000000000000000 },
-  { 0.27061914527820891, 0.33333333333333331, 3.7500000000000000 },
-  { 0.17941676634394862, 0.33333333333333331, 4.0000000000000000 },
-  { 0.083000434191526043, 0.33333333333333331, 4.2500000000000000 },
-  { -0.012886361627105348, 0.33333333333333331, 4.5000000000000000 },
-  { -0.10281143123935124, 0.33333333333333331, 4.7500000000000000 },
-  { -0.18192321129343850, 0.33333333333333331, 5.0000000000000000 },
+  { -1.3461842332051073, 0.33333333333333331, 0.25000000000000000, 0.0 },
+  { -0.84062782604337771, 0.33333333333333331, 0.50000000000000000, 0.0 },
+  { -0.52488281484097088, 0.33333333333333331, 0.75000000000000000, 0.0 },
+  { -0.27880164127599216, 0.33333333333333331, 1.0000000000000000, 0.0 },
+  { -0.074321349727836453, 0.33333333333333331, 1.2500000000000000, 0.0 },
+  { 0.096610087766627981, 0.33333333333333331, 1.5000000000000000, 0.0 },
+  { 0.23582564494922068, 0.33333333333333331, 1.7500000000000000, 0.0 },
+  { 0.34319996626034494, 0.33333333333333331, 2.0000000000000000, 0.0 },
+  { 0.41835668452349323, 0.33333333333333331, 2.2500000000000000, 0.0 },
+  { 0.46145947419129157, 0.33333333333333331, 2.5000000000000000, 0.0 },
+  { 0.47358926135786023, 0.33333333333333331, 2.7500000000000000, 0.0 },
+  { 0.45689303457230640, 0.33333333333333331, 3.0000000000000000, 0.0 },
+  { 0.41458485697347386, 0.33333333333333331, 3.2500000000000000, 0.0 },
+  { 0.35084133277859947, 0.33333333333333331, 3.5000000000000000, 0.0 },
+  { 0.27061914527820891, 0.33333333333333331, 3.7500000000000000, 0.0 },
+  { 0.17941676634394862, 0.33333333333333331, 4.0000000000000000, 0.0 },
+  { 0.083000434191526043, 0.33333333333333331, 4.2500000000000000, 0.0 },
+  { -0.012886361627105348, 0.33333333333333331, 4.5000000000000000, 0.0 },
+  { -0.10281143123935124, 0.33333333333333331, 4.7500000000000000, 0.0 },
+  { -0.18192321129343850, 0.33333333333333331, 5.0000000000000000, 0.0 },
 };
-const double toler002 = 1.0000000000000008e-12;
+const double toler008 = 5.0000000000000039e-13;
 
 // Test data for nu=0.50000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 5.7217850214577088e-15
+// max(|f - f_GSL|): 5.5511151231257827e-16 at index 1
+// max(|f - f_GSL| / |f_GSL|): 6.6252247616878728e-15
+// mean(f - f_GSL): -8.0924850154318048e-17
+// variance(f - f_GSL): 1.5661893379337934e-34
+// stddev(f - f_GSL): 1.2514748650827124e-17
 const testcase_cyl_neumann<double>
-data003[20] =
+data009[20] =
 {
-  { -1.5461605241060765, 0.50000000000000000, 0.25000000000000000 },
-  { -0.99024588024340454, 0.50000000000000000, 0.50000000000000000 },
-  { -0.67411792914454460, 0.50000000000000000, 0.75000000000000000 },
-  { -0.43109886801837594, 0.50000000000000000, 1.0000000000000000 },
-  { -0.22502969244466481, 0.50000000000000000, 1.2500000000000000 },
-  { -0.046083165893097265, 0.50000000000000000, 1.5000000000000000 },
-  { 0.10750804524368722, 0.50000000000000000, 1.7500000000000000 },
-  { 0.23478571040624849, 0.50000000000000000, 2.0000000000000000 },
-  { 0.33414002338271825, 0.50000000000000000, 2.2500000000000000 },
-  { 0.40427830223905686, 0.50000000000000000, 2.5000000000000000 },
-  { 0.44472115119490507, 0.50000000000000000, 2.7500000000000000 },
-  { 0.45604882079463316, 0.50000000000000000, 3.0000000000000000 },
-  { 0.43998859501924370, 0.50000000000000000, 3.2500000000000000 },
-  { 0.39938682536304909, 0.50000000000000000, 3.5000000000000000 },
-  { 0.33809163836693340, 0.50000000000000000, 3.7500000000000000 },
-  { 0.26076607667717877, 0.50000000000000000, 4.0000000000000000 },
-  { 0.17264962544644955, 0.50000000000000000, 4.2500000000000000 },
-  { 0.079285862862978548, 0.50000000000000000, 4.5000000000000000 },
-  { -0.013765943019498003, 0.50000000000000000, 4.7500000000000000 },
-  { -0.10121770918510846, 0.50000000000000000, 5.0000000000000000 },
+  { -1.5461605241060765, 0.50000000000000000, 0.25000000000000000, 0.0 },
+  { -0.99024588024340454, 0.50000000000000000, 0.50000000000000000, 0.0 },
+  { -0.67411792914454438, 0.50000000000000000, 0.75000000000000000, 0.0 },
+  { -0.43109886801837571, 0.50000000000000000, 1.0000000000000000, 0.0 },
+  { -0.22502969244466481, 0.50000000000000000, 1.2500000000000000, 0.0 },
+  { -0.046083165893097265, 0.50000000000000000, 1.5000000000000000, 0.0 },
+  { 0.10750804524368722, 0.50000000000000000, 1.7500000000000000, 0.0 },
+  { 0.23478571040624849, 0.50000000000000000, 2.0000000000000000, 0.0 },
+  { 0.33414002338271825, 0.50000000000000000, 2.2500000000000000, 0.0 },
+  { 0.40427830223905686, 0.50000000000000000, 2.5000000000000000, 0.0 },
+  { 0.44472115119490507, 0.50000000000000000, 2.7500000000000000, 0.0 },
+  { 0.45604882079463316, 0.50000000000000000, 3.0000000000000000, 0.0 },
+  { 0.43998859501924370, 0.50000000000000000, 3.2500000000000000, 0.0 },
+  { 0.39938682536304909, 0.50000000000000000, 3.5000000000000000, 0.0 },
+  { 0.33809163836693340, 0.50000000000000000, 3.7500000000000000, 0.0 },
+  { 0.26076607667717877, 0.50000000000000000, 4.0000000000000000, 0.0 },
+  { 0.17264962544644955, 0.50000000000000000, 4.2500000000000000, 0.0 },
+  { 0.079285862862978548, 0.50000000000000000, 4.5000000000000000, 0.0 },
+  { -0.013765943019498003, 0.50000000000000000, 4.7500000000000000, 0.0 },
+  { -0.10121770918510846, 0.50000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler003 = 5.0000000000000039e-13;
+const double toler009 = 5.0000000000000039e-13;
 
 // Test data for nu=0.66666666666666663.
-// max(|f - f_GSL|): 1.4988010832439613e-15
-// max(|f - f_GSL| / |f_GSL|): 6.3663053018318525e-15
+// max(|f - f_GSL|): 1.0547118733938987e-15 at index 9
+// max(|f - f_GSL| / |f_GSL|): 7.7816158152055799e-15
+// mean(f - f_GSL): 1.0772632785815972e-16
+// variance(f - f_GSL): 1.6340061794441914e-35
+// stddev(f - f_GSL): 4.0422842297940791e-18
 const testcase_cyl_neumann<double>
-data004[20] =
+data010[20] =
 {
-  { -1.8021638417426857, 0.66666666666666663, 0.25000000000000000 },
-  { -1.1316060101031435, 0.66666666666666663, 0.50000000000000000 },
-  { -0.80251156358450737, 0.66666666666666663, 0.75000000000000000 },
-  { -0.56270321497463327, 0.66666666666666663, 1.0000000000000000 },
-  { -0.36007453643432208, 0.66666666666666663, 1.2500000000000000 },
-  { -0.18017937469615020, 0.66666666666666663, 1.5000000000000000 },
-  { -0.019885608758103752, 0.66666666666666663, 1.7500000000000000 },
-  { 0.11989345361903521, 0.66666666666666663, 2.0000000000000000 },
-  { 0.23690889836358039, 0.66666666666666663, 2.2500000000000000 },
-  { 0.32882045742954535, 0.66666666666666663, 2.5000000000000000 },
-  { 0.39385133784531856, 0.66666666666666663, 2.7500000000000000 },
-  { 0.43115101690935642, 0.66666666666666663, 3.0000000000000000 },
-  { 0.44098127351445843, 0.66666666666666663, 3.2500000000000000 },
-  { 0.42477631413456485, 0.66666666666666663, 3.5000000000000000 },
-  { 0.38510384155620386, 0.66666666666666663, 3.7500000000000000 },
-  { 0.32554526794354366, 0.66666666666666663, 4.0000000000000000 },
-  { 0.25051080073878446, 0.66666666666666663, 4.2500000000000000 },
-  { 0.16500507211842136, 0.66666666666666663, 4.5000000000000000 },
-  { 0.074359649728861360, 0.66666666666666663, 4.7500000000000000 },
-  { -0.016050662643389627, 0.66666666666666663, 5.0000000000000000 },
+  { -1.8021638417426857, 0.66666666666666663, 0.25000000000000000, 0.0 },
+  { -1.1316060101031435, 0.66666666666666663, 0.50000000000000000, 0.0 },
+  { -0.80251156358450748, 0.66666666666666663, 0.75000000000000000, 0.0 },
+  { -0.56270321497463327, 0.66666666666666663, 1.0000000000000000, 0.0 },
+  { -0.36007453643432208, 0.66666666666666663, 1.2500000000000000, 0.0 },
+  { -0.18017937469615020, 0.66666666666666663, 1.5000000000000000, 0.0 },
+  { -0.019885608758103752, 0.66666666666666663, 1.7500000000000000, 0.0 },
+  { 0.11989345361903521, 0.66666666666666663, 2.0000000000000000, 0.0 },
+  { 0.23690889836358039, 0.66666666666666663, 2.2500000000000000, 0.0 },
+  { 0.32882045742954535, 0.66666666666666663, 2.5000000000000000, 0.0 },
+  { 0.39385133784531856, 0.66666666666666663, 2.7500000000000000, 0.0 },
+  { 0.43115101690935642, 0.66666666666666663, 3.0000000000000000, 0.0 },
+  { 0.44098127351445843, 0.66666666666666663, 3.2500000000000000, 0.0 },
+  { 0.42477631413456485, 0.66666666666666663, 3.5000000000000000, 0.0 },
+  { 0.38510384155620386, 0.66666666666666663, 3.7500000000000000, 0.0 },
+  { 0.32554526794354366, 0.66666666666666663, 4.0000000000000000, 0.0 },
+  { 0.25051080073878446, 0.66666666666666663, 4.2500000000000000, 0.0 },
+  { 0.16500507211842136, 0.66666666666666663, 4.5000000000000000, 0.0 },
+  { 0.074359649728861360, 0.66666666666666663, 4.7500000000000000, 0.0 },
+  { -0.016050662643389627, 0.66666666666666663, 5.0000000000000000, 0.0 },
 };
-const double toler004 = 5.0000000000000039e-13;
+const double toler010 = 5.0000000000000039e-13;
 
 // Test data for nu=1.0000000000000000.
-// max(|f - f_GSL|): 9.1593399531575415e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3683879467319323e-14
+// max(|f - f_GSL|): 8.5001450322863548e-16 at index 8
+// max(|f - f_GSL| / |f_GSL|): 3.1259660869292553e-14
+// mean(f - f_GSL): 8.2746309804093703e-17
+// variance(f - f_GSL): 1.0590097247613155e-33
+// stddev(f - f_GSL): 3.2542429607534157e-17
 const testcase_cyl_neumann<double>
-data005[13] =
+data011[20] =
 {
-  { -0.10703243154093699, 1.0000000000000000, 2.0000000000000000 },
-  { 0.027192057738017056, 1.0000000000000000, 2.2500000000000000 },
-  { 0.14591813796678599, 1.0000000000000000, 2.5000000000000000 },
-  { 0.24601900149738354, 1.0000000000000000, 2.7500000000000000 },
-  { 0.32467442479180003, 1.0000000000000000, 3.0000000000000000 },
-  { 0.37977777371708382, 1.0000000000000000, 3.2500000000000000 },
-  { 0.41018841788751170, 1.0000000000000000, 3.5000000000000000 },
-  { 0.41586877934522715, 1.0000000000000000, 3.7500000000000000 },
-  { 0.39792571055709991, 1.0000000000000000, 4.0000000000000000 },
-  { 0.35856889308385076, 1.0000000000000000, 4.2500000000000000 },
-  { 0.30099732306965449, 1.0000000000000000, 4.5000000000000000 },
-  { 0.22922559673872217, 1.0000000000000000, 4.7500000000000000 },
-  { 0.14786314339122700, 1.0000000000000000, 5.0000000000000000 },
+  { -2.7041052293152825, 1.0000000000000000, 0.25000000000000000, 0.0 },
+  { -1.4714723926702433, 1.0000000000000000, 0.50000000000000000, 0.0 },
+  { -1.0375945507692856, 1.0000000000000000, 0.75000000000000000, 0.0 },
+  { -0.78121282130028891, 1.0000000000000000, 1.0000000000000000, 0.0 },
+  { -0.58436403661500824, 1.0000000000000000, 1.2500000000000000, 0.0 },
+  { -0.41230862697391119, 1.0000000000000000, 1.5000000000000000, 0.0 },
+  { -0.25397298594624573, 1.0000000000000000, 1.7500000000000000, 0.0 },
+  { -0.10703243154093699, 1.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.027192057738017056, 1.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.14591813796678599, 1.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.24601900149738354, 1.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.32467442479180003, 1.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.37977777371708382, 1.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.41018841788751170, 1.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.41586877934522715, 1.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.39792571055709991, 1.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.35856889308385076, 1.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.30099732306965449, 1.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.22922559673872217, 1.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.14786314339122700, 1.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler005 = 2.5000000000000015e-12;
+const double toler011 = 2.5000000000000015e-12;
 
 // Test data for nu=2.0000000000000000.
-// max(|f - f_GSL|): 6.1062266354383610e-16
-// max(|f - f_GSL| / |f_GSL|): 1.2540693630135021e-14
+// max(|f - f_GSL|): 1.0547118733938987e-15 at index 8
+// max(|f - f_GSL| / |f_GSL|): 1.1776017189273130e-14
+// mean(f - f_GSL): 1.4502288259166106e-16
+// variance(f - f_GSL): 2.5634607708533707e-35
+// stddev(f - f_GSL): 5.0630630757016755e-18
 const testcase_cyl_neumann<double>
-data006[20] =
+data012[20] =
 {
-  { -20.701268809592200, 2.0000000000000000, 0.25000000000000000 },
-  { -5.4413708371742668, 2.0000000000000000, 0.50000000000000000 },
-  { -2.6297460326656559, 2.0000000000000000, 0.75000000000000000 },
-  { -1.6506826068162548, 2.0000000000000000, 1.0000000000000000 },
-  { -1.1931993101785539, 2.0000000000000000, 1.2500000000000000 },
-  { -0.93219375976297369, 2.0000000000000000, 1.5000000000000000 },
-  { -0.75574746972832973, 2.0000000000000000, 1.7500000000000000 },
-  { -0.61740810419068193, 2.0000000000000000, 2.0000000000000000 },
-  { -0.49589404446793012, 2.0000000000000000, 2.2500000000000000 },
-  { -0.38133584924180314, 2.0000000000000000, 2.5000000000000000 },
-  { -0.26973581138921693, 2.0000000000000000, 2.7500000000000000 },
-  { -0.16040039348492377, 2.0000000000000000, 3.0000000000000000 },
-  { -0.054577503462573951, 2.0000000000000000, 3.2500000000000000 },
-  { 0.045371437729179787, 2.0000000000000000, 3.5000000000000000 },
-  { 0.13653992534009185, 2.0000000000000000, 3.7500000000000000 },
-  { 0.21590359460361472, 2.0000000000000000, 4.0000000000000000 },
-  { 0.28065715378930217, 2.0000000000000000, 4.2500000000000000 },
-  { 0.32848159666046206, 2.0000000000000000, 4.5000000000000000 },
-  { 0.35774854396706901, 2.0000000000000000, 4.7500000000000000 },
-  { 0.36766288260552438, 2.0000000000000000, 5.0000000000000000 },
+  { -20.701268809592200, 2.0000000000000000, 0.25000000000000000, 0.0 },
+  { -5.4413708371742668, 2.0000000000000000, 0.50000000000000000, 0.0 },
+  { -2.6297460326656559, 2.0000000000000000, 0.75000000000000000, 0.0 },
+  { -1.6506826068162548, 2.0000000000000000, 1.0000000000000000, 0.0 },
+  { -1.1931993101785539, 2.0000000000000000, 1.2500000000000000, 0.0 },
+  { -0.93219375976297369, 2.0000000000000000, 1.5000000000000000, 0.0 },
+  { -0.75574746972832973, 2.0000000000000000, 1.7500000000000000, 0.0 },
+  { -0.61740810419068193, 2.0000000000000000, 2.0000000000000000, 0.0 },
+  { -0.49589404446793012, 2.0000000000000000, 2.2500000000000000, 0.0 },
+  { -0.38133584924180314, 2.0000000000000000, 2.5000000000000000, 0.0 },
+  { -0.26973581138921693, 2.0000000000000000, 2.7500000000000000, 0.0 },
+  { -0.16040039348492377, 2.0000000000000000, 3.0000000000000000, 0.0 },
+  { -0.054577503462573951, 2.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.045371437729179787, 2.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.13653992534009185, 2.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.21590359460361472, 2.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.28065715378930217, 2.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.32848159666046206, 2.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.35774854396706901, 2.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.36766288260552438, 2.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler006 = 1.0000000000000008e-12;
+const double toler012 = 1.0000000000000008e-12;
 
 // Test data for nu=5.0000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-15
-// max(|f - f_GSL| / |f_GSL|): 1.6846903979704834e-15
+// max(|f - f_GSL|): 2.8421709430404007e-14 at index 4
+// max(|f - f_GSL| / |f_GSL|): 1.0726804245235588e-15
+// mean(f - f_GSL): -1.8762769116165144e-15
+// variance(f - f_GSL): 2.7042659892362611e-31
+// stddev(f - f_GSL): 5.2002557525916566e-16
 const testcase_cyl_neumann<double>
-data007[13] =
+data013[20] =
 {
-  { -9.9359891284819675, 5.0000000000000000, 2.0000000000000000 },
-  { -5.9446343848076424, 5.0000000000000000, 2.2500000000000000 },
-  { -3.8301760007407522, 5.0000000000000000, 2.5000000000000000 },
-  { -2.6287042009459087, 5.0000000000000000, 2.7500000000000000 },
-  { -1.9059459538286738, 5.0000000000000000, 3.0000000000000000 },
-  { -1.4498157389142654, 5.0000000000000000, 3.2500000000000000 },
-  { -1.1494603169763686, 5.0000000000000000, 3.5000000000000000 },
-  { -0.94343105151431672, 5.0000000000000000, 3.7500000000000000 },
-  { -0.79585142111419982, 5.0000000000000000, 4.0000000000000000 },
-  { -0.68479288173907016, 5.0000000000000000, 4.2500000000000000 },
-  { -0.59631936513587558, 5.0000000000000000, 4.5000000000000000 },
-  { -0.52130838331747587, 5.0000000000000000, 4.7500000000000000 },
-  { -0.45369482249110193, 5.0000000000000000, 5.0000000000000000 },
+  { -251309.48151852371, 5.0000000000000000, 0.25000000000000000, 0.0 },
+  { -7946.3014788074752, 5.0000000000000000, 0.50000000000000000, 0.0 },
+  { -1067.2468952289760, 5.0000000000000000, 0.75000000000000000, 0.0 },
+  { -260.40586662581228, 5.0000000000000000, 1.0000000000000000, 0.0 },
+  { -88.474252441880395, 5.0000000000000000, 1.2500000000000000, 0.0 },
+  { -37.190308395498064, 5.0000000000000000, 1.5000000000000000, 0.0 },
+  { -18.165774988201832, 5.0000000000000000, 1.7500000000000000, 0.0 },
+  { -9.9359891284819675, 5.0000000000000000, 2.0000000000000000, 0.0 },
+  { -5.9446343848076424, 5.0000000000000000, 2.2500000000000000, 0.0 },
+  { -3.8301760007407522, 5.0000000000000000, 2.5000000000000000, 0.0 },
+  { -2.6287042009459087, 5.0000000000000000, 2.7500000000000000, 0.0 },
+  { -1.9059459538286738, 5.0000000000000000, 3.0000000000000000, 0.0 },
+  { -1.4498157389142654, 5.0000000000000000, 3.2500000000000000, 0.0 },
+  { -1.1494603169763686, 5.0000000000000000, 3.5000000000000000, 0.0 },
+  { -0.94343105151431672, 5.0000000000000000, 3.7500000000000000, 0.0 },
+  { -0.79585142111419982, 5.0000000000000000, 4.0000000000000000, 0.0 },
+  { -0.68479288173907016, 5.0000000000000000, 4.2500000000000000, 0.0 },
+  { -0.59631936513587558, 5.0000000000000000, 4.5000000000000000, 0.0 },
+  { -0.52130838331747587, 5.0000000000000000, 4.7500000000000000, 0.0 },
+  { -0.45369482249110193, 5.0000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler007 = 2.5000000000000020e-13;
+const double toler013 = 2.5000000000000020e-13;
 
 // Test data for nu=10.000000000000000.
-// max(|f - f_GSL|): 2.3841857910156250e-07
-// max(|f - f_GSL| / |f_GSL|): 1.4991559422183497e-15
+// max(|f - f_GSL|): 2.3841857910156250e-07 at index 2
+// max(|f - f_GSL| / |f_GSL|): 1.2724057074663479e-15
+// mean(f - f_GSL): 1.1408855549177588e-08
+// variance(f - f_GSL): 7.2112307216715587e-18
+// stddev(f - f_GSL): 2.6853734789916205e-09
 const testcase_cyl_neumann<double>
-data008[20] =
+data014[20] =
 {
-  { -124241617095379.48, 10.000000000000000, 0.25000000000000000 },
-  { -121963623349.56966, 10.000000000000000, 0.50000000000000000 },
-  { -2133501638.9057348, 10.000000000000000, 0.75000000000000000 },
-  { -121618014.27868921, 10.000000000000000, 1.0000000000000000 },
-  { -13265210.158452792, 10.000000000000000, 1.2500000000000000 },
-  { -2183993.0260864049, 10.000000000000000, 1.5000000000000000 },
-  { -478274.82386541169, 10.000000000000000, 1.7500000000000000 },
-  { -129184.54220803917, 10.000000000000000, 2.0000000000000000 },
-  { -40993.254794381690, 10.000000000000000, 2.2500000000000000 },
-  { -14782.847716021070, 10.000000000000000, 2.5000000000000000 },
-  { -5916.5330998776262, 10.000000000000000, 2.7500000000000000 },
-  { -2582.6071294842995, 10.000000000000000, 3.0000000000000000 },
-  { -1213.3423564023892, 10.000000000000000, 3.2500000000000000 },
-  { -607.27437834125760, 10.000000000000000, 3.5000000000000000 },
-  { -321.17461059752202, 10.000000000000000, 3.7500000000000000 },
-  { -178.33055590796428, 10.000000000000000, 4.0000000000000000 },
-  { -103.40496587570090, 10.000000000000000, 4.2500000000000000 },
-  { -62.345024619781434, 10.000000000000000, 4.5000000000000000 },
-  { -38.944510430296937, 10.000000000000000, 4.7500000000000000 },
-  { -25.129110095610095, 10.000000000000000, 5.0000000000000000 },
+  { -124241617095379.48, 10.000000000000000, 0.25000000000000000, 0.0 },
+  { -121963623349.56966, 10.000000000000000, 0.50000000000000000, 0.0 },
+  { -2133501638.9057348, 10.000000000000000, 0.75000000000000000, 0.0 },
+  { -121618014.27868921, 10.000000000000000, 1.0000000000000000, 0.0 },
+  { -13265210.158452792, 10.000000000000000, 1.2500000000000000, 0.0 },
+  { -2183993.0260864049, 10.000000000000000, 1.5000000000000000, 0.0 },
+  { -478274.82386541169, 10.000000000000000, 1.7500000000000000, 0.0 },
+  { -129184.54220803917, 10.000000000000000, 2.0000000000000000, 0.0 },
+  { -40993.254794381690, 10.000000000000000, 2.2500000000000000, 0.0 },
+  { -14782.847716021070, 10.000000000000000, 2.5000000000000000, 0.0 },
+  { -5916.5330998776262, 10.000000000000000, 2.7500000000000000, 0.0 },
+  { -2582.6071294842995, 10.000000000000000, 3.0000000000000000, 0.0 },
+  { -1213.3423564023892, 10.000000000000000, 3.2500000000000000, 0.0 },
+  { -607.27437834125760, 10.000000000000000, 3.5000000000000000, 0.0 },
+  { -321.17461059752202, 10.000000000000000, 3.7500000000000000, 0.0 },
+  { -178.33055590796428, 10.000000000000000, 4.0000000000000000, 0.0 },
+  { -103.40496587570090, 10.000000000000000, 4.2500000000000000, 0.0 },
+  { -62.345024619781434, 10.000000000000000, 4.5000000000000000, 0.0 },
+  { -38.944510430296937, 10.000000000000000, 4.7500000000000000, 0.0 },
+  { -25.129110095610095, 10.000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler008 = 2.5000000000000020e-13;
+const double toler014 = 2.5000000000000020e-13;
 
 // Test data for nu=20.000000000000000.
-// max(|f - f_GSL|): 6442450944.0000000
-// max(|f - f_GSL| / |f_GSL|): 1.6458221996165416e-15
+// max(|f - f_GSL|): 6442450944.0000000 at index 2
+// max(|f - f_GSL| / |f_GSL|): 1.8080382211114952e-15
+// mean(f - f_GSL): 322083865.10024977
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_neumann<double>
-data009[20] =
+data015[20] =
 {
-  { -4.4678815064152581e+34, 20.000000000000000, 0.25000000000000000 },
-  { -4.2714301215659088e+28, 20.000000000000000, 0.50000000000000000 },
-  { -1.2898357375834223e+25, 20.000000000000000, 0.75000000000000000 },
-  { -4.1139703148355065e+22, 20.000000000000000, 1.0000000000000000 },
-  { -4.7783533372148580e+20, 20.000000000000000, 1.2500000000000000 },
-  { -1.2577301772964241e+19, 20.000000000000000, 1.5000000000000000 },
-  { -5.8251041176649626e+17, 20.000000000000000, 1.7500000000000000 },
-  { -40816513889983640., 20.000000000000000, 2.0000000000000000 },
-  { -3925339868516418.5, 20.000000000000000, 2.2500000000000000 },
-  { -484776559582090.25, 20.000000000000000, 2.5000000000000000 },
-  { -73320655044814.469, 20.000000000000000, 2.7500000000000000 },
-  { -13113540041757.449, 20.000000000000000, 3.0000000000000000 },
-  { -2700669268882.7139, 20.000000000000000, 3.2500000000000000 },
-  { -627339518240.21240, 20.000000000000000, 3.5000000000000000 },
-  { -161695236802.71753, 20.000000000000000, 3.7500000000000000 },
-  { -45637199262.220100, 20.000000000000000, 4.0000000000000000 },
-  { -13953299213.925377, 20.000000000000000, 4.2500000000000000 },
-  { -4580215756.5691023, 20.000000000000000, 4.5000000000000000 },
-  { -1602110715.5159132, 20.000000000000000, 4.7500000000000000 },
-  { -593396529.69143200, 20.000000000000000, 5.0000000000000000 },
+  { -4.4678815064152581e+34, 20.000000000000000, 0.25000000000000000, 0.0 },
+  { -4.2714301215659088e+28, 20.000000000000000, 0.50000000000000000, 0.0 },
+  { -1.2898357375834223e+25, 20.000000000000000, 0.75000000000000000, 0.0 },
+  { -4.1139703148355065e+22, 20.000000000000000, 1.0000000000000000, 0.0 },
+  { -4.7783533372148580e+20, 20.000000000000000, 1.2500000000000000, 0.0 },
+  { -1.2577301772964241e+19, 20.000000000000000, 1.5000000000000000, 0.0 },
+  { -5.8251041176649626e+17, 20.000000000000000, 1.7500000000000000, 0.0 },
+  { -40816513889983640., 20.000000000000000, 2.0000000000000000, 0.0 },
+  { -3925339868516418.5, 20.000000000000000, 2.2500000000000000, 0.0 },
+  { -484776559582090.25, 20.000000000000000, 2.5000000000000000, 0.0 },
+  { -73320655044814.469, 20.000000000000000, 2.7500000000000000, 0.0 },
+  { -13113540041757.449, 20.000000000000000, 3.0000000000000000, 0.0 },
+  { -2700669268882.7139, 20.000000000000000, 3.2500000000000000, 0.0 },
+  { -627339518240.21240, 20.000000000000000, 3.5000000000000000, 0.0 },
+  { -161695236802.71753, 20.000000000000000, 3.7500000000000000, 0.0 },
+  { -45637199262.220100, 20.000000000000000, 4.0000000000000000, 0.0 },
+  { -13953299213.925377, 20.000000000000000, 4.2500000000000000, 0.0 },
+  { -4580215756.5691023, 20.000000000000000, 4.5000000000000000, 0.0 },
+  { -1602110715.5159132, 20.000000000000000, 4.7500000000000000, 0.0 },
+  { -593396529.69143200, 20.000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler009 = 2.5000000000000020e-13;
+const double toler015 = 2.5000000000000020e-13;
 
 // Test data for nu=50.000000000000000.
-// max(|f - f_GSL|): 6.4703872001161536e+68
+// max(|f - f_GSL|): 6.4703872001161536e+68 at index 2
 // max(|f - f_GSL| / |f_GSL|): 3.7730746786493403e-15
+// mean(f - f_GSL): 3.2351936000129644e+67
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_neumann<double>
-data010[20] =
+data016[20] =
 {
-  { -2.7643487471155969e+107, 50.000000000000000, 0.25000000000000000 },
-  { -2.4575848224461092e+92, 50.000000000000000, 0.50000000000000000 },
-  { -3.8604508467683829e+83, 50.000000000000000, 0.75000000000000000 },
-  { -2.1911428126053411e+77, 50.000000000000000, 1.0000000000000000 },
-  { -3.1362926828833165e+72, 50.000000000000000, 1.2500000000000000 },
-  { -3.4584216846550566e+68, 50.000000000000000, 1.5000000000000000 },
-  { -1.5607714080312795e+65, 50.000000000000000, 1.7500000000000000 },
-  { -1.9761505765184128e+62, 50.000000000000000, 2.0000000000000000 },
-  { -5.5023640499231188e+59, 50.000000000000000, 2.2500000000000000 },
-  { -2.8530384545826849e+57, 50.000000000000000, 2.5000000000000000 },
-  { -2.4467169322684809e+55, 50.000000000000000, 2.7500000000000000 },
-  { -3.1793891461005181e+53, 50.000000000000000, 3.0000000000000000 },
-  { -5.8573901231568658e+51, 50.000000000000000, 3.2500000000000000 },
-  { -1.4528262197760965e+50, 50.000000000000000, 3.5000000000000000 },
-  { -4.6566569870478635e+48, 50.000000000000000, 3.7500000000000000 },
-  { -1.8661134361400254e+47, 50.000000000000000, 4.0000000000000000 },
-  { -9.1005883612255402e+45, 50.000000000000000, 4.2500000000000000 },
-  { -5.2813777542386141e+44, 50.000000000000000, 4.5000000000000000 },
-  { -3.5795477722116469e+43, 50.000000000000000, 4.7500000000000000 },
-  { -2.7888370175838930e+42, 50.000000000000000, 5.0000000000000000 },
+  { -2.7643487471155969e+107, 50.000000000000000, 0.25000000000000000, 0.0 },
+  { -2.4575848224461092e+92, 50.000000000000000, 0.50000000000000000, 0.0 },
+  { -3.8604508467683829e+83, 50.000000000000000, 0.75000000000000000, 0.0 },
+  { -2.1911428126053411e+77, 50.000000000000000, 1.0000000000000000, 0.0 },
+  { -3.1362926828833165e+72, 50.000000000000000, 1.2500000000000000, 0.0 },
+  { -3.4584216846550566e+68, 50.000000000000000, 1.5000000000000000, 0.0 },
+  { -1.5607714080312795e+65, 50.000000000000000, 1.7500000000000000, 0.0 },
+  { -1.9761505765184128e+62, 50.000000000000000, 2.0000000000000000, 0.0 },
+  { -5.5023640499231188e+59, 50.000000000000000, 2.2500000000000000, 0.0 },
+  { -2.8530384545826849e+57, 50.000000000000000, 2.5000000000000000, 0.0 },
+  { -2.4467169322684809e+55, 50.000000000000000, 2.7500000000000000, 0.0 },
+  { -3.1793891461005181e+53, 50.000000000000000, 3.0000000000000000, 0.0 },
+  { -5.8573901231568658e+51, 50.000000000000000, 3.2500000000000000, 0.0 },
+  { -1.4528262197760965e+50, 50.000000000000000, 3.5000000000000000, 0.0 },
+  { -4.6566569870478635e+48, 50.000000000000000, 3.7500000000000000, 0.0 },
+  { -1.8661134361400254e+47, 50.000000000000000, 4.0000000000000000, 0.0 },
+  { -9.1005883612255402e+45, 50.000000000000000, 4.2500000000000000, 0.0 },
+  { -5.2813777542386141e+44, 50.000000000000000, 4.5000000000000000, 0.0 },
+  { -3.5795477722116469e+43, 50.000000000000000, 4.7500000000000000, 0.0 },
+  { -2.7888370175838930e+42, 50.000000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler010 = 2.5000000000000020e-13;
+const double toler016 = 2.5000000000000020e-13;
 
 // Test data for nu=100.00000000000000.
-// max(|f - f_GSL|): 1.6136484921850493e+233
-// max(|f - f_GSL| / |f_GSL|): 3.7090973947899002e-13
+// max(|f - f_GSL|): 1.6126781683773614e+233 at index 0
+// max(|f - f_GSL| / |f_GSL|): 3.9669044390244564e-13
+// mean(f - f_GSL): -8.0633908418868065e+231
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_neumann<double>
-data011[20] =
+data017[20] =
 {
-  { -6.0523080585856754e+245, 100.00000000000000, 0.25000000000000000 },
-  { -4.7766903780412668e+215, 100.00000000000000, 0.50000000000000000 },
-  { -1.1758283017660654e+198, 100.00000000000000, 0.75000000000000000 },
-  { -3.7752878101091316e+185, 100.00000000000000, 1.0000000000000000 },
-  { -7.7013290730008304e+175, 100.00000000000000, 1.2500000000000000 },
-  { -9.3152624794288802e+167, 100.00000000000000, 1.5000000000000000 },
-  { -1.8854163374247264e+161, 100.00000000000000, 1.7500000000000000 },
-  { -3.0008260488569689e+155, 100.00000000000000, 2.0000000000000000 },
-  { -2.3075650873777408e+150, 100.00000000000000, 2.2500000000000000 },
-  { -6.1476258561369381e+145, 100.00000000000000, 2.5000000000000000 },
-  { -4.4758816234829593e+141, 100.00000000000000, 2.7500000000000000 },
-  { -7.4747961023547846e+137, 100.00000000000000, 3.0000000000000000 },
-  { -2.5067022766900123e+134, 100.00000000000000, 3.2500000000000000 },
-  { -1.5222488313431896e+131, 100.00000000000000, 3.5000000000000000 },
-  { -1.5422392812241397e+128, 100.00000000000000, 3.7500000000000000 },
-  { -2.4400857387551062e+125, 100.00000000000000, 4.0000000000000000 },
-  { -5.7118153392422278e+122, 100.00000000000000, 4.2500000000000000 },
-  { -1.8915420905194465e+120, 100.00000000000000, 4.5000000000000000 },
-  { -8.5357945104770158e+117, 100.00000000000000, 4.7500000000000000 },
-  { -5.0848639160196196e+115, 100.00000000000000, 5.0000000000000000 },
+  { -6.0523080585856763e+245, 100.00000000000000, 0.25000000000000000, 0.0 },
+  { -4.7766903780412668e+215, 100.00000000000000, 0.50000000000000000, 0.0 },
+  { -1.1758283017660654e+198, 100.00000000000000, 0.75000000000000000, 0.0 },
+  { -3.7752878101091316e+185, 100.00000000000000, 1.0000000000000000, 0.0 },
+  { -7.7013290729995187e+175, 100.00000000000000, 1.2500000000000000, 0.0 },
+  { -9.3152624794288802e+167, 100.00000000000000, 1.5000000000000000, 0.0 },
+  { -1.8854163374247264e+161, 100.00000000000000, 1.7500000000000000, 0.0 },
+  { -3.0008260488566283e+155, 100.00000000000000, 2.0000000000000000, 0.0 },
+  { -2.3075650873777408e+150, 100.00000000000000, 2.2500000000000000, 0.0 },
+  { -6.1476258561369381e+145, 100.00000000000000, 2.5000000000000000, 0.0 },
+  { -4.4758816234829593e+141, 100.00000000000000, 2.7500000000000000, 0.0 },
+  { -7.4747961023547862e+137, 100.00000000000000, 3.0000000000000000, 0.0 },
+  { -2.5067022766901547e+134, 100.00000000000000, 3.2500000000000000, 0.0 },
+  { -1.5222488313432757e+131, 100.00000000000000, 3.5000000000000000, 0.0 },
+  { -1.5422392812241399e+128, 100.00000000000000, 3.7500000000000000, 0.0 },
+  { -2.4400857387551062e+125, 100.00000000000000, 4.0000000000000000, 0.0 },
+  { -5.7118153392422293e+122, 100.00000000000000, 4.2500000000000000, 0.0 },
+  { -1.8915420905193392e+120, 100.00000000000000, 4.5000000000000000, 0.0 },
+  { -8.5357945104770158e+117, 100.00000000000000, 4.7500000000000000, 0.0 },
+  { -5.0848639160196196e+115, 100.00000000000000, 5.0000000000000000, 0.0 },
 };
-const double toler011 = 2.5000000000000014e-11;
+const double toler017 = 2.5000000000000014e-11;
 //  cyl_neumann
 
 // Test data for nu=0.0000000000000000.
-// max(|f - f_GSL|): 7.1245093158367467e-15
-// max(|f - f_GSL| / |f_GSL|): 1.5215931554460198e-12
+// max(|f - f_GSL|): 7.1210398688847931e-15 at index 13
+// max(|f - f_GSL| / |f_GSL|): 1.5217467741391491e-12
+// mean(f - f_GSL): 7.2554809382729962e-17
+// variance(f - f_GSL): 8.8801597233792556e-32
+// stddev(f - f_GSL): 2.9799596848580446e-16
 const testcase_cyl_neumann<double>
-data012[20] =
+data018[20] =
 {
-  { -0.30851762524903359, 0.0000000000000000, 5.0000000000000000 },
-  { 0.055671167283599457, 0.0000000000000000, 10.000000000000000 },
-  { 0.20546429603891822, 0.0000000000000000, 15.000000000000000 },
-  { 0.062640596809384053, 0.0000000000000000, 20.000000000000000 },
-  { -0.12724943226800617, 0.0000000000000000, 25.000000000000000 },
-  { -0.11729573168666413, 0.0000000000000000, 30.000000000000000 },
-  { 0.045797987195155689, 0.0000000000000000, 35.000000000000000 },
-  { 0.12593641705826092, 0.0000000000000000, 40.000000000000000 },
-  { 0.027060469763313333, 0.0000000000000000, 45.000000000000000 },
-  { -0.098064995470077118, 0.0000000000000000, 50.000000000000000 },
-  { -0.077569178730412594, 0.0000000000000000, 55.000000000000000 },
-  { 0.047358952209449426, 0.0000000000000000, 60.000000000000000 },
-  { 0.097183557740181920, 0.0000000000000000, 65.000000000000000 },
-  { 0.0093096664589409992, 0.0000000000000000, 70.000000000000000 },
-  { -0.085369047647775656, 0.0000000000000000, 75.000000000000000 },
-  { -0.055620339089770016, 0.0000000000000000, 80.000000000000000 },
-  { 0.049567884951494251, 0.0000000000000000, 85.000000000000000 },
-  { 0.079776475854877751, 0.0000000000000000, 90.000000000000000 },
-  { -0.0028230995861232107, 0.0000000000000000, 95.000000000000000 },
-  { -0.077244313365083153, 0.0000000000000000, 100.00000000000000 },
+  { -0.30851762524903359, 0.0000000000000000, 5.0000000000000000, 0.0 },
+  { 0.055671167283599457, 0.0000000000000000, 10.000000000000000, 0.0 },
+  { 0.20546429603891822, 0.0000000000000000, 15.000000000000000, 0.0 },
+  { 0.062640596809384053, 0.0000000000000000, 20.000000000000000, 0.0 },
+  { -0.12724943226800617, 0.0000000000000000, 25.000000000000000, 0.0 },
+  { -0.11729573168666413, 0.0000000000000000, 30.000000000000000, 0.0 },
+  { 0.045797987195155689, 0.0000000000000000, 35.000000000000000, 0.0 },
+  { 0.12593641705826092, 0.0000000000000000, 40.000000000000000, 0.0 },
+  { 0.027060469763313333, 0.0000000000000000, 45.000000000000000, 0.0 },
+  { -0.098064995470077118, 0.0000000000000000, 50.000000000000000, 0.0 },
+  { -0.077569178730412594, 0.0000000000000000, 55.000000000000000, 0.0 },
+  { 0.047358952209449426, 0.0000000000000000, 60.000000000000000, 0.0 },
+  { 0.097183557740181920, 0.0000000000000000, 65.000000000000000, 0.0 },
+  { 0.0093096664589409992, 0.0000000000000000, 70.000000000000000, 0.0 },
+  { -0.085369047647775656, 0.0000000000000000, 75.000000000000000, 0.0 },
+  { -0.055620339089770016, 0.0000000000000000, 80.000000000000000, 0.0 },
+  { 0.049567884951494251, 0.0000000000000000, 85.000000000000000, 0.0 },
+  { 0.079776475854877751, 0.0000000000000000, 90.000000000000000, 0.0 },
+  { -0.0028230995861232107, 0.0000000000000000, 95.000000000000000, 0.0 },
+  { -0.077244313365083153, 0.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler012 = 1.0000000000000006e-10;
+const double toler018 = 1.0000000000000006e-10;
 
 // Test data for nu=0.33333333333333331.
-// max(|f - f_GSL|): 6.4392935428259079e-15
-// max(|f - f_GSL| / |f_GSL|): 4.0229312517518102e-13
+// max(|f - f_GSL|): 6.4392935428259079e-15 at index 13
+// max(|f - f_GSL| / |f_GSL|): 4.0255283668271825e-13
+// mean(f - f_GSL): 4.0124153999343550e-16
+// variance(f - f_GSL): 5.5447658140741534e-32
+// stddev(f - f_GSL): 2.3547326417396418e-16
 const testcase_cyl_neumann<double>
-data013[20] =
+data019[20] =
 {
-  { -0.18192321129343850, 0.33333333333333331, 5.0000000000000000 },
-  { 0.17020111788268760, 0.33333333333333331, 10.000000000000000 },
-  { 0.18540507541540796, 0.33333333333333331, 15.000000000000000 },
-  { -0.028777707635715043, 0.33333333333333331, 20.000000000000000 },
-  { -0.15829741864944163, 0.33333333333333331, 25.000000000000000 },
-  { -0.058645772316705209, 0.33333333333333331, 30.000000000000000 },
-  { 0.10294930308870617, 0.33333333333333331, 35.000000000000000 },
-  { 0.10547870367098922, 0.33333333333333331, 40.000000000000000 },
-  { -0.034334228816010816, 0.33333333333333331, 45.000000000000000 },
-  { -0.11283489933031279, 0.33333333333333331, 50.000000000000000 },
-  { -0.030007358986895105, 0.33333333333333331, 55.000000000000000 },
-  { 0.086699173295718121, 0.33333333333333331, 60.000000000000000 },
-  { 0.074875579668878658, 0.33333333333333331, 65.000000000000000 },
-  { -0.039323246374552680, 0.33333333333333331, 70.000000000000000 },
-  { -0.091263539574475236, 0.33333333333333331, 75.000000000000000 },
-  { -0.013358849535984318, 0.33333333333333331, 80.000000000000000 },
-  { 0.078373575537830198, 0.33333333333333331, 85.000000000000000 },
-  { 0.055812482883955940, 0.33333333333333331, 90.000000000000000 },
-  { -0.043310380106990683, 0.33333333333333331, 95.000000000000000 },
-  { -0.076900504962136559, 0.33333333333333331, 100.00000000000000 },
+  { -0.18192321129343850, 0.33333333333333331, 5.0000000000000000, 0.0 },
+  { 0.17020111788268760, 0.33333333333333331, 10.000000000000000, 0.0 },
+  { 0.18540507541540796, 0.33333333333333331, 15.000000000000000, 0.0 },
+  { -0.028777707635715043, 0.33333333333333331, 20.000000000000000, 0.0 },
+  { -0.15829741864944163, 0.33333333333333331, 25.000000000000000, 0.0 },
+  { -0.058645772316705209, 0.33333333333333331, 30.000000000000000, 0.0 },
+  { 0.10294930308870617, 0.33333333333333331, 35.000000000000000, 0.0 },
+  { 0.10547870367098922, 0.33333333333333331, 40.000000000000000, 0.0 },
+  { -0.034334228816010816, 0.33333333333333331, 45.000000000000000, 0.0 },
+  { -0.11283489933031279, 0.33333333333333331, 50.000000000000000, 0.0 },
+  { -0.030007358986895105, 0.33333333333333331, 55.000000000000000, 0.0 },
+  { 0.086699173295718121, 0.33333333333333331, 60.000000000000000, 0.0 },
+  { 0.074875579668878658, 0.33333333333333331, 65.000000000000000, 0.0 },
+  { -0.039323246374552680, 0.33333333333333331, 70.000000000000000, 0.0 },
+  { -0.091263539574475236, 0.33333333333333331, 75.000000000000000, 0.0 },
+  { -0.013358849535984318, 0.33333333333333331, 80.000000000000000, 0.0 },
+  { 0.078373575537830198, 0.33333333333333331, 85.000000000000000, 0.0 },
+  { 0.055812482883955940, 0.33333333333333331, 90.000000000000000, 0.0 },
+  { -0.043310380106990683, 0.33333333333333331, 95.000000000000000, 0.0 },
+  { -0.076900504962136559, 0.33333333333333331, 100.00000000000000, 0.0 },
 };
-const double toler013 = 2.5000000000000014e-11;
+const double toler019 = 2.5000000000000014e-11;
 
 // Test data for nu=0.50000000000000000.
-// max(|f - f_GSL|): 6.5988881026157742e-15
+// max(|f - f_GSL|): 6.5919492087118670e-15 at index 12
 // max(|f - f_GSL| / |f_GSL|): 6.0282403975230169e-13
+// mean(f - f_GSL): 4.4870791110485090e-16
+// variance(f - f_GSL): 2.2330752394717835e-31
+// stddev(f - f_GSL): 4.7255425503023288e-16
 const testcase_cyl_neumann<double>
-data014[20] =
+data020[20] =
 {
-  { -0.10121770918510846, 0.50000000000000000, 5.0000000000000000 },
-  { 0.21170886633139810, 0.50000000000000000, 10.000000000000000 },
-  { 0.15650551590730855, 0.50000000000000000, 15.000000000000000 },
-  { -0.072806904785061938, 0.50000000000000000, 20.000000000000000 },
-  { -0.15817308404205055, 0.50000000000000000, 25.000000000000000 },
-  { -0.022470290598831138, 0.50000000000000000, 30.000000000000000 },
-  { 0.12187835265849535, 0.50000000000000000, 35.000000000000000 },
-  { 0.084138655676395377, 0.50000000000000000, 40.000000000000000 },
-  { -0.062482641933003201, 0.50000000000000000, 45.000000000000000 },
-  { -0.10888475635053954, 0.50000000000000000, 50.000000000000000 },
-  { -0.0023805454010949376, 0.50000000000000000, 55.000000000000000 },
-  { 0.098104683735037918, 0.50000000000000000, 60.000000000000000 },
-  { 0.055663470218594434, 0.50000000000000000, 65.000000000000000 },
-  { -0.060396767883824871, 0.50000000000000000, 70.000000000000000 },
-  { -0.084922578922046868, 0.50000000000000000, 75.000000000000000 },
-  { 0.0098472271924441284, 0.50000000000000000, 80.000000000000000 },
-  { 0.085190643574343625, 0.50000000000000000, 85.000000000000000 },
-  { 0.037684970437156268, 0.50000000000000000, 90.000000000000000 },
-  { -0.059772904856097500, 0.50000000000000000, 95.000000000000000 },
-  { -0.068803091468728109, 0.50000000000000000, 100.00000000000000 },
+  { -0.10121770918510846, 0.50000000000000000, 5.0000000000000000, 0.0 },
+  { 0.21170886633139810, 0.50000000000000000, 10.000000000000000, 0.0 },
+  { 0.15650551590730855, 0.50000000000000000, 15.000000000000000, 0.0 },
+  { -0.072806904785061938, 0.50000000000000000, 20.000000000000000, 0.0 },
+  { -0.15817308404205055, 0.50000000000000000, 25.000000000000000, 0.0 },
+  { -0.022470290598831138, 0.50000000000000000, 30.000000000000000, 0.0 },
+  { 0.12187835265849535, 0.50000000000000000, 35.000000000000000, 0.0 },
+  { 0.084138655676395377, 0.50000000000000000, 40.000000000000000, 0.0 },
+  { -0.062482641933003201, 0.50000000000000000, 45.000000000000000, 0.0 },
+  { -0.10888475635053954, 0.50000000000000000, 50.000000000000000, 0.0 },
+  { -0.0023805454010949376, 0.50000000000000000, 55.000000000000000, 0.0 },
+  { 0.098104683735037918, 0.50000000000000000, 60.000000000000000, 0.0 },
+  { 0.055663470218594434, 0.50000000000000000, 65.000000000000000, 0.0 },
+  { -0.060396767883824871, 0.50000000000000000, 70.000000000000000, 0.0 },
+  { -0.084922578922046868, 0.50000000000000000, 75.000000000000000, 0.0 },
+  { 0.0098472271924441284, 0.50000000000000000, 80.000000000000000, 0.0 },
+  { 0.085190643574343625, 0.50000000000000000, 85.000000000000000, 0.0 },
+  { 0.037684970437156268, 0.50000000000000000, 90.000000000000000, 0.0 },
+  { -0.059772904856097500, 0.50000000000000000, 95.000000000000000, 0.0 },
+  { -0.068803091468728109, 0.50000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler014 = 5.0000000000000028e-11;
+const double toler020 = 5.0000000000000028e-11;
 
 // Test data for nu=0.66666666666666663.
-// max(|f - f_GSL|): 7.2442052356791464e-15
-// max(|f - f_GSL| / |f_GSL|): 4.1296144775547441e-13
+// max(|f - f_GSL|): 7.2372663417752392e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 4.1336890848340281e-13
+// mean(f - f_GSL): 4.6646714269016339e-16
+// variance(f - f_GSL): 4.7228390491049495e-31
+// stddev(f - f_GSL): 6.8722915021882980e-16
 const testcase_cyl_neumann<double>
-data015[20] =
+data021[20] =
 {
-  { -0.016050662643389627, 0.66666666666666663, 5.0000000000000000 },
-  { 0.23937232657540733, 0.66666666666666663, 10.000000000000000 },
-  { 0.11762106604241235, 0.66666666666666663, 15.000000000000000 },
-  { -0.11182254014899558, 0.66666666666666663, 20.000000000000000 },
-  { -0.14756582982938804, 0.66666666666666663, 25.000000000000000 },
-  { 0.015078692908077713, 0.66666666666666663, 30.000000000000000 },
-  { 0.13260911815705795, 0.66666666666666663, 35.000000000000000 },
-  { 0.057217565989652698, 0.66666666666666663, 40.000000000000000 },
-  { -0.086373755152382006, 0.66666666666666663, 45.000000000000000 },
-  { -0.097624139208051616, 0.66666666666666663, 50.000000000000000 },
-  { 0.025354902147023392, 0.66666666666666663, 55.000000000000000 },
-  { 0.10288136476351206, 0.66666666666666663, 60.000000000000000 },
-  { 0.032728379560128203, 0.66666666666666663, 65.000000000000000 },
-  { -0.077363672735747818, 0.66666666666666663, 70.000000000000000 },
-  { -0.072855870458293961, 0.66666666666666663, 75.000000000000000 },
-  { 0.032358106046953543, 0.66666666666666663, 80.000000000000000 },
-  { 0.086240651537394228, 0.66666666666666663, 85.000000000000000 },
-  { 0.017029601697285190, 0.66666666666666663, 90.000000000000000 },
-  { -0.072173520560584681, 0.66666666666666663, 95.000000000000000 },
-  { -0.056057339204073887, 0.66666666666666663, 100.00000000000000 },
+  { -0.016050662643389627, 0.66666666666666663, 5.0000000000000000, 0.0 },
+  { 0.23937232657540733, 0.66666666666666663, 10.000000000000000, 0.0 },
+  { 0.11762106604241235, 0.66666666666666663, 15.000000000000000, 0.0 },
+  { -0.11182254014899558, 0.66666666666666663, 20.000000000000000, 0.0 },
+  { -0.14756582982938804, 0.66666666666666663, 25.000000000000000, 0.0 },
+  { 0.015078692908077713, 0.66666666666666663, 30.000000000000000, 0.0 },
+  { 0.13260911815705795, 0.66666666666666663, 35.000000000000000, 0.0 },
+  { 0.057217565989652698, 0.66666666666666663, 40.000000000000000, 0.0 },
+  { -0.086373755152382006, 0.66666666666666663, 45.000000000000000, 0.0 },
+  { -0.097624139208051616, 0.66666666666666663, 50.000000000000000, 0.0 },
+  { 0.025354902147023392, 0.66666666666666663, 55.000000000000000, 0.0 },
+  { 0.10288136476351206, 0.66666666666666663, 60.000000000000000, 0.0 },
+  { 0.032728379560128203, 0.66666666666666663, 65.000000000000000, 0.0 },
+  { -0.077363672735747818, 0.66666666666666663, 70.000000000000000, 0.0 },
+  { -0.072855870458293961, 0.66666666666666663, 75.000000000000000, 0.0 },
+  { 0.032358106046953543, 0.66666666666666663, 80.000000000000000, 0.0 },
+  { 0.086240651537394228, 0.66666666666666663, 85.000000000000000, 0.0 },
+  { 0.017029601697285190, 0.66666666666666663, 90.000000000000000, 0.0 },
+  { -0.072173520560584681, 0.66666666666666663, 95.000000000000000, 0.0 },
+  { -0.056057339204073887, 0.66666666666666663, 100.00000000000000, 0.0 },
 };
-const double toler015 = 2.5000000000000014e-11;
+const double toler021 = 2.5000000000000014e-11;
 
 // Test data for nu=1.0000000000000000.
-// max(|f - f_GSL|): 7.6640083168655337e-15
-// max(|f - f_GSL| / |f_GSL|): 4.2719333494531163e-13
+// max(|f - f_GSL|): 7.6570694229616265e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 4.2680655963073912e-13
+// mean(f - f_GSL): 4.9712838012805347e-16
+// variance(f - f_GSL): 8.8456847510770884e-31
+// stddev(f - f_GSL): 9.4051500525388153e-16
 const testcase_cyl_neumann<double>
-data016[20] =
+data022[20] =
 {
-  { 0.14786314339122700, 1.0000000000000000, 5.0000000000000000 },
-  { 0.24901542420695386, 1.0000000000000000, 10.000000000000000 },
-  { 0.021073628036873522, 1.0000000000000000, 15.000000000000000 },
-  { -0.16551161436252115, 1.0000000000000000, 20.000000000000000 },
-  { -0.098829964783237412, 1.0000000000000000, 25.000000000000000 },
-  { 0.084425570661747135, 1.0000000000000000, 30.000000000000000 },
-  { 0.12751273354559009, 1.0000000000000000, 35.000000000000000 },
-  { -0.0057935058215497536, 1.0000000000000000, 40.000000000000000 },
-  { -0.11552517964639945, 1.0000000000000000, 45.000000000000000 },
-  { -0.056795668562014692, 1.0000000000000000, 50.000000000000000 },
-  { 0.073846265432577926, 1.0000000000000000, 55.000000000000000 },
-  { 0.091869609369866892, 1.0000000000000000, 60.000000000000000 },
-  { -0.017940374275377362, 1.0000000000000000, 65.000000000000000 },
-  { -0.094844652625716230, 1.0000000000000000, 70.000000000000000 },
-  { -0.035213785160580421, 1.0000000000000000, 75.000000000000000 },
-  { 0.069395913784588037, 1.0000000000000000, 80.000000000000000 },
-  { 0.071233187582749768, 1.0000000000000000, 85.000000000000000 },
-  { -0.026187238607768244, 1.0000000000000000, 90.000000000000000 },
-  { -0.081827958724501215, 1.0000000000000000, 95.000000000000000 },
-  { -0.020372312002759834, 1.0000000000000000, 100.00000000000000 },
+  { 0.14786314339122700, 1.0000000000000000, 5.0000000000000000, 0.0 },
+  { 0.24901542420695386, 1.0000000000000000, 10.000000000000000, 0.0 },
+  { 0.021073628036873522, 1.0000000000000000, 15.000000000000000, 0.0 },
+  { -0.16551161436252115, 1.0000000000000000, 20.000000000000000, 0.0 },
+  { -0.098829964783237412, 1.0000000000000000, 25.000000000000000, 0.0 },
+  { 0.084425570661747135, 1.0000000000000000, 30.000000000000000, 0.0 },
+  { 0.12751273354559009, 1.0000000000000000, 35.000000000000000, 0.0 },
+  { -0.0057935058215497536, 1.0000000000000000, 40.000000000000000, 0.0 },
+  { -0.11552517964639945, 1.0000000000000000, 45.000000000000000, 0.0 },
+  { -0.056795668562014692, 1.0000000000000000, 50.000000000000000, 0.0 },
+  { 0.073846265432577926, 1.0000000000000000, 55.000000000000000, 0.0 },
+  { 0.091869609369866892, 1.0000000000000000, 60.000000000000000, 0.0 },
+  { -0.017940374275377362, 1.0000000000000000, 65.000000000000000, 0.0 },
+  { -0.094844652625716230, 1.0000000000000000, 70.000000000000000, 0.0 },
+  { -0.035213785160580421, 1.0000000000000000, 75.000000000000000, 0.0 },
+  { 0.069395913784588037, 1.0000000000000000, 80.000000000000000, 0.0 },
+  { 0.071233187582749768, 1.0000000000000000, 85.000000000000000, 0.0 },
+  { -0.026187238607768244, 1.0000000000000000, 90.000000000000000, 0.0 },
+  { -0.081827958724501215, 1.0000000000000000, 95.000000000000000, 0.0 },
+  { -0.020372312002759834, 1.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler016 = 2.5000000000000014e-11;
+const double toler022 = 2.5000000000000014e-11;
 
 // Test data for nu=2.0000000000000000.
-// max(|f - f_GSL|): 7.1193051454088163e-15
-// max(|f - f_GSL| / |f_GSL|): 3.9371586401654762e-12
+// max(|f - f_GSL|): 7.1210398688847931e-15 at index 13
+// max(|f - f_GSL| / |f_GSL|): 3.9367645301914862e-12
+// mean(f - f_GSL): -6.4293188828390413e-17
+// variance(f - f_GSL): 1.0170794505214399e-31
+// stddev(f - f_GSL): 3.1891683093268064e-16
 const testcase_cyl_neumann<double>
-data017[20] =
+data023[20] =
 {
-  { 0.36766288260552438, 2.0000000000000000, 5.0000000000000000 },
-  { -0.0058680824422086830, 2.0000000000000000, 10.000000000000000 },
-  { -0.20265447896733507, 2.0000000000000000, 15.000000000000000 },
-  { -0.079191758245636165, 2.0000000000000000, 20.000000000000000 },
-  { 0.11934303508534717, 2.0000000000000000, 25.000000000000000 },
-  { 0.12292410306411394, 2.0000000000000000, 30.000000000000000 },
-  { -0.038511545278264829, 2.0000000000000000, 35.000000000000000 },
-  { -0.12622609234933840, 2.0000000000000000, 40.000000000000000 },
-  { -0.032194922192042195, 2.0000000000000000, 45.000000000000000 },
-  { 0.095793168727596537, 2.0000000000000000, 50.000000000000000 },
-  { 0.080254497473415426, 2.0000000000000000, 55.000000000000000 },
-  { -0.044296631897120527, 2.0000000000000000, 60.000000000000000 },
-  { -0.097735569256347382, 2.0000000000000000, 65.000000000000000 },
-  { -0.012019513676818605, 2.0000000000000000, 70.000000000000000 },
-  { 0.084430013376826846, 2.0000000000000000, 75.000000000000000 },
-  { 0.057355236934384719, 2.0000000000000000, 80.000000000000000 },
-  { -0.047891809949547198, 2.0000000000000000, 85.000000000000000 },
-  { -0.080358414490605934, 2.0000000000000000, 90.000000000000000 },
-  { 0.0011004057182389746, 2.0000000000000000, 95.000000000000000 },
-  { 0.076836867125027963, 2.0000000000000000, 100.00000000000000 },
+  { 0.36766288260552438, 2.0000000000000000, 5.0000000000000000, 0.0 },
+  { -0.0058680824422086830, 2.0000000000000000, 10.000000000000000, 0.0 },
+  { -0.20265447896733507, 2.0000000000000000, 15.000000000000000, 0.0 },
+  { -0.079191758245636165, 2.0000000000000000, 20.000000000000000, 0.0 },
+  { 0.11934303508534717, 2.0000000000000000, 25.000000000000000, 0.0 },
+  { 0.12292410306411394, 2.0000000000000000, 30.000000000000000, 0.0 },
+  { -0.038511545278264829, 2.0000000000000000, 35.000000000000000, 0.0 },
+  { -0.12622609234933840, 2.0000000000000000, 40.000000000000000, 0.0 },
+  { -0.032194922192042195, 2.0000000000000000, 45.000000000000000, 0.0 },
+  { 0.095793168727596537, 2.0000000000000000, 50.000000000000000, 0.0 },
+  { 0.080254497473415426, 2.0000000000000000, 55.000000000000000, 0.0 },
+  { -0.044296631897120527, 2.0000000000000000, 60.000000000000000, 0.0 },
+  { -0.097735569256347382, 2.0000000000000000, 65.000000000000000, 0.0 },
+  { -0.012019513676818605, 2.0000000000000000, 70.000000000000000, 0.0 },
+  { 0.084430013376826846, 2.0000000000000000, 75.000000000000000, 0.0 },
+  { 0.057355236934384719, 2.0000000000000000, 80.000000000000000, 0.0 },
+  { -0.047891809949547198, 2.0000000000000000, 85.000000000000000, 0.0 },
+  { -0.080358414490605934, 2.0000000000000000, 90.000000000000000, 0.0 },
+  { 0.0011004057182389746, 2.0000000000000000, 95.000000000000000, 0.0 },
+  { 0.076836867125027963, 2.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler017 = 2.5000000000000017e-10;
+const double toler023 = 2.5000000000000017e-10;
 
 // Test data for nu=5.0000000000000000.
-// max(|f - f_GSL|): 7.8097792989562098e-15
-// max(|f - f_GSL| / |f_GSL|): 3.2731037832632215e-11
+// max(|f - f_GSL|): 7.8125169094417357e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 3.2742511246789352e-11
+// mean(f - f_GSL): 4.9826543715644767e-16
+// variance(f - f_GSL): 8.7640351124736941e-31
+// stddev(f - f_GSL): 9.3616425441658967e-16
 const testcase_cyl_neumann<double>
-data018[20] =
+data024[20] =
 {
-  { -0.45369482249110193, 5.0000000000000000, 5.0000000000000000 },
-  { 0.13540304768936234, 5.0000000000000000, 10.000000000000000 },
-  { 0.16717271575940015, 5.0000000000000000, 15.000000000000000 },
-  { -0.10003576788953220, 5.0000000000000000, 20.000000000000000 },
-  { -0.14705799311372267, 5.0000000000000000, 25.000000000000000 },
-  { 0.031627359289264301, 5.0000000000000000, 30.000000000000000 },
-  { 0.13554781474770028, 5.0000000000000000, 35.000000000000000 },
-  { 0.031869448780850247, 5.0000000000000000, 40.000000000000000 },
-  { -0.10426932700176872, 5.0000000000000000, 45.000000000000000 },
-  { -0.078548413913081594, 5.0000000000000000, 50.000000000000000 },
-  { 0.055257033062858375, 5.0000000000000000, 55.000000000000000 },
-  { 0.099464632840450887, 5.0000000000000000, 60.000000000000000 },
-  { 0.00023860469499595305, 5.0000000000000000, 65.000000000000000 },
-  { -0.091861802216406052, 5.0000000000000000, 70.000000000000000 },
-  { -0.048383671296970042, 5.0000000000000000, 75.000000000000000 },
-  { 0.060293667104896316, 5.0000000000000000, 80.000000000000000 },
-  { 0.077506166682733996, 5.0000000000000000, 85.000000000000000 },
-  { -0.015338764062239767, 5.0000000000000000, 90.000000000000000 },
-  { -0.081531504045514361, 5.0000000000000000, 95.000000000000000 },
-  { -0.029480196281661937, 5.0000000000000000, 100.00000000000000 },
+  { -0.45369482249110193, 5.0000000000000000, 5.0000000000000000, 0.0 },
+  { 0.13540304768936234, 5.0000000000000000, 10.000000000000000, 0.0 },
+  { 0.16717271575940015, 5.0000000000000000, 15.000000000000000, 0.0 },
+  { -0.10003576788953220, 5.0000000000000000, 20.000000000000000, 0.0 },
+  { -0.14705799311372267, 5.0000000000000000, 25.000000000000000, 0.0 },
+  { 0.031627359289264301, 5.0000000000000000, 30.000000000000000, 0.0 },
+  { 0.13554781474770028, 5.0000000000000000, 35.000000000000000, 0.0 },
+  { 0.031869448780850247, 5.0000000000000000, 40.000000000000000, 0.0 },
+  { -0.10426932700176872, 5.0000000000000000, 45.000000000000000, 0.0 },
+  { -0.078548413913081594, 5.0000000000000000, 50.000000000000000, 0.0 },
+  { 0.055257033062858375, 5.0000000000000000, 55.000000000000000, 0.0 },
+  { 0.099464632840450887, 5.0000000000000000, 60.000000000000000, 0.0 },
+  { 0.00023860469499595305, 5.0000000000000000, 65.000000000000000, 0.0 },
+  { -0.091861802216406052, 5.0000000000000000, 70.000000000000000, 0.0 },
+  { -0.048383671296970042, 5.0000000000000000, 75.000000000000000, 0.0 },
+  { 0.060293667104896316, 5.0000000000000000, 80.000000000000000, 0.0 },
+  { 0.077506166682733996, 5.0000000000000000, 85.000000000000000, 0.0 },
+  { -0.015338764062239767, 5.0000000000000000, 90.000000000000000, 0.0 },
+  { -0.081531504045514361, 5.0000000000000000, 95.000000000000000, 0.0 },
+  { -0.029480196281661937, 5.0000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler018 = 2.5000000000000013e-09;
+const double toler024 = 2.5000000000000013e-09;
 
 // Test data for nu=10.000000000000000.
-// max(|f - f_GSL|): 1.7763568394002505e-14
-// max(|f - f_GSL| / |f_GSL|): 2.7466153115234563e-12
+// max(|f - f_GSL|): 3.1974423109204508e-14 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.7474477272995600e-12
+// mean(f - f_GSL): -1.4525707026091795e-15
+// variance(f - f_GSL): 1.6326443279890062e-30
+// stddev(f - f_GSL): 1.2777497125763739e-15
 const testcase_cyl_neumann<double>
-data019[20] =
+data025[20] =
 {
-  { -25.129110095610095, 10.000000000000000, 5.0000000000000000 },
-  { -0.35981415218340279, 10.000000000000000, 10.000000000000000 },
-  { 0.21997141360195577, 10.000000000000000, 15.000000000000000 },
-  { -0.043894653515658105, 10.000000000000000, 20.000000000000000 },
-  { -0.14871839049980651, 10.000000000000000, 25.000000000000000 },
-  { 0.075056702122397012, 10.000000000000000, 30.000000000000000 },
-  { 0.12222473135000546, 10.000000000000000, 35.000000000000000 },
-  { -0.046723877232677985, 10.000000000000000, 40.000000000000000 },
-  { -0.11739339009322181, 10.000000000000000, 45.000000000000000 },
-  { 0.0057238971820535930, 10.000000000000000, 50.000000000000000 },
-  { 0.10733910125831631, 10.000000000000000, 55.000000000000000 },
-  { 0.036290350559545478, 10.000000000000000, 60.000000000000000 },
-  { -0.083239127691715667, 10.000000000000000, 65.000000000000000 },
-  { -0.069639384138314858, 10.000000000000000, 70.000000000000000 },
-  { 0.045798335061325066, 10.000000000000000, 75.000000000000000 },
-  { 0.086269195064844456, 10.000000000000000, 80.000000000000000 },
-  { -0.0018234674126248740, 10.000000000000000, 85.000000000000000 },
-  { -0.082067762371231284, 10.000000000000000, 90.000000000000000 },
-  { -0.038798074754578089, 10.000000000000000, 95.000000000000000 },
-  { 0.058331574236414913, 10.000000000000000, 100.00000000000000 },
+  { -25.129110095610095, 10.000000000000000, 5.0000000000000000, 0.0 },
+  { -0.35981415218340279, 10.000000000000000, 10.000000000000000, 0.0 },
+  { 0.21997141360195577, 10.000000000000000, 15.000000000000000, 0.0 },
+  { -0.043894653515658105, 10.000000000000000, 20.000000000000000, 0.0 },
+  { -0.14871839049980651, 10.000000000000000, 25.000000000000000, 0.0 },
+  { 0.075056702122397012, 10.000000000000000, 30.000000000000000, 0.0 },
+  { 0.12222473135000546, 10.000000000000000, 35.000000000000000, 0.0 },
+  { -0.046723877232677985, 10.000000000000000, 40.000000000000000, 0.0 },
+  { -0.11739339009322181, 10.000000000000000, 45.000000000000000, 0.0 },
+  { 0.0057238971820535930, 10.000000000000000, 50.000000000000000, 0.0 },
+  { 0.10733910125831631, 10.000000000000000, 55.000000000000000, 0.0 },
+  { 0.036290350559545478, 10.000000000000000, 60.000000000000000, 0.0 },
+  { -0.083239127691715667, 10.000000000000000, 65.000000000000000, 0.0 },
+  { -0.069639384138314858, 10.000000000000000, 70.000000000000000, 0.0 },
+  { 0.045798335061325066, 10.000000000000000, 75.000000000000000, 0.0 },
+  { 0.086269195064844456, 10.000000000000000, 80.000000000000000, 0.0 },
+  { -0.0018234674126248740, 10.000000000000000, 85.000000000000000, 0.0 },
+  { -0.082067762371231284, 10.000000000000000, 90.000000000000000, 0.0 },
+  { -0.038798074754578089, 10.000000000000000, 95.000000000000000, 0.0 },
+  { 0.058331574236414913, 10.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler019 = 2.5000000000000017e-10;
+const double toler025 = 2.5000000000000017e-10;
 
 // Test data for nu=20.000000000000000.
-// max(|f - f_GSL|): 7.1525573730468750e-07
-// max(|f - f_GSL| / |f_GSL|): 1.7017552833615218e-12
+// max(|f - f_GSL|): 1.0728836059570312e-06 at index 0
+// max(|f - f_GSL| / |f_GSL|): 1.7026122670117101e-12
+// mean(f - f_GSL): -5.3644294743674170e-08
+// variance(f - f_GSL): 1.5942991469572787e-16
+// stddev(f - f_GSL): 1.2626555931675426e-08
 const testcase_cyl_neumann<double>
-data020[20] =
+data026[20] =
 {
-  { -593396529.69143200, 20.000000000000000, 5.0000000000000000 },
-  { -1597.4838482696259, 20.000000000000000, 10.000000000000000 },
-  { -3.3087330924737621, 20.000000000000000, 15.000000000000000 },
-  { -0.28548945860020319, 20.000000000000000, 20.000000000000000 },
-  { 0.19804074776289243, 20.000000000000000, 25.000000000000000 },
-  { -0.16848153948742683, 20.000000000000000, 30.000000000000000 },
-  { 0.10102784152594022, 20.000000000000000, 35.000000000000000 },
-  { 0.045161820565805755, 20.000000000000000, 40.000000000000000 },
-  { -0.12556489308015448, 20.000000000000000, 45.000000000000000 },
-  { 0.016442633948115834, 20.000000000000000, 50.000000000000000 },
-  { 0.10853448778255181, 20.000000000000000, 55.000000000000000 },
-  { -0.026721408520664701, 20.000000000000000, 60.000000000000000 },
-  { -0.098780425256324175, 20.000000000000000, 65.000000000000000 },
-  { 0.016201957786018233, 20.000000000000000, 70.000000000000000 },
-  { 0.093591198265063721, 20.000000000000000, 75.000000000000000 },
-  { 0.0040484400737296200, 20.000000000000000, 80.000000000000000 },
-  { -0.086314929459920531, 20.000000000000000, 85.000000000000000 },
-  { -0.028274110097231530, 20.000000000000000, 90.000000000000000 },
-  { 0.072349520791638741, 20.000000000000000, 95.000000000000000 },
-  { 0.051247973076188474, 20.000000000000000, 100.00000000000000 },
+  { -593396529.69143200, 20.000000000000000, 5.0000000000000000, 0.0 },
+  { -1597.4838482696259, 20.000000000000000, 10.000000000000000, 0.0 },
+  { -3.3087330924737621, 20.000000000000000, 15.000000000000000, 0.0 },
+  { -0.28548945860020319, 20.000000000000000, 20.000000000000000, 0.0 },
+  { 0.19804074776289243, 20.000000000000000, 25.000000000000000, 0.0 },
+  { -0.16848153948742683, 20.000000000000000, 30.000000000000000, 0.0 },
+  { 0.10102784152594022, 20.000000000000000, 35.000000000000000, 0.0 },
+  { 0.045161820565805755, 20.000000000000000, 40.000000000000000, 0.0 },
+  { -0.12556489308015448, 20.000000000000000, 45.000000000000000, 0.0 },
+  { 0.016442633948115834, 20.000000000000000, 50.000000000000000, 0.0 },
+  { 0.10853448778255181, 20.000000000000000, 55.000000000000000, 0.0 },
+  { -0.026721408520664701, 20.000000000000000, 60.000000000000000, 0.0 },
+  { -0.098780425256324175, 20.000000000000000, 65.000000000000000, 0.0 },
+  { 0.016201957786018233, 20.000000000000000, 70.000000000000000, 0.0 },
+  { 0.093591198265063721, 20.000000000000000, 75.000000000000000, 0.0 },
+  { 0.0040484400737296200, 20.000000000000000, 80.000000000000000, 0.0 },
+  { -0.086314929459920531, 20.000000000000000, 85.000000000000000, 0.0 },
+  { -0.028274110097231530, 20.000000000000000, 90.000000000000000, 0.0 },
+  { 0.072349520791638741, 20.000000000000000, 95.000000000000000, 0.0 },
+  { 0.051247973076188474, 20.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler020 = 1.0000000000000006e-10;
+const double toler026 = 1.0000000000000006e-10;
 
 // Test data for nu=50.000000000000000.
-// max(|f - f_GSL|): 1.0522490333925732e+28
-// max(|f - f_GSL| / |f_GSL|): 2.6658726302692481e-12
+// max(|f - f_GSL|): 1.0522490333925732e+28 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.6670435417133106e-12
+// mean(f - f_GSL): -5.2612451669628722e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_neumann<double>
-data021[20] =
+data027[20] =
 {
-  { -2.7888370175838930e+42, 50.000000000000000, 5.0000000000000000 },
-  { -3.6410665018007421e+27, 50.000000000000000, 10.000000000000000 },
-  { -1.0929732912175415e+19, 50.000000000000000, 15.000000000000000 },
-  { -15606426801663.734, 50.000000000000000, 20.000000000000000 },
-  { -753573251.44662738, 50.000000000000000, 25.000000000000000 },
-  { -386759.32602734759, 50.000000000000000, 30.000000000000000 },
-  { -1172.8690492895323, 50.000000000000000, 35.000000000000000 },
-  { -15.615608873419944, 50.000000000000000, 40.000000000000000 },
-  { -0.87058346204176895, 50.000000000000000, 45.000000000000000 },
-  { -0.21031655464397747, 50.000000000000000, 50.000000000000000 },
-  { 0.093048240412999389, 50.000000000000000, 55.000000000000000 },
-  { 0.0086417699626744754, 50.000000000000000, 60.000000000000000 },
-  { -0.025019788459222037, 50.000000000000000, 65.000000000000000 },
-  { -0.0014815155191909152, 50.000000000000000, 70.000000000000000 },
-  { 0.050335774732164121, 50.000000000000000, 75.000000000000000 },
-  { -0.092924250967987232, 50.000000000000000, 80.000000000000000 },
-  { 0.087332463030205698, 50.000000000000000, 85.000000000000000 },
-  { -0.016164237701651860, 50.000000000000000, 90.000000000000000 },
-  { -0.068897613820457934, 50.000000000000000, 95.000000000000000 },
-  { 0.076505263944803045, 50.000000000000000, 100.00000000000000 },
+  { -2.7888370175838930e+42, 50.000000000000000, 5.0000000000000000, 0.0 },
+  { -3.6410665018007421e+27, 50.000000000000000, 10.000000000000000, 0.0 },
+  { -1.0929732912175415e+19, 50.000000000000000, 15.000000000000000, 0.0 },
+  { -15606426801663.734, 50.000000000000000, 20.000000000000000, 0.0 },
+  { -753573251.44662738, 50.000000000000000, 25.000000000000000, 0.0 },
+  { -386759.32602734759, 50.000000000000000, 30.000000000000000, 0.0 },
+  { -1172.8690492895323, 50.000000000000000, 35.000000000000000, 0.0 },
+  { -15.615608873419944, 50.000000000000000, 40.000000000000000, 0.0 },
+  { -0.87058346204176895, 50.000000000000000, 45.000000000000000, 0.0 },
+  { -0.21031655464397747, 50.000000000000000, 50.000000000000000, 0.0 },
+  { 0.093048240412999389, 50.000000000000000, 55.000000000000000, 0.0 },
+  { 0.0086417699626744754, 50.000000000000000, 60.000000000000000, 0.0 },
+  { -0.025019788459222037, 50.000000000000000, 65.000000000000000, 0.0 },
+  { -0.0014815155191909152, 50.000000000000000, 70.000000000000000, 0.0 },
+  { 0.050335774732164121, 50.000000000000000, 75.000000000000000, 0.0 },
+  { -0.092924250967987232, 50.000000000000000, 80.000000000000000, 0.0 },
+  { 0.087332463030205698, 50.000000000000000, 85.000000000000000, 0.0 },
+  { -0.016164237701651860, 50.000000000000000, 90.000000000000000, 0.0 },
+  { -0.068897613820457934, 50.000000000000000, 95.000000000000000, 0.0 },
+  { 0.076505263944803045, 50.000000000000000, 100.00000000000000, 0.0 },
 };
-const double toler021 = 2.5000000000000017e-10;
+const double toler027 = 2.5000000000000017e-10;
 
 // Test data for nu=100.00000000000000.
-// max(|f - f_GSL|): 6.3342780989716025e+102
-// max(|f - f_GSL| / |f_GSL|): 1.2681517765786818e-13
+// max(|f - f_GSL|): 6.3342780989716025e+102 at index 0
+// max(|f - f_GSL| / |f_GSL|): 1.2524955818061054e-13
+// mean(f - f_GSL): -3.1671390494858015e+101
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_cyl_neumann<double>
-data022[20] =
+data028[20] =
 {
-  { -5.0848639160196196e+115, 100.00000000000000, 5.0000000000000000 },
-  { -4.8491482711800252e+85, 100.00000000000000, 10.000000000000000 },
-  { -1.6375955323195320e+68, 100.00000000000000, 15.000000000000000 },
-  { -8.2002648144679126e+55, 100.00000000000000, 20.000000000000000 },
-  { -2.9712216432562368e+46, 100.00000000000000, 25.000000000000000 },
-  { -7.2875284708240751e+38, 100.00000000000000, 30.000000000000000 },
-  { -3.4251079902108953e+32, 100.00000000000000, 35.000000000000000 },
-  { -1.4552439438101802e+27, 100.00000000000000, 40.000000000000000 },
-  { -3.4506612476220073e+22, 100.00000000000000, 45.000000000000000 },
-  { -3.2938001882025953e+18, 100.00000000000000, 50.000000000000000 },
-  { -1005686182055527.4, 100.00000000000000, 55.000000000000000 },
-  { -831892881402.11377, 100.00000000000000, 60.000000000000000 },
-  { -1650863778.0598330, 100.00000000000000, 65.000000000000000 },
-  { -7192614.1976097794, 100.00000000000000, 70.000000000000000 },
-  { -64639.072261231595, 100.00000000000000, 75.000000000000000 },
-  { -1152.5905185698466, 100.00000000000000, 80.000000000000000 },
-  { -40.250761402101560, 100.00000000000000, 85.000000000000000 },
-  { -2.8307771387185459, 100.00000000000000, 90.000000000000000 },
-  { -0.45762200495904848, 100.00000000000000, 95.000000000000000 },
-  { -0.16692141141757652, 100.00000000000000, 100.00000000000000 },
+  { -5.0848639160196196e+115, 100.00000000000000, 5.0000000000000000, 0.0 },
+  { -4.8491482711800252e+85, 100.00000000000000, 10.000000000000000, 0.0 },
+  { -1.6375955323195320e+68, 100.00000000000000, 15.000000000000000, 0.0 },
+  { -8.2002648144679115e+55, 100.00000000000000, 20.000000000000000, 0.0 },
+  { -2.9712216432562368e+46, 100.00000000000000, 25.000000000000000, 0.0 },
+  { -7.2875284708240751e+38, 100.00000000000000, 30.000000000000000, 0.0 },
+  { -3.4251079902107980e+32, 100.00000000000000, 35.000000000000000, 0.0 },
+  { -1.4552439438102214e+27, 100.00000000000000, 40.000000000000000, 0.0 },
+  { -3.4506612476220073e+22, 100.00000000000000, 45.000000000000000, 0.0 },
+  { -3.2938001882025477e+18, 100.00000000000000, 50.000000000000000, 0.0 },
+  { -1005686182055520.4, 100.00000000000000, 55.000000000000000, 0.0 },
+  { -831892881402.09033, 100.00000000000000, 60.000000000000000, 0.0 },
+  { -1650863778.0598392, 100.00000000000000, 65.000000000000000, 0.0 },
+  { -7192614.1976097794, 100.00000000000000, 70.000000000000000, 0.0 },
+  { -64639.072261231595, 100.00000000000000, 75.000000000000000, 0.0 },
+  { -1152.5905185698466, 100.00000000000000, 80.000000000000000, 0.0 },
+  { -40.250761402101489, 100.00000000000000, 85.000000000000000, 0.0 },
+  { -2.8307771387185294, 100.00000000000000, 90.000000000000000, 0.0 },
+  { -0.45762200495904848, 100.00000000000000, 95.000000000000000, 0.0 },
+  { -0.16692141141757652, 100.00000000000000, 100.00000000000000, 0.0 },
 };
-const double toler022 = 1.0000000000000006e-11;
+const double toler028 = 1.0000000000000006e-11;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_cyl_neumann<Tp> (&data)[Num], Tp toler)
+  test(const testcase_cyl_neumann<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::cyl_neumann(data[i].nu, data[i].x);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::cyl_neumann(data[i].nu, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
@@ -692,12 +772,6 @@ template<typename Tp, unsigned int Num>
 int
 main()
 {
-  test(data001, toler001);
-  test(data002, toler002);
-  test(data003, toler003);
-  test(data004, toler004);
-  test(data005, toler005);
-  test(data006, toler006);
   test(data007, toler007);
   test(data008, toler008);
   test(data009, toler009);
@@ -714,5 +788,11 @@ main()
   test(data020, toler020);
   test(data021, toler021);
   test(data022, toler022);
+  test(data023, toler023);
+  test(data024, toler024);
+  test(data025, toler025);
+  test(data026, toler026);
+  test(data027, toler027);
+  test(data028, toler028);
   return 0;
 }
index 07838eb..8c5e476 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for k=-0.90000000000000002.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3381508715713370e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 5.7842011620951154e-16
+// mean(f - f_Boost): 5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
 const testcase_ellint_1<double>
 data001[10] =
 {
-  { 0.0000000000000000, -0.90000000000000002, 0.0000000000000000 },
-  { 0.17525427376115024, -0.90000000000000002, 0.17453292519943295 },
-  { 0.35492464591297446, -0.90000000000000002, 0.34906585039886590 },
-  { 0.54388221416157112, -0.90000000000000002, 0.52359877559829882 },
-  { 0.74797400423532490, -0.90000000000000002, 0.69813170079773179 },
-  { 0.97463898451966458, -0.90000000000000002, 0.87266462599716477 },
-  { 1.2334463254523440, -0.90000000000000002, 1.0471975511965976 },
-  { 1.5355247765594913, -0.90000000000000002, 1.2217304763960306 },
-  { 1.8882928567775121, -0.90000000000000002, 1.3962634015954636 },
-  { 2.2805491384227703, -0.90000000000000002, 1.5707963267948966 },
+  { 0.0000000000000000, -0.90000000000000002, 0.0000000000000000, 0.0 },
+  { 0.17525427376115027, -0.90000000000000002, 0.17453292519943295, 0.0 },
+  { 0.35492464591297446, -0.90000000000000002, 0.34906585039886590, 0.0 },
+  { 0.54388221416157123, -0.90000000000000002, 0.52359877559829882, 0.0 },
+  { 0.74797400423532512, -0.90000000000000002, 0.69813170079773179, 0.0 },
+  { 0.97463898451966446, -0.90000000000000002, 0.87266462599716477, 0.0 },
+  { 1.2334463254523438, -0.90000000000000002, 1.0471975511965976, 0.0 },
+  { 1.5355247765594913, -0.90000000000000002, 1.2217304763960306, 0.0 },
+  { 1.8882928567775126, -0.90000000000000002, 1.3962634015954636, 0.0 },
+  { 2.2805491384227703, -0.90000000000000002, 1.5707963267948966, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1175183168766718e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.2032670495747184e-16
+// mean(f - f_Boost): 1.9428902930940239e-16
+// variance(f - f_Boost): 2.7486111305082033e-32
+// stddev(f - f_Boost): 1.6578935823834422e-16
 const testcase_ellint_1<double>
 data002[10] =
 {
-  { 0.0000000000000000, -0.80000000000000004, 0.0000000000000000 },
-  { 0.17510154241338899, -0.80000000000000004, 0.17453292519943295 },
-  { 0.35365068839779390, -0.80000000000000004, 0.34906585039886590 },
-  { 0.53926804409084550, -0.80000000000000004, 0.52359877559829882 },
-  { 0.73587926028070361, -0.80000000000000004, 0.69813170079773179 },
-  { 0.94770942970071170, -0.80000000000000004, 0.87266462599716477 },
-  { 1.1789022995388236, -0.80000000000000004, 1.0471975511965976 },
-  { 1.4323027881876009, -0.80000000000000004, 1.2217304763960306 },
-  { 1.7069629739121674, -0.80000000000000004, 1.3962634015954636 },
-  { 1.9953027776647296, -0.80000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, -0.80000000000000004, 0.0000000000000000, 0.0 },
+  { 0.17510154241338899, -0.80000000000000004, 0.17453292519943295, 0.0 },
+  { 0.35365068839779396, -0.80000000000000004, 0.34906585039886590, 0.0 },
+  { 0.53926804409084550, -0.80000000000000004, 0.52359877559829882, 0.0 },
+  { 0.73587926028070372, -0.80000000000000004, 0.69813170079773179, 0.0 },
+  { 0.94770942970071170, -0.80000000000000004, 0.87266462599716477, 0.0 },
+  { 1.1789022995388236, -0.80000000000000004, 1.0471975511965976, 0.0 },
+  { 1.4323027881876012, -0.80000000000000004, 1.2217304763960306, 0.0 },
+  { 1.7069629739121677, -0.80000000000000004, 1.3962634015954636, 0.0 },
+  { 1.9953027776647294, -0.80000000000000004, 1.5707963267948966, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.5930208052157665e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.5425633303580569e-16
+// mean(f - f_Boost): 3.3306690738754695e-17
+// variance(f - f_Boost): 2.8136647641852830e-32
+// stddev(f - f_Boost): 1.6773982127644239e-16
 const testcase_ellint_1<double>
 data003[10] =
 {
-  { 0.0000000000000000, -0.69999999999999996, 0.0000000000000000 },
-  { 0.17496737466916723, -0.69999999999999996, 0.17453292519943295 },
-  { 0.35254687535677925, -0.69999999999999996, 0.34906585039886590 },
-  { 0.53536740275997119, -0.69999999999999996, 0.52359877559829882 },
-  { 0.72603797651684454, -0.69999999999999996, 0.69813170079773179 },
-  { 0.92698296348313458, -0.69999999999999996, 0.87266462599716477 },
-  { 1.1400447527693316, -0.69999999999999996, 1.0471975511965976 },
-  { 1.3657668117194073, -0.69999999999999996, 1.2217304763960306 },
-  { 1.6024686895959159, -0.69999999999999996, 1.3962634015954636 },
-  { 1.8456939983747236, -0.69999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, -0.69999999999999996, 0.0000000000000000, 0.0 },
+  { 0.17496737466916723, -0.69999999999999996, 0.17453292519943295, 0.0 },
+  { 0.35254687535677931, -0.69999999999999996, 0.34906585039886590, 0.0 },
+  { 0.53536740275997130, -0.69999999999999996, 0.52359877559829882, 0.0 },
+  { 0.72603797651684454, -0.69999999999999996, 0.69813170079773179, 0.0 },
+  { 0.92698296348313447, -0.69999999999999996, 0.87266462599716477, 0.0 },
+  { 1.1400447527693316, -0.69999999999999996, 1.0471975511965976, 0.0 },
+  { 1.3657668117194071, -0.69999999999999996, 1.2217304763960306, 0.0 },
+  { 1.6024686895959162, -0.69999999999999996, 1.3962634015954636, 0.0 },
+  { 1.8456939983747234, -0.69999999999999996, 1.5707963267948966, 0.0 },
 };
 const double toler003 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3664899092028927e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.3664899092028927e-16
+// mean(f - f_Boost): 5.2735593669694933e-17
+// variance(f - f_Boost): 3.4333862218458872e-34
+// stddev(f - f_Boost): 1.8529398861932589e-17
 const testcase_ellint_1<double>
 data004[10] =
 {
-  { 0.0000000000000000, -0.59999999999999998, 0.0000000000000000 },
-  { 0.17485154362988359, -0.59999999999999998, 0.17453292519943295 },
-  { 0.35160509865544326, -0.59999999999999998, 0.34906585039886590 },
-  { 0.53210652578446138, -0.59999999999999998, 0.52359877559829882 },
-  { 0.71805304664485659, -0.59999999999999998, 0.69813170079773179 },
-  { 0.91082759030195970, -0.59999999999999998, 0.87266462599716477 },
-  { 1.1112333229323361, -0.59999999999999998, 1.0471975511965976 },
-  { 1.3191461190365270, -0.59999999999999998, 1.2217304763960306 },
-  { 1.5332022105084773, -0.59999999999999998, 1.3962634015954636 },
-  { 1.7507538029157526, -0.59999999999999998, 1.5707963267948966 },
+  { 0.0000000000000000, -0.59999999999999998, 0.0000000000000000, 0.0 },
+  { 0.17485154362988359, -0.59999999999999998, 0.17453292519943295, 0.0 },
+  { 0.35160509865544320, -0.59999999999999998, 0.34906585039886590, 0.0 },
+  { 0.53210652578446138, -0.59999999999999998, 0.52359877559829882, 0.0 },
+  { 0.71805304664485659, -0.59999999999999998, 0.69813170079773179, 0.0 },
+  { 0.91082759030195981, -0.59999999999999998, 0.87266462599716477, 0.0 },
+  { 1.1112333229323361, -0.59999999999999998, 1.0471975511965976, 0.0 },
+  { 1.3191461190365270, -0.59999999999999998, 1.2217304763960306, 0.0 },
+  { 1.5332022105084779, -0.59999999999999998, 1.3962634015954636, 0.0 },
+  { 1.7507538029157523, -0.59999999999999998, 1.5707963267948966, 0.0 },
 };
 const double toler004 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.1201497220602069e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.4551389361831220e-16
+// mean(f - f_Boost): -5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
 const testcase_ellint_1<double>
 data005[10] =
 {
-  { 0.0000000000000000, -0.50000000000000000, 0.0000000000000000 },
-  { 0.17475385514035785, -0.50000000000000000, 0.17453292519943295 },
-  { 0.35081868470101585, -0.50000000000000000, 0.34906585039886590 },
-  { 0.52942862705190574, -0.50000000000000000, 0.52359877559829882 },
-  { 0.71164727562630314, -0.50000000000000000, 0.69813170079773179 },
-  { 0.89824523594227768, -0.50000000000000000, 0.87266462599716477 },
-  { 1.0895506700518851, -0.50000000000000000, 1.0471975511965976 },
-  { 1.2853005857432931, -0.50000000000000000, 1.2217304763960306 },
-  { 1.4845545520549484, -0.50000000000000000, 1.3962634015954636 },
-  { 1.6857503548125963, -0.50000000000000000, 1.5707963267948966 },
+  { 0.0000000000000000, -0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 0.17475385514035785, -0.50000000000000000, 0.17453292519943295, 0.0 },
+  { 0.35081868470101579, -0.50000000000000000, 0.34906585039886590, 0.0 },
+  { 0.52942862705190574, -0.50000000000000000, 0.52359877559829882, 0.0 },
+  { 0.71164727562630326, -0.50000000000000000, 0.69813170079773179, 0.0 },
+  { 0.89824523594227768, -0.50000000000000000, 0.87266462599716477, 0.0 },
+  { 1.0895506700518853, -0.50000000000000000, 1.0471975511965976, 0.0 },
+  { 1.2853005857432933, -0.50000000000000000, 1.2217304763960306, 0.0 },
+  { 1.4845545520549488, -0.50000000000000000, 1.3962634015954636, 0.0 },
+  { 1.6857503548125961, -0.50000000000000000, 1.5707963267948966, 0.0 },
 };
 const double toler005 = 2.5000000000000020e-13;
 
-// Test data for k=-0.40000000000000002.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.0617918857203532e-16
+// Test data for k=-0.39999999999999991.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.1423314994346225e-16
+// mean(f - f_Boost): -6.9388939039072284e-17
+// variance(f - f_Boost): 1.7333369499485123e-32
+// stddev(f - f_Boost): 1.3165625507162629e-16
 const testcase_ellint_1<double>
 data006[10] =
 {
-  { 0.0000000000000000, -0.40000000000000002, 0.0000000000000000 },
-  { 0.17467414669441528, -0.40000000000000002, 0.17453292519943295 },
-  { 0.35018222772483443, -0.40000000000000002, 0.34906585039886590 },
-  { 0.52729015917508737, -0.40000000000000002, 0.52359877559829882 },
-  { 0.70662374407341244, -0.40000000000000002, 0.69813170079773179 },
-  { 0.88859210497602170, -0.40000000000000002, 0.87266462599716477 },
-  { 1.0733136290471379, -0.40000000000000002, 1.0471975511965976 },
-  { 1.2605612170157061, -0.40000000000000002, 1.2217304763960306 },
-  { 1.4497513956433439, -0.40000000000000002, 1.3962634015954636 },
-  { 1.6399998658645112, -0.40000000000000002, 1.5707963267948966 },
+  { 0.0000000000000000, -0.39999999999999991, 0.0000000000000000, 0.0 },
+  { 0.17467414669441528, -0.39999999999999991, 0.17453292519943295, 0.0 },
+  { 0.35018222772483443, -0.39999999999999991, 0.34906585039886590, 0.0 },
+  { 0.52729015917508748, -0.39999999999999991, 0.52359877559829882, 0.0 },
+  { 0.70662374407341244, -0.39999999999999991, 0.69813170079773179, 0.0 },
+  { 0.88859210497602159, -0.39999999999999991, 0.87266462599716477, 0.0 },
+  { 1.0733136290471381, -0.39999999999999991, 1.0471975511965976, 0.0 },
+  { 1.2605612170157066, -0.39999999999999991, 1.2217304763960306, 0.0 },
+  { 1.4497513956433439, -0.39999999999999991, 1.3962634015954636, 0.0 },
+  { 1.6399998658645112, -0.39999999999999991, 1.5707963267948966, 0.0 },
 };
 const double toler006 = 2.5000000000000020e-13;
 
-// Test data for k=-0.30000000000000004.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.3361874537309281e-16
+// Test data for k=-0.29999999999999993.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.2241249691539529e-16
+// mean(f - f_Boost): -8.3266726846886741e-17
+// variance(f - f_Boost): 4.1942474344433135e-32
+// stddev(f - f_Boost): 2.0479861900030756e-16
 const testcase_ellint_1<double>
 data007[10] =
 {
-  { 0.0000000000000000, -0.30000000000000004, 0.0000000000000000 },
-  { 0.17461228653000099, -0.30000000000000004, 0.17453292519943295 },
-  { 0.34969146102798415, -0.30000000000000004, 0.34906585039886590 },
-  { 0.52565822873726320, -0.30000000000000004, 0.52359877559829882 },
-  { 0.70284226512408532, -0.30000000000000004, 0.69813170079773179 },
-  { 0.88144139195111182, -0.30000000000000004, 0.87266462599716477 },
-  { 1.0614897067260520, -0.30000000000000004, 1.0471975511965976 },
-  { 1.2428416824174218, -0.30000000000000004, 1.2217304763960306 },
-  { 1.4251795877015927, -0.30000000000000004, 1.3962634015954636 },
-  { 1.6080486199305128, -0.30000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, -0.29999999999999993, 0.0000000000000000, 0.0 },
+  { 0.17461228653000099, -0.29999999999999993, 0.17453292519943295, 0.0 },
+  { 0.34969146102798421, -0.29999999999999993, 0.34906585039886590, 0.0 },
+  { 0.52565822873726309, -0.29999999999999993, 0.52359877559829882, 0.0 },
+  { 0.70284226512408543, -0.29999999999999993, 0.69813170079773179, 0.0 },
+  { 0.88144139195111171, -0.29999999999999993, 0.87266462599716477, 0.0 },
+  { 1.0614897067260520, -0.29999999999999993, 1.0471975511965976, 0.0 },
+  { 1.2428416824174220, -0.29999999999999993, 1.2217304763960306, 0.0 },
+  { 1.4251795877015929, -0.29999999999999993, 1.3962634015954636, 0.0 },
+  { 1.6080486199305126, -0.29999999999999993, 1.5707963267948966, 0.0 },
 };
 const double toler007 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2156475739151676e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.2156475739151676e-16
+// mean(f - f_Boost): -9.7144514654701197e-17
+// variance(f - f_Boost): 1.1650687317898094e-33
+// stddev(f - f_Boost): 3.4133103166717924e-17
 const testcase_ellint_1<double>
 data008[10] =
 {
-  { 0.0000000000000000, -0.19999999999999996, 0.0000000000000000 },
-  { 0.17456817290292809, -0.19999999999999996, 0.17453292519943295 },
-  { 0.34934315932086801, -0.19999999999999996, 0.34906585039886590 },
-  { 0.52450880529443988, -0.19999999999999996, 0.52359877559829882 },
-  { 0.70020491009844876, -0.19999999999999996, 0.69813170079773179 },
-  { 0.87651006649967955, -0.19999999999999996, 0.87266462599716477 },
-  { 1.0534305870298994, -0.19999999999999996, 1.0471975511965976 },
-  { 1.2308975521670784, -0.19999999999999996, 1.2217304763960306 },
-  { 1.4087733584990738, -0.19999999999999996, 1.3962634015954636 },
-  { 1.5868678474541660, -0.19999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, -0.19999999999999996, 0.0000000000000000, 0.0 },
+  { 0.17456817290292806, -0.19999999999999996, 0.17453292519943295, 0.0 },
+  { 0.34934315932086796, -0.19999999999999996, 0.34906585039886590, 0.0 },
+  { 0.52450880529443988, -0.19999999999999996, 0.52359877559829882, 0.0 },
+  { 0.70020491009844887, -0.19999999999999996, 0.69813170079773179, 0.0 },
+  { 0.87651006649967977, -0.19999999999999996, 0.87266462599716477, 0.0 },
+  { 1.0534305870298994, -0.19999999999999996, 1.0471975511965976, 0.0 },
+  { 1.2308975521670789, -0.19999999999999996, 1.2217304763960306, 0.0 },
+  { 1.4087733584990738, -0.19999999999999996, 1.3962634015954636, 0.0 },
+  { 1.5868678474541662, -0.19999999999999996, 1.5707963267948966, 0.0 },
 };
 const double toler008 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.1735566504509650e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.1735566504509645e-16
+// mean(f - f_Boost): -3.6082248300317589e-17
+// variance(f - f_Boost): 8.2258607846939269e-33
+// stddev(f - f_Boost): 9.0696531271564778e-17
 const testcase_ellint_1<double>
 data009[10] =
 {
-  { 0.0000000000000000, -0.099999999999999978, 0.0000000000000000 },
-  { 0.17454173353063659, -0.099999999999999978, 0.17453292519943295 },
-  { 0.34913506721468091, -0.099999999999999978, 0.34906585039886590 },
-  { 0.52382550016538942, -0.099999999999999978, 0.52359877559829882 },
-  { 0.69864700854177020, -0.099999999999999978, 0.69813170079773179 },
-  { 0.87361792586964870, -0.099999999999999978, 0.87266462599716477 },
-  { 1.0487386319621683, -0.099999999999999978, 1.0471975511965976 },
-  { 1.2239913752078757, -0.099999999999999978, 1.2217304763960306 },
-  { 1.3993423113684049, -0.099999999999999978, 1.3962634015954636 },
-  { 1.5747455615173562, -0.099999999999999978, 1.5707963267948966 },
+  { 0.0000000000000000, -0.099999999999999978, 0.0000000000000000, 0.0 },
+  { 0.17454173353063662, -0.099999999999999978, 0.17453292519943295, 0.0 },
+  { 0.34913506721468096, -0.099999999999999978, 0.34906585039886590, 0.0 },
+  { 0.52382550016538953, -0.099999999999999978, 0.52359877559829882, 0.0 },
+  { 0.69864700854177020, -0.099999999999999978, 0.69813170079773179, 0.0 },
+  { 0.87361792586964859, -0.099999999999999978, 0.87266462599716477, 0.0 },
+  { 1.0487386319621685, -0.099999999999999978, 1.0471975511965976, 0.0 },
+  { 1.2239913752078759, -0.099999999999999978, 1.2217304763960306, 0.0 },
+  { 1.3993423113684051, -0.099999999999999978, 1.3962634015954636, 0.0 },
+  { 1.5747455615173558, -0.099999999999999978, 1.5707963267948966, 0.0 },
 };
 const double toler009 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.1203697876423452e-16
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.1203697876423447e-16
+// mean(f - f_Boost): -1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
 const testcase_ellint_1<double>
 data010[10] =
 {
-  { 0.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
-  { 0.17453292519943292, 0.0000000000000000, 0.17453292519943295 },
-  { 0.34906585039886584, 0.0000000000000000, 0.34906585039886590 },
-  { 0.52359877559829870, 0.0000000000000000, 0.52359877559829882 },
-  { 0.69813170079773168, 0.0000000000000000, 0.69813170079773179 },
-  { 0.87266462599716477, 0.0000000000000000, 0.87266462599716477 },
-  { 1.0471975511965974, 0.0000000000000000, 1.0471975511965976 },
-  { 1.2217304763960304, 0.0000000000000000, 1.2217304763960306 },
-  { 1.3962634015954631, 0.0000000000000000, 1.3962634015954636 },
-  { 1.5707963267948966, 0.0000000000000000, 1.5707963267948966 },
+  { 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.17453292519943295, 0.0000000000000000, 0.17453292519943295, 0.0 },
+  { 0.34906585039886590, 0.0000000000000000, 0.34906585039886590, 0.0 },
+  { 0.52359877559829882, 0.0000000000000000, 0.52359877559829882, 0.0 },
+  { 0.69813170079773179, 0.0000000000000000, 0.69813170079773179, 0.0 },
+  { 0.87266462599716477, 0.0000000000000000, 0.87266462599716477, 0.0 },
+  { 1.0471975511965976, 0.0000000000000000, 1.0471975511965976, 0.0 },
+  { 1.2217304763960306, 0.0000000000000000, 1.2217304763960306, 0.0 },
+  { 1.3962634015954636, 0.0000000000000000, 1.3962634015954636, 0.0 },
+  { 1.5707963267948966, 0.0000000000000000, 1.5707963267948966, 0.0 },
 };
 const double toler010 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.1735566504509650e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.1735566504509645e-16
+// mean(f - f_Boost): -5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
 const testcase_ellint_1<double>
 data011[10] =
 {
-  { 0.0000000000000000, 0.10000000000000009, 0.0000000000000000 },
-  { 0.17454173353063659, 0.10000000000000009, 0.17453292519943295 },
-  { 0.34913506721468091, 0.10000000000000009, 0.34906585039886590 },
-  { 0.52382550016538942, 0.10000000000000009, 0.52359877559829882 },
-  { 0.69864700854177020, 0.10000000000000009, 0.69813170079773179 },
-  { 0.87361792586964870, 0.10000000000000009, 0.87266462599716477 },
-  { 1.0487386319621683, 0.10000000000000009, 1.0471975511965976 },
-  { 1.2239913752078757, 0.10000000000000009, 1.2217304763960306 },
-  { 1.3993423113684049, 0.10000000000000009, 1.3962634015954636 },
-  { 1.5747455615173562, 0.10000000000000009, 1.5707963267948966 },
+  { 0.0000000000000000, 0.10000000000000009, 0.0000000000000000, 0.0 },
+  { 0.17454173353063662, 0.10000000000000009, 0.17453292519943295, 0.0 },
+  { 0.34913506721468096, 0.10000000000000009, 0.34906585039886590, 0.0 },
+  { 0.52382550016538953, 0.10000000000000009, 0.52359877559829882, 0.0 },
+  { 0.69864700854177020, 0.10000000000000009, 0.69813170079773179, 0.0 },
+  { 0.87361792586964859, 0.10000000000000009, 0.87266462599716477, 0.0 },
+  { 1.0487386319621685, 0.10000000000000009, 1.0471975511965976, 0.0 },
+  { 1.2239913752078759, 0.10000000000000009, 1.2217304763960306, 0.0 },
+  { 1.3993423113684051, 0.10000000000000009, 1.3962634015954636, 0.0 },
+  { 1.5747455615173560, 0.10000000000000009, 1.5707963267948966, 0.0 },
 };
 const double toler011 = 2.5000000000000020e-13;
 
-// Test data for k=0.19999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2156475739151676e-16
+// Test data for k=0.20000000000000018.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.2156475739151676e-16
+// mean(f - f_Boost): -9.7144514654701197e-17
+// variance(f - f_Boost): 1.1650687317898094e-33
+// stddev(f - f_Boost): 3.4133103166717924e-17
 const testcase_ellint_1<double>
 data012[10] =
 {
-  { 0.0000000000000000, 0.19999999999999996, 0.0000000000000000 },
-  { 0.17456817290292809, 0.19999999999999996, 0.17453292519943295 },
-  { 0.34934315932086801, 0.19999999999999996, 0.34906585039886590 },
-  { 0.52450880529443988, 0.19999999999999996, 0.52359877559829882 },
-  { 0.70020491009844876, 0.19999999999999996, 0.69813170079773179 },
-  { 0.87651006649967955, 0.19999999999999996, 0.87266462599716477 },
-  { 1.0534305870298994, 0.19999999999999996, 1.0471975511965976 },
-  { 1.2308975521670784, 0.19999999999999996, 1.2217304763960306 },
-  { 1.4087733584990738, 0.19999999999999996, 1.3962634015954636 },
-  { 1.5868678474541660, 0.19999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, 0.20000000000000018, 0.0000000000000000, 0.0 },
+  { 0.17456817290292806, 0.20000000000000018, 0.17453292519943295, 0.0 },
+  { 0.34934315932086796, 0.20000000000000018, 0.34906585039886590, 0.0 },
+  { 0.52450880529443988, 0.20000000000000018, 0.52359877559829882, 0.0 },
+  { 0.70020491009844887, 0.20000000000000018, 0.69813170079773179, 0.0 },
+  { 0.87651006649967977, 0.20000000000000018, 0.87266462599716477, 0.0 },
+  { 1.0534305870298994, 0.20000000000000018, 1.0471975511965976, 0.0 },
+  { 1.2308975521670789, 0.20000000000000018, 1.2217304763960306, 0.0 },
+  { 1.4087733584990738, 0.20000000000000018, 1.3962634015954636, 0.0 },
+  { 1.5868678474541662, 0.20000000000000018, 1.5707963267948966, 0.0 },
 };
 const double toler012 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.3361874537309281e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.5233306300061082e-16
+// mean(f - f_Boost): -1.0547118733938987e-16
+// variance(f - f_Boost): 7.5633408838247182e-32
+// stddev(f - f_Boost): 2.7501528837184157e-16
 const testcase_ellint_1<double>
 data013[10] =
 {
-  { 0.0000000000000000, 0.30000000000000004, 0.0000000000000000 },
-  { 0.17461228653000099, 0.30000000000000004, 0.17453292519943295 },
-  { 0.34969146102798415, 0.30000000000000004, 0.34906585039886590 },
-  { 0.52565822873726320, 0.30000000000000004, 0.52359877559829882 },
-  { 0.70284226512408532, 0.30000000000000004, 0.69813170079773179 },
-  { 0.88144139195111182, 0.30000000000000004, 0.87266462599716477 },
-  { 1.0614897067260520, 0.30000000000000004, 1.0471975511965976 },
-  { 1.2428416824174218, 0.30000000000000004, 1.2217304763960306 },
-  { 1.4251795877015927, 0.30000000000000004, 1.3962634015954636 },
-  { 1.6080486199305128, 0.30000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, 0.30000000000000004, 0.0000000000000000, 0.0 },
+  { 0.17461228653000099, 0.30000000000000004, 0.17453292519943295, 0.0 },
+  { 0.34969146102798421, 0.30000000000000004, 0.34906585039886590, 0.0 },
+  { 0.52565822873726309, 0.30000000000000004, 0.52359877559829882, 0.0 },
+  { 0.70284226512408543, 0.30000000000000004, 0.69813170079773179, 0.0 },
+  { 0.88144139195111171, 0.30000000000000004, 0.87266462599716477, 0.0 },
+  { 1.0614897067260520, 0.30000000000000004, 1.0471975511965976, 0.0 },
+  { 1.2428416824174220, 0.30000000000000004, 1.2217304763960306, 0.0 },
+  { 1.4251795877015929, 0.30000000000000004, 1.3962634015954636, 0.0 },
+  { 1.6080486199305128, 0.30000000000000004, 1.5707963267948966, 0.0 },
 };
 const double toler013 = 2.5000000000000020e-13;
 
-// Test data for k=0.39999999999999991.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 5.4157225142938039e-16
+// Test data for k=0.40000000000000013.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.1423314994346225e-16
+// mean(f - f_Boost): -4.7184478546569152e-17
+// variance(f - f_Boost): 1.9448563670505968e-32
+// stddev(f - f_Boost): 1.3945810722401896e-16
 const testcase_ellint_1<double>
 data014[10] =
 {
-  { 0.0000000000000000, 0.39999999999999991, 0.0000000000000000 },
-  { 0.17467414669441528, 0.39999999999999991, 0.17453292519943295 },
-  { 0.35018222772483443, 0.39999999999999991, 0.34906585039886590 },
-  { 0.52729015917508737, 0.39999999999999991, 0.52359877559829882 },
-  { 0.70662374407341244, 0.39999999999999991, 0.69813170079773179 },
-  { 0.88859210497602170, 0.39999999999999991, 0.87266462599716477 },
-  { 1.0733136290471379, 0.39999999999999991, 1.0471975511965976 },
-  { 1.2605612170157061, 0.39999999999999991, 1.2217304763960306 },
-  { 1.4497513956433439, 0.39999999999999991, 1.3962634015954636 },
-  { 1.6399998658645112, 0.39999999999999991, 1.5707963267948966 },
+  { 0.0000000000000000, 0.40000000000000013, 0.0000000000000000, 0.0 },
+  { 0.17467414669441528, 0.40000000000000013, 0.17453292519943295, 0.0 },
+  { 0.35018222772483443, 0.40000000000000013, 0.34906585039886590, 0.0 },
+  { 0.52729015917508748, 0.40000000000000013, 0.52359877559829882, 0.0 },
+  { 0.70662374407341244, 0.40000000000000013, 0.69813170079773179, 0.0 },
+  { 0.88859210497602159, 0.40000000000000013, 0.87266462599716477, 0.0 },
+  { 1.0733136290471381, 0.40000000000000013, 1.0471975511965976, 0.0 },
+  { 1.2605612170157066, 0.40000000000000013, 1.2217304763960306, 0.0 },
+  { 1.4497513956433439, 0.40000000000000013, 1.3962634015954636, 0.0 },
+  { 1.6399998658645112, 0.40000000000000013, 1.5707963267948966, 0.0 },
 };
 const double toler014 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.1201497220602069e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.4551389361831220e-16
+// mean(f - f_Boost): -5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
 const testcase_ellint_1<double>
 data015[10] =
 {
-  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
-  { 0.17475385514035785, 0.50000000000000000, 0.17453292519943295 },
-  { 0.35081868470101585, 0.50000000000000000, 0.34906585039886590 },
-  { 0.52942862705190574, 0.50000000000000000, 0.52359877559829882 },
-  { 0.71164727562630314, 0.50000000000000000, 0.69813170079773179 },
-  { 0.89824523594227768, 0.50000000000000000, 0.87266462599716477 },
-  { 1.0895506700518851, 0.50000000000000000, 1.0471975511965976 },
-  { 1.2853005857432931, 0.50000000000000000, 1.2217304763960306 },
-  { 1.4845545520549484, 0.50000000000000000, 1.3962634015954636 },
-  { 1.6857503548125963, 0.50000000000000000, 1.5707963267948966 },
+  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 0.17475385514035785, 0.50000000000000000, 0.17453292519943295, 0.0 },
+  { 0.35081868470101579, 0.50000000000000000, 0.34906585039886590, 0.0 },
+  { 0.52942862705190574, 0.50000000000000000, 0.52359877559829882, 0.0 },
+  { 0.71164727562630326, 0.50000000000000000, 0.69813170079773179, 0.0 },
+  { 0.89824523594227768, 0.50000000000000000, 0.87266462599716477, 0.0 },
+  { 1.0895506700518853, 0.50000000000000000, 1.0471975511965976, 0.0 },
+  { 1.2853005857432933, 0.50000000000000000, 1.2217304763960306, 0.0 },
+  { 1.4845545520549488, 0.50000000000000000, 1.3962634015954636, 0.0 },
+  { 1.6857503548125961, 0.50000000000000000, 1.5707963267948966, 0.0 },
 };
 const double toler015 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3664899092028927e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.3664899092028927e-16
+// mean(f - f_Boost): 7.4940054162198071e-17
+// variance(f - f_Boost): 2.6715739327327140e-33
+// stddev(f - f_Boost): 5.1687270509601433e-17
 const testcase_ellint_1<double>
 data016[10] =
 {
-  { 0.0000000000000000, 0.60000000000000009, 0.0000000000000000 },
-  { 0.17485154362988359, 0.60000000000000009, 0.17453292519943295 },
-  { 0.35160509865544326, 0.60000000000000009, 0.34906585039886590 },
-  { 0.53210652578446138, 0.60000000000000009, 0.52359877559829882 },
-  { 0.71805304664485659, 0.60000000000000009, 0.69813170079773179 },
-  { 0.91082759030195970, 0.60000000000000009, 0.87266462599716477 },
-  { 1.1112333229323361, 0.60000000000000009, 1.0471975511965976 },
-  { 1.3191461190365270, 0.60000000000000009, 1.2217304763960306 },
-  { 1.5332022105084775, 0.60000000000000009, 1.3962634015954636 },
-  { 1.7507538029157526, 0.60000000000000009, 1.5707963267948966 },
+  { 0.0000000000000000, 0.60000000000000009, 0.0000000000000000, 0.0 },
+  { 0.17485154362988359, 0.60000000000000009, 0.17453292519943295, 0.0 },
+  { 0.35160509865544320, 0.60000000000000009, 0.34906585039886590, 0.0 },
+  { 0.53210652578446138, 0.60000000000000009, 0.52359877559829882, 0.0 },
+  { 0.71805304664485659, 0.60000000000000009, 0.69813170079773179, 0.0 },
+  { 0.91082759030195981, 0.60000000000000009, 0.87266462599716477, 0.0 },
+  { 1.1112333229323361, 0.60000000000000009, 1.0471975511965976, 0.0 },
+  { 1.3191461190365270, 0.60000000000000009, 1.2217304763960306, 0.0 },
+  { 1.5332022105084779, 0.60000000000000009, 1.3962634015954636, 0.0 },
+  { 1.7507538029157526, 0.60000000000000009, 1.5707963267948966, 0.0 },
 };
 const double toler016 = 2.5000000000000020e-13;
 
-// Test data for k=0.69999999999999996.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.5930208052157665e-16
+// Test data for k=0.70000000000000018.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.1569224977685422e-16
+// mean(f - f_Boost): -1.1102230246251566e-17
+// variance(f - f_Boost): 2.3145398087213714e-32
+// stddev(f - f_Boost): 1.5213611697165703e-16
 const testcase_ellint_1<double>
 data017[10] =
 {
-  { 0.0000000000000000, 0.69999999999999996, 0.0000000000000000 },
-  { 0.17496737466916723, 0.69999999999999996, 0.17453292519943295 },
-  { 0.35254687535677925, 0.69999999999999996, 0.34906585039886590 },
-  { 0.53536740275997119, 0.69999999999999996, 0.52359877559829882 },
-  { 0.72603797651684454, 0.69999999999999996, 0.69813170079773179 },
-  { 0.92698296348313458, 0.69999999999999996, 0.87266462599716477 },
-  { 1.1400447527693316, 0.69999999999999996, 1.0471975511965976 },
-  { 1.3657668117194073, 0.69999999999999996, 1.2217304763960306 },
-  { 1.6024686895959159, 0.69999999999999996, 1.3962634015954636 },
-  { 1.8456939983747236, 0.69999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, 0.70000000000000018, 0.0000000000000000, 0.0 },
+  { 0.17496737466916723, 0.70000000000000018, 0.17453292519943295, 0.0 },
+  { 0.35254687535677931, 0.70000000000000018, 0.34906585039886590, 0.0 },
+  { 0.53536740275997130, 0.70000000000000018, 0.52359877559829882, 0.0 },
+  { 0.72603797651684454, 0.70000000000000018, 0.69813170079773179, 0.0 },
+  { 0.92698296348313447, 0.70000000000000018, 0.87266462599716477, 0.0 },
+  { 1.1400447527693318, 0.70000000000000018, 1.0471975511965976, 0.0 },
+  { 1.3657668117194073, 0.70000000000000018, 1.2217304763960306, 0.0 },
+  { 1.6024686895959164, 0.70000000000000018, 1.3962634015954636, 0.0 },
+  { 1.8456939983747236, 0.70000000000000018, 1.5707963267948966, 0.0 },
 };
 const double toler017 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1175183168766718e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.2032670495747184e-16
+// mean(f - f_Boost): 1.9428902930940239e-16
+// variance(f - f_Boost): 2.7486111305082033e-32
+// stddev(f - f_Boost): 1.6578935823834422e-16
 const testcase_ellint_1<double>
 data018[10] =
 {
-  { 0.0000000000000000, 0.80000000000000004, 0.0000000000000000 },
-  { 0.17510154241338899, 0.80000000000000004, 0.17453292519943295 },
-  { 0.35365068839779390, 0.80000000000000004, 0.34906585039886590 },
-  { 0.53926804409084550, 0.80000000000000004, 0.52359877559829882 },
-  { 0.73587926028070361, 0.80000000000000004, 0.69813170079773179 },
-  { 0.94770942970071170, 0.80000000000000004, 0.87266462599716477 },
-  { 1.1789022995388236, 0.80000000000000004, 1.0471975511965976 },
-  { 1.4323027881876009, 0.80000000000000004, 1.2217304763960306 },
-  { 1.7069629739121674, 0.80000000000000004, 1.3962634015954636 },
-  { 1.9953027776647296, 0.80000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, 0.80000000000000004, 0.0000000000000000, 0.0 },
+  { 0.17510154241338899, 0.80000000000000004, 0.17453292519943295, 0.0 },
+  { 0.35365068839779396, 0.80000000000000004, 0.34906585039886590, 0.0 },
+  { 0.53926804409084550, 0.80000000000000004, 0.52359877559829882, 0.0 },
+  { 0.73587926028070372, 0.80000000000000004, 0.69813170079773179, 0.0 },
+  { 0.94770942970071170, 0.80000000000000004, 0.87266462599716477, 0.0 },
+  { 1.1789022995388236, 0.80000000000000004, 1.0471975511965976, 0.0 },
+  { 1.4323027881876012, 0.80000000000000004, 1.2217304763960306, 0.0 },
+  { 1.7069629739121677, 0.80000000000000004, 1.3962634015954636, 0.0 },
+  { 1.9953027776647294, 0.80000000000000004, 1.5707963267948966, 0.0 },
 };
 const double toler018 = 2.5000000000000020e-13;
 
-// Test data for k=0.89999999999999991.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8945813740035884e-16
+// Test data for k=0.90000000000000013.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3381508715713360e-16
+// mean(f - f_Boost): 1.4710455076283324e-16
+// variance(f - f_Boost): 6.7801293731072419e-32
+// stddev(f - f_Boost): 2.6038681558610532e-16
 const testcase_ellint_1<double>
 data019[10] =
 {
-  { 0.0000000000000000, 0.89999999999999991, 0.0000000000000000 },
-  { 0.17525427376115024, 0.89999999999999991, 0.17453292519943295 },
-  { 0.35492464591297446, 0.89999999999999991, 0.34906585039886590 },
-  { 0.54388221416157112, 0.89999999999999991, 0.52359877559829882 },
-  { 0.74797400423532490, 0.89999999999999991, 0.69813170079773179 },
-  { 0.97463898451966458, 0.89999999999999991, 0.87266462599716477 },
-  { 1.2334463254523440, 0.89999999999999991, 1.0471975511965976 },
-  { 1.5355247765594910, 0.89999999999999991, 1.2217304763960306 },
-  { 1.8882928567775117, 0.89999999999999991, 1.3962634015954636 },
-  { 2.2805491384227703, 0.89999999999999991, 1.5707963267948966 },
+  { 0.0000000000000000, 0.90000000000000013, 0.0000000000000000, 0.0 },
+  { 0.17525427376115027, 0.90000000000000013, 0.17453292519943295, 0.0 },
+  { 0.35492464591297446, 0.90000000000000013, 0.34906585039886590, 0.0 },
+  { 0.54388221416157123, 0.90000000000000013, 0.52359877559829882, 0.0 },
+  { 0.74797400423532512, 0.90000000000000013, 0.69813170079773179, 0.0 },
+  { 0.97463898451966446, 0.90000000000000013, 0.87266462599716477, 0.0 },
+  { 1.2334463254523440, 0.90000000000000013, 1.0471975511965976, 0.0 },
+  { 1.5355247765594915, 0.90000000000000013, 1.2217304763960306, 0.0 },
+  { 1.8882928567775128, 0.90000000000000013, 1.3962634015954636, 0.0 },
+  { 2.2805491384227707, 0.90000000000000013, 1.5707963267948966, 0.0 },
 };
 const double toler019 = 2.5000000000000020e-13;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_ellint_1<Tp> (&data)[Num], Tp toler)
+  test(const testcase_ellint_1<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::ellint_1(data[i].k, data[i].phi);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::ellint_1(data[i].k, data[i].phi);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index 31564ac..daf0b55 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for k=-0.90000000000000002.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 6.6116483711056737e-16
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 6.6116483711056727e-16
+// mean(f - f_Boost): -8.6042284408449634e-17
+// variance(f - f_Boost): 4.1543973284335233e-32
+// stddev(f - f_Boost): 2.0382338748125847e-16
 const testcase_ellint_2<double>
 data001[10] =
 {
-  { 0.0000000000000000, -0.90000000000000002, 0.0000000000000000 },
-  { 0.17381690606167960, -0.90000000000000002, 0.17453292519943295 },
-  { 0.34337919186972055, -0.90000000000000002, 0.34906585039886590 },
-  { 0.50464268659856326, -0.90000000000000002, 0.52359877559829882 },
-  { 0.65400003842368570, -0.90000000000000002, 0.69813170079773179 },
-  { 0.78854928419904646, -0.90000000000000002, 0.87266462599716477 },
-  { 0.90645698626315396, -0.90000000000000002, 1.0471975511965976 },
-  { 1.0075154899135925, -0.90000000000000002, 1.2217304763960306 },
-  { 1.0940135583194068, -0.90000000000000002, 1.3962634015954636 },
-  { 1.1716970527816140, -0.90000000000000002, 1.5707963267948966 },
+  { 0.0000000000000000, -0.90000000000000002, 0.0000000000000000, 0.0 },
+  { 0.17381690606167963, -0.90000000000000002, 0.17453292519943295, 0.0 },
+  { 0.34337919186972055, -0.90000000000000002, 0.34906585039886590, 0.0 },
+  { 0.50464268659856337, -0.90000000000000002, 0.52359877559829882, 0.0 },
+  { 0.65400003842368593, -0.90000000000000002, 0.69813170079773179, 0.0 },
+  { 0.78854928419904635, -0.90000000000000002, 0.87266462599716477, 0.0 },
+  { 0.90645698626315396, -0.90000000000000002, 1.0471975511965976, 0.0 },
+  { 1.0075154899135927, -0.90000000000000002, 1.2217304763960306, 0.0 },
+  { 1.0940135583194071, -0.90000000000000002, 1.3962634015954636, 0.0 },
+  { 1.1716970527816142, -0.90000000000000002, 1.5707963267948966, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.4793687438660849e-16
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.0438106231598255e-15
+// mean(f - f_Boost): 1.8318679906315082e-16
+// variance(f - f_Boost): 1.6301071049293564e-31
+// stddev(f - f_Boost): 4.0374584888632060e-16
 const testcase_ellint_2<double>
 data002[10] =
 {
-  { 0.0000000000000000, -0.80000000000000004, 0.0000000000000000 },
-  { 0.17396762274534805, -0.80000000000000004, 0.17453292519943295 },
-  { 0.34458685226969316, -0.80000000000000004, 0.34906585039886590 },
-  { 0.50872923654502433, -0.80000000000000004, 0.52359877559829882 },
-  { 0.66372016539176215, -0.80000000000000004, 0.69813170079773179 },
-  { 0.80760344410167406, -0.80000000000000004, 0.87266462599716477 },
-  { 0.93945480372495049, -0.80000000000000004, 1.0471975511965976 },
-  { 1.0597473310395036, -0.80000000000000004, 1.2217304763960306 },
-  { 1.1706981862452361, -0.80000000000000004, 1.3962634015954636 },
-  { 1.2763499431699064, -0.80000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, -0.80000000000000004, 0.0000000000000000, 0.0 },
+  { 0.17396762274534805, -0.80000000000000004, 0.17453292519943295, 0.0 },
+  { 0.34458685226969321, -0.80000000000000004, 0.34906585039886590, 0.0 },
+  { 0.50872923654502433, -0.80000000000000004, 0.52359877559829882, 0.0 },
+  { 0.66372016539176226, -0.80000000000000004, 0.69813170079773179, 0.0 },
+  { 0.80760344410167406, -0.80000000000000004, 0.87266462599716477, 0.0 },
+  { 0.93945480372495072, -0.80000000000000004, 1.0471975511965976, 0.0 },
+  { 1.0597473310395040, -0.80000000000000004, 1.2217304763960306, 0.0 },
+  { 1.1706981862452359, -0.80000000000000004, 1.3962634015954636, 0.0 },
+  { 1.2763499431699064, -0.80000000000000004, 1.5707963267948966, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 4.0435005012914979e-16
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.4138821888802831e-16
+// mean(f - f_Boost): 1.9428902930940238e-17
+// variance(f - f_Boost): 2.6524572947662036e-32
+// stddev(f - f_Boost): 1.6286366368119696e-16
 const testcase_ellint_2<double>
 data003[10] =
 {
-  { 0.0000000000000000, -0.69999999999999996, 0.0000000000000000 },
-  { 0.17410041242702542, -0.69999999999999996, 0.17453292519943295 },
-  { 0.34564605085764760, -0.69999999999999996, 0.34906585039886590 },
-  { 0.51228495693314646, -0.69999999999999996, 0.52359877559829882 },
-  { 0.67207654098799530, -0.69999999999999996, 0.69813170079773179 },
-  { 0.82370932631556515, -0.69999999999999996, 0.87266462599716477 },
-  { 0.96672313309452795, -0.69999999999999996, 1.0471975511965976 },
-  { 1.1017090644949503, -0.69999999999999996, 1.2217304763960306 },
-  { 1.2304180097292914, -0.69999999999999996, 1.3962634015954636 },
-  { 1.3556611355719554, -0.69999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, -0.69999999999999996, 0.0000000000000000, 0.0 },
+  { 0.17410041242702540, -0.69999999999999996, 0.17453292519943295, 0.0 },
+  { 0.34564605085764760, -0.69999999999999996, 0.34906585039886590, 0.0 },
+  { 0.51228495693314657, -0.69999999999999996, 0.52359877559829882, 0.0 },
+  { 0.67207654098799530, -0.69999999999999996, 0.69813170079773179, 0.0 },
+  { 0.82370932631556493, -0.69999999999999996, 0.87266462599716477, 0.0 },
+  { 0.96672313309452806, -0.69999999999999996, 1.0471975511965976, 0.0 },
+  { 1.1017090644949501, -0.69999999999999996, 1.2217304763960306, 0.0 },
+  { 1.2304180097292916, -0.69999999999999996, 1.3962634015954636, 0.0 },
+  { 1.3556611355719554, -0.69999999999999996, 1.5707963267948966, 0.0 },
 };
 const double toler003 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.9101039108874066e-16
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 1.9550519554437030e-16
+// mean(f - f_Boost): 1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
 const testcase_ellint_2<double>
 data004[10] =
 {
-  { 0.0000000000000000, -0.59999999999999998, 0.0000000000000000 },
-  { 0.17421534919599127, -0.59999999999999998, 0.17453292519943295 },
-  { 0.34655927787174101, -0.59999999999999998, 0.34906585039886590 },
-  { 0.51533034538432143, -0.59999999999999998, 0.52359877559829882 },
-  { 0.67916550597453018, -0.59999999999999998, 0.69813170079773179 },
-  { 0.83720218180349870, -0.59999999999999998, 0.87266462599716477 },
-  { 0.98922159354937755, -0.59999999999999998, 1.0471975511965976 },
-  { 1.1357478470419360, -0.59999999999999998, 1.2217304763960306 },
-  { 1.2780617372844056, -0.59999999999999998, 1.3962634015954636 },
-  { 1.4180833944487241, -0.59999999999999998, 1.5707963267948966 },
+  { 0.0000000000000000, -0.59999999999999998, 0.0000000000000000, 0.0 },
+  { 0.17421534919599127, -0.59999999999999998, 0.17453292519943295, 0.0 },
+  { 0.34655927787174096, -0.59999999999999998, 0.34906585039886590, 0.0 },
+  { 0.51533034538432143, -0.59999999999999998, 0.52359877559829882, 0.0 },
+  { 0.67916550597453018, -0.59999999999999998, 0.69813170079773179, 0.0 },
+  { 0.83720218180349881, -0.59999999999999998, 0.87266462599716477, 0.0 },
+  { 0.98922159354937755, -0.59999999999999998, 1.0471975511965976, 0.0 },
+  { 1.1357478470419362, -0.59999999999999998, 1.2217304763960306, 0.0 },
+  { 1.2780617372844061, -0.59999999999999998, 1.3962634015954636, 0.0 },
+  { 1.4180833944487241, -0.59999999999999998, 1.5707963267948966, 0.0 },
 };
 const double toler004 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.2412420886495652e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.8178992821201131e-16
+// mean(f - f_Boost): -4.9960036108132046e-17
+// variance(f - f_Boost): 3.0133908324921077e-32
+// stddev(f - f_Boost): 1.7359121039073689e-16
 const testcase_ellint_2<double>
 data005[10] =
 {
-  { 0.0000000000000000, -0.50000000000000000, 0.0000000000000000 },
-  { 0.17431249677315910, -0.50000000000000000, 0.17453292519943295 },
-  { 0.34732862537770803, -0.50000000000000000, 0.34906585039886590 },
-  { 0.51788193485993794, -0.50000000000000000, 0.52359877559829882 },
-  { 0.68506022954164536, -0.50000000000000000, 0.69813170079773179 },
-  { 0.84831662803347196, -0.50000000000000000, 0.87266462599716477 },
-  { 1.0075555551444717, -0.50000000000000000, 1.0471975511965976 },
-  { 1.1631768599287300, -0.50000000000000000, 1.2217304763960306 },
-  { 1.3160584048772543, -0.50000000000000000, 1.3962634015954636 },
-  { 1.4674622093394274, -0.50000000000000000, 1.5707963267948966 },
+  { 0.0000000000000000, -0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 0.17431249677315908, -0.50000000000000000, 0.17453292519943295, 0.0 },
+  { 0.34732862537770803, -0.50000000000000000, 0.34906585039886590, 0.0 },
+  { 0.51788193485993794, -0.50000000000000000, 0.52359877559829882, 0.0 },
+  { 0.68506022954164547, -0.50000000000000000, 0.69813170079773179, 0.0 },
+  { 0.84831662803347208, -0.50000000000000000, 0.87266462599716477, 0.0 },
+  { 1.0075555551444719, -0.50000000000000000, 1.0471975511965976, 0.0 },
+  { 1.1631768599287302, -0.50000000000000000, 1.2217304763960306, 0.0 },
+  { 1.3160584048772548, -0.50000000000000000, 1.3962634015954636, 0.0 },
+  { 1.4674622093394272, -0.50000000000000000, 1.5707963267948966, 0.0 },
 };
 const double toler005 = 2.5000000000000020e-13;
 
-// Test data for k=-0.40000000000000002.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.6222658248988364e-16
+// Test data for k=-0.39999999999999991.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 2.9489138636265387e-16
+// mean(f - f_Boost): 8.6042284408449634e-17
+// variance(f - f_Boost): 1.5826864298542218e-32
+// stddev(f - f_Boost): 1.2580486595733180e-16
 const testcase_ellint_2<double>
 data006[10] =
 {
-  { 0.0000000000000000, -0.40000000000000002, 0.0000000000000000 },
-  { 0.17439190872481267, -0.40000000000000002, 0.17453292519943295 },
-  { 0.34795581767099210, -0.40000000000000002, 0.34906585039886590 },
-  { 0.51995290683804463, -0.40000000000000002, 0.52359877559829882 },
-  { 0.68981638464431538, -0.40000000000000002, 0.69813170079773179 },
-  { 0.85722088859936041, -0.40000000000000002, 0.87266462599716477 },
-  { 1.0221301327876993, -0.40000000000000002, 1.0471975511965976 },
-  { 1.1848138019818371, -0.40000000000000002, 1.2217304763960306 },
-  { 1.3458259266501533, -0.40000000000000002, 1.3962634015954636 },
-  { 1.5059416123600402, -0.40000000000000002, 1.5707963267948966 },
+  { 0.0000000000000000, -0.39999999999999991, 0.0000000000000000, 0.0 },
+  { 0.17439190872481267, -0.39999999999999991, 0.17453292519943295, 0.0 },
+  { 0.34795581767099210, -0.39999999999999991, 0.34906585039886590, 0.0 },
+  { 0.51995290683804463, -0.39999999999999991, 0.52359877559829882, 0.0 },
+  { 0.68981638464431527, -0.39999999999999991, 0.69813170079773179, 0.0 },
+  { 0.85722088859936030, -0.39999999999999991, 0.87266462599716477, 0.0 },
+  { 1.0221301327876993, -0.39999999999999991, 1.0471975511965976, 0.0 },
+  { 1.1848138019818375, -0.39999999999999991, 1.2217304763960306, 0.0 },
+  { 1.3458259266501533, -0.39999999999999991, 1.3962634015954636, 0.0 },
+  { 1.5059416123600404, -0.39999999999999991, 1.5707963267948966, 0.0 },
 };
 const double toler006 = 2.5000000000000020e-13;
 
-// Test data for k=-0.30000000000000004.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.3860540218057383e-16
+// Test data for k=-0.29999999999999993.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3401048387253188e-16
+// mean(f - f_Boost): 7.2164496600635178e-17
+// variance(f - f_Boost): 4.3555500115139682e-32
+// stddev(f - f_Boost): 2.0869954507650391e-16
 const testcase_ellint_2<double>
 data007[10] =
 {
-  { 0.0000000000000000, -0.30000000000000004, 0.0000000000000000 },
-  { 0.17445362864048913, -0.30000000000000004, 0.17453292519943295 },
-  { 0.34844223535713464, -0.30000000000000004, 0.34906585039886590 },
-  { 0.52155353877411770, -0.30000000000000004, 0.52359877559829882 },
-  { 0.69347584418369879, -0.30000000000000004, 0.69813170079773179 },
-  { 0.86403609928237668, -0.30000000000000004, 0.87266462599716477 },
-  { 1.0332234514065408, -0.30000000000000004, 1.0471975511965976 },
-  { 1.2011943182068923, -0.30000000000000004, 1.2217304763960306 },
-  { 1.3682566113689623, -0.30000000000000004, 1.3962634015954636 },
-  { 1.5348334649232491, -0.30000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, -0.29999999999999993, 0.0000000000000000, 0.0 },
+  { 0.17445362864048913, -0.29999999999999993, 0.17453292519943295, 0.0 },
+  { 0.34844223535713470, -0.29999999999999993, 0.34906585039886590, 0.0 },
+  { 0.52155353877411759, -0.29999999999999993, 0.52359877559829882, 0.0 },
+  { 0.69347584418369890, -0.29999999999999993, 0.69813170079773179, 0.0 },
+  { 0.86403609928237657, -0.29999999999999993, 0.87266462599716477, 0.0 },
+  { 1.0332234514065408, -0.29999999999999993, 1.0471975511965976, 0.0 },
+  { 1.2011943182068923, -0.29999999999999993, 1.2217304763960306, 0.0 },
+  { 1.3682566113689625, -0.29999999999999993, 1.3962634015954636, 0.0 },
+  { 1.5348334649232489, -0.29999999999999993, 1.5707963267948966, 0.0 },
 };
 const double toler007 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2658819988515356e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.2658819988515356e-16
+// mean(f - f_Boost): -5.2735593669694933e-17
+// variance(f - f_Boost): 3.0473442641042680e-32
+// stddev(f - f_Boost): 1.7456644190978597e-16
 const testcase_ellint_2<double>
 data008[10] =
 {
-  { 0.0000000000000000, -0.19999999999999996, 0.0000000000000000 },
-  { 0.17449769027652812, -0.19999999999999996, 0.17453292519943295 },
-  { 0.34878893400762095, -0.19999999999999996, 0.34906585039886590 },
-  { 0.52269152856057410, -0.19999999999999996, 0.52359877559829882 },
-  { 0.69606913360157563, -0.19999999999999996, 0.69813170079773179 },
-  { 0.86884782374863356, -0.19999999999999996, 0.87266462599716477 },
-  { 1.0410255369689567, -0.19999999999999996, 1.0471975511965976 },
-  { 1.2126730391631360, -0.19999999999999996, 1.2217304763960306 },
-  { 1.3839259540325153, -0.19999999999999996, 1.3962634015954636 },
-  { 1.5549685462425291, -0.19999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, -0.19999999999999996, 0.0000000000000000, 0.0 },
+  { 0.17449769027652809, -0.19999999999999996, 0.17453292519943295, 0.0 },
+  { 0.34878893400762090, -0.19999999999999996, 0.34906585039886590, 0.0 },
+  { 0.52269152856057410, -0.19999999999999996, 0.52359877559829882, 0.0 },
+  { 0.69606913360157574, -0.19999999999999996, 0.69813170079773179, 0.0 },
+  { 0.86884782374863379, -0.19999999999999996, 0.87266462599716477, 0.0 },
+  { 1.0410255369689567, -0.19999999999999996, 1.0471975511965976, 0.0 },
+  { 1.2126730391631364, -0.19999999999999996, 1.2217304763960306, 0.0 },
+  { 1.3839259540325151, -0.19999999999999996, 1.3962634015954636, 0.0 },
+  { 1.5549685462425293, -0.19999999999999996, 1.5707963267948966, 0.0 },
 };
 const double toler008 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.1875595485348029e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.1875595485348024e-16
+// mean(f - f_Boost): -4.7184478546569152e-17
+// variance(f - f_Boost): 2.7486111305082032e-34
+// stddev(f - f_Boost): 1.6578935823834422e-17
 const testcase_ellint_2<double>
 data009[10] =
 {
-  { 0.0000000000000000, -0.099999999999999978, 0.0000000000000000 },
-  { 0.17452411766649939, -0.099999999999999978, 0.17453292519943295 },
-  { 0.34899665805442404, -0.099999999999999978, 0.34906585039886590 },
-  { 0.52337222400508776, -0.099999999999999978, 0.52359877559829882 },
-  { 0.69761705217284864, -0.099999999999999978, 0.69813170079773179 },
-  { 0.87171309273007491, -0.099999999999999978, 0.87266462599716477 },
-  { 1.0456602197056326, -0.099999999999999978, 1.0471975511965976 },
-  { 1.2194762899272025, -0.099999999999999978, 1.2217304763960306 },
-  { 1.3931950229892744, -0.099999999999999978, 1.3962634015954636 },
-  { 1.5668619420216685, -0.099999999999999978, 1.5707963267948966 },
+  { 0.0000000000000000, -0.099999999999999978, 0.0000000000000000, 0.0 },
+  { 0.17452411766649942, -0.099999999999999978, 0.17453292519943295, 0.0 },
+  { 0.34899665805442409, -0.099999999999999978, 0.34906585039886590, 0.0 },
+  { 0.52337222400508787, -0.099999999999999978, 0.52359877559829882, 0.0 },
+  { 0.69761705217284864, -0.099999999999999978, 0.69813170079773179, 0.0 },
+  { 0.87171309273007491, -0.099999999999999978, 0.87266462599716477, 0.0 },
+  { 1.0456602197056326, -0.099999999999999978, 1.0471975511965976, 0.0 },
+  { 1.2194762899272027, -0.099999999999999978, 1.2217304763960306, 0.0 },
+  { 1.3931950229892747, -0.099999999999999978, 1.3962634015954636, 0.0 },
+  { 1.5668619420216683, -0.099999999999999978, 1.5707963267948966, 0.0 },
 };
 const double toler009 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.1203697876423452e-16
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.1203697876423447e-16
+// mean(f - f_Boost): -1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
 const testcase_ellint_2<double>
 data010[10] =
 {
-  { 0.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
-  { 0.17453292519943292, 0.0000000000000000, 0.17453292519943295 },
-  { 0.34906585039886584, 0.0000000000000000, 0.34906585039886590 },
-  { 0.52359877559829870, 0.0000000000000000, 0.52359877559829882 },
-  { 0.69813170079773168, 0.0000000000000000, 0.69813170079773179 },
-  { 0.87266462599716477, 0.0000000000000000, 0.87266462599716477 },
-  { 1.0471975511965974, 0.0000000000000000, 1.0471975511965976 },
-  { 1.2217304763960304, 0.0000000000000000, 1.2217304763960306 },
-  { 1.3962634015954631, 0.0000000000000000, 1.3962634015954636 },
-  { 1.5707963267948966, 0.0000000000000000, 1.5707963267948966 },
+  { 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.17453292519943295, 0.0000000000000000, 0.17453292519943295, 0.0 },
+  { 0.34906585039886590, 0.0000000000000000, 0.34906585039886590, 0.0 },
+  { 0.52359877559829882, 0.0000000000000000, 0.52359877559829882, 0.0 },
+  { 0.69813170079773179, 0.0000000000000000, 0.69813170079773179, 0.0 },
+  { 0.87266462599716477, 0.0000000000000000, 0.87266462599716477, 0.0 },
+  { 1.0471975511965976, 0.0000000000000000, 1.0471975511965976, 0.0 },
+  { 1.2217304763960306, 0.0000000000000000, 1.2217304763960306, 0.0 },
+  { 1.3962634015954636, 0.0000000000000000, 1.3962634015954636, 0.0 },
+  { 1.5707963267948966, 0.0000000000000000, 1.5707963267948966, 0.0 },
 };
 const double toler010 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.1875595485348029e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.1875595485348024e-16
+// mean(f - f_Boost): -4.7184478546569152e-17
+// variance(f - f_Boost): 2.7486111305082032e-34
+// stddev(f - f_Boost): 1.6578935823834422e-17
 const testcase_ellint_2<double>
 data011[10] =
 {
-  { 0.0000000000000000, 0.10000000000000009, 0.0000000000000000 },
-  { 0.17452411766649939, 0.10000000000000009, 0.17453292519943295 },
-  { 0.34899665805442404, 0.10000000000000009, 0.34906585039886590 },
-  { 0.52337222400508776, 0.10000000000000009, 0.52359877559829882 },
-  { 0.69761705217284864, 0.10000000000000009, 0.69813170079773179 },
-  { 0.87171309273007491, 0.10000000000000009, 0.87266462599716477 },
-  { 1.0456602197056326, 0.10000000000000009, 1.0471975511965976 },
-  { 1.2194762899272025, 0.10000000000000009, 1.2217304763960306 },
-  { 1.3931950229892744, 0.10000000000000009, 1.3962634015954636 },
-  { 1.5668619420216685, 0.10000000000000009, 1.5707963267948966 },
+  { 0.0000000000000000, 0.10000000000000009, 0.0000000000000000, 0.0 },
+  { 0.17452411766649942, 0.10000000000000009, 0.17453292519943295, 0.0 },
+  { 0.34899665805442409, 0.10000000000000009, 0.34906585039886590, 0.0 },
+  { 0.52337222400508787, 0.10000000000000009, 0.52359877559829882, 0.0 },
+  { 0.69761705217284864, 0.10000000000000009, 0.69813170079773179, 0.0 },
+  { 0.87171309273007491, 0.10000000000000009, 0.87266462599716477, 0.0 },
+  { 1.0456602197056326, 0.10000000000000009, 1.0471975511965976, 0.0 },
+  { 1.2194762899272027, 0.10000000000000009, 1.2217304763960306, 0.0 },
+  { 1.3931950229892747, 0.10000000000000009, 1.3962634015954636, 0.0 },
+  { 1.5668619420216683, 0.10000000000000009, 1.5707963267948966, 0.0 },
 };
 const double toler011 = 2.5000000000000020e-13;
 
-// Test data for k=0.19999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2658819988515356e-16
+// Test data for k=0.20000000000000018.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.2658819988515356e-16
+// mean(f - f_Boost): -5.2735593669694933e-17
+// variance(f - f_Boost): 3.0473442641042680e-32
+// stddev(f - f_Boost): 1.7456644190978597e-16
 const testcase_ellint_2<double>
 data012[10] =
 {
-  { 0.0000000000000000, 0.19999999999999996, 0.0000000000000000 },
-  { 0.17449769027652812, 0.19999999999999996, 0.17453292519943295 },
-  { 0.34878893400762095, 0.19999999999999996, 0.34906585039886590 },
-  { 0.52269152856057410, 0.19999999999999996, 0.52359877559829882 },
-  { 0.69606913360157563, 0.19999999999999996, 0.69813170079773179 },
-  { 0.86884782374863356, 0.19999999999999996, 0.87266462599716477 },
-  { 1.0410255369689567, 0.19999999999999996, 1.0471975511965976 },
-  { 1.2126730391631360, 0.19999999999999996, 1.2217304763960306 },
-  { 1.3839259540325153, 0.19999999999999996, 1.3962634015954636 },
-  { 1.5549685462425291, 0.19999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, 0.20000000000000018, 0.0000000000000000, 0.0 },
+  { 0.17449769027652809, 0.20000000000000018, 0.17453292519943295, 0.0 },
+  { 0.34878893400762090, 0.20000000000000018, 0.34906585039886590, 0.0 },
+  { 0.52269152856057410, 0.20000000000000018, 0.52359877559829882, 0.0 },
+  { 0.69606913360157574, 0.20000000000000018, 0.69813170079773179, 0.0 },
+  { 0.86884782374863379, 0.20000000000000018, 0.87266462599716477, 0.0 },
+  { 1.0410255369689567, 0.20000000000000018, 1.0471975511965976, 0.0 },
+  { 1.2126730391631364, 0.20000000000000018, 1.2217304763960306, 0.0 },
+  { 1.3839259540325151, 0.20000000000000018, 1.3962634015954636, 0.0 },
+  { 1.5549685462425291, 0.20000000000000018, 1.5707963267948966, 0.0 },
 };
 const double toler012 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.3860540218057383e-16
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3401048387253188e-16
+// mean(f - f_Boost): 7.2164496600635178e-17
+// variance(f - f_Boost): 4.3555500115139682e-32
+// stddev(f - f_Boost): 2.0869954507650391e-16
 const testcase_ellint_2<double>
 data013[10] =
 {
-  { 0.0000000000000000, 0.30000000000000004, 0.0000000000000000 },
-  { 0.17445362864048913, 0.30000000000000004, 0.17453292519943295 },
-  { 0.34844223535713464, 0.30000000000000004, 0.34906585039886590 },
-  { 0.52155353877411770, 0.30000000000000004, 0.52359877559829882 },
-  { 0.69347584418369879, 0.30000000000000004, 0.69813170079773179 },
-  { 0.86403609928237668, 0.30000000000000004, 0.87266462599716477 },
-  { 1.0332234514065408, 0.30000000000000004, 1.0471975511965976 },
-  { 1.2011943182068923, 0.30000000000000004, 1.2217304763960306 },
-  { 1.3682566113689623, 0.30000000000000004, 1.3962634015954636 },
-  { 1.5348334649232491, 0.30000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, 0.30000000000000004, 0.0000000000000000, 0.0 },
+  { 0.17445362864048913, 0.30000000000000004, 0.17453292519943295, 0.0 },
+  { 0.34844223535713470, 0.30000000000000004, 0.34906585039886590, 0.0 },
+  { 0.52155353877411759, 0.30000000000000004, 0.52359877559829882, 0.0 },
+  { 0.69347584418369890, 0.30000000000000004, 0.69813170079773179, 0.0 },
+  { 0.86403609928237657, 0.30000000000000004, 0.87266462599716477, 0.0 },
+  { 1.0332234514065408, 0.30000000000000004, 1.0471975511965976, 0.0 },
+  { 1.2011943182068923, 0.30000000000000004, 1.2217304763960306, 0.0 },
+  { 1.3682566113689625, 0.30000000000000004, 1.3962634015954636, 0.0 },
+  { 1.5348334649232489, 0.30000000000000004, 1.5707963267948966, 0.0 },
 };
 const double toler013 = 2.5000000000000020e-13;
 
-// Test data for k=0.39999999999999991.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 5.8978277272530773e-16
+// Test data for k=0.40000000000000013.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.1795655454506157e-15
+// mean(f - f_Boost): 2.0816681711721685e-16
+// variance(f - f_Boost): 3.0360740073926687e-31
+// stddev(f - f_Boost): 5.5100580826273227e-16
 const testcase_ellint_2<double>
 data014[10] =
 {
-  { 0.0000000000000000, 0.39999999999999991, 0.0000000000000000 },
-  { 0.17439190872481267, 0.39999999999999991, 0.17453292519943295 },
-  { 0.34795581767099210, 0.39999999999999991, 0.34906585039886590 },
-  { 0.51995290683804463, 0.39999999999999991, 0.52359877559829882 },
-  { 0.68981638464431538, 0.39999999999999991, 0.69813170079773179 },
-  { 0.85722088859936041, 0.39999999999999991, 0.87266462599716477 },
-  { 1.0221301327876993, 0.39999999999999991, 1.0471975511965976 },
-  { 1.1848138019818373, 0.39999999999999991, 1.2217304763960306 },
-  { 1.3458259266501533, 0.39999999999999991, 1.3962634015954636 },
-  { 1.5059416123600404, 0.39999999999999991, 1.5707963267948966 },
+  { 0.0000000000000000, 0.40000000000000013, 0.0000000000000000, 0.0 },
+  { 0.17439190872481267, 0.40000000000000013, 0.17453292519943295, 0.0 },
+  { 0.34795581767099210, 0.40000000000000013, 0.34906585039886590, 0.0 },
+  { 0.51995290683804463, 0.40000000000000013, 0.52359877559829882, 0.0 },
+  { 0.68981638464431527, 0.40000000000000013, 0.69813170079773179, 0.0 },
+  { 0.85722088859936030, 0.40000000000000013, 0.87266462599716477, 0.0 },
+  { 1.0221301327876993, 0.40000000000000013, 1.0471975511965976, 0.0 },
+  { 1.1848138019818375, 0.40000000000000013, 1.2217304763960306, 0.0 },
+  { 1.3458259266501531, 0.40000000000000013, 1.3962634015954636, 0.0 },
+  { 1.5059416123600402, 0.40000000000000013, 1.5707963267948966, 0.0 },
 };
 const double toler014 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.2412420886495652e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.8178992821201131e-16
+// mean(f - f_Boost): -4.9960036108132046e-17
+// variance(f - f_Boost): 3.0133908324921077e-32
+// stddev(f - f_Boost): 1.7359121039073689e-16
 const testcase_ellint_2<double>
 data015[10] =
 {
-  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
-  { 0.17431249677315910, 0.50000000000000000, 0.17453292519943295 },
-  { 0.34732862537770803, 0.50000000000000000, 0.34906585039886590 },
-  { 0.51788193485993794, 0.50000000000000000, 0.52359877559829882 },
-  { 0.68506022954164536, 0.50000000000000000, 0.69813170079773179 },
-  { 0.84831662803347196, 0.50000000000000000, 0.87266462599716477 },
-  { 1.0075555551444717, 0.50000000000000000, 1.0471975511965976 },
-  { 1.1631768599287300, 0.50000000000000000, 1.2217304763960306 },
-  { 1.3160584048772543, 0.50000000000000000, 1.3962634015954636 },
-  { 1.4674622093394274, 0.50000000000000000, 1.5707963267948966 },
+  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 0.17431249677315908, 0.50000000000000000, 0.17453292519943295, 0.0 },
+  { 0.34732862537770803, 0.50000000000000000, 0.34906585039886590, 0.0 },
+  { 0.51788193485993794, 0.50000000000000000, 0.52359877559829882, 0.0 },
+  { 0.68506022954164547, 0.50000000000000000, 0.69813170079773179, 0.0 },
+  { 0.84831662803347208, 0.50000000000000000, 0.87266462599716477, 0.0 },
+  { 1.0075555551444719, 0.50000000000000000, 1.0471975511965976, 0.0 },
+  { 1.1631768599287302, 0.50000000000000000, 1.2217304763960306, 0.0 },
+  { 1.3160584048772548, 0.50000000000000000, 1.3962634015954636, 0.0 },
+  { 1.4674622093394272, 0.50000000000000000, 1.5707963267948966, 0.0 },
 };
 const double toler015 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.9101039108874066e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.9101039108874066e-16
+// mean(f - f_Boost): 1.9428902930940238e-17
+// variance(f - f_Boost): 7.1986981476874020e-33
+// stddev(f - f_Boost): 8.4845142157270271e-17
 const testcase_ellint_2<double>
 data016[10] =
 {
-  { 0.0000000000000000, 0.60000000000000009, 0.0000000000000000 },
-  { 0.17421534919599127, 0.60000000000000009, 0.17453292519943295 },
-  { 0.34655927787174101, 0.60000000000000009, 0.34906585039886590 },
-  { 0.51533034538432143, 0.60000000000000009, 0.52359877559829882 },
-  { 0.67916550597453018, 0.60000000000000009, 0.69813170079773179 },
-  { 0.83720218180349870, 0.60000000000000009, 0.87266462599716477 },
-  { 0.98922159354937744, 0.60000000000000009, 1.0471975511965976 },
-  { 1.1357478470419360, 0.60000000000000009, 1.2217304763960306 },
-  { 1.2780617372844056, 0.60000000000000009, 1.3962634015954636 },
-  { 1.4180833944487241, 0.60000000000000009, 1.5707963267948966 },
+  { 0.0000000000000000, 0.60000000000000009, 0.0000000000000000, 0.0 },
+  { 0.17421534919599127, 0.60000000000000009, 0.17453292519943295, 0.0 },
+  { 0.34655927787174096, 0.60000000000000009, 0.34906585039886590, 0.0 },
+  { 0.51533034538432143, 0.60000000000000009, 0.52359877559829882, 0.0 },
+  { 0.67916550597453018, 0.60000000000000009, 0.69813170079773179, 0.0 },
+  { 0.83720218180349881, 0.60000000000000009, 0.87266462599716477, 0.0 },
+  { 0.98922159354937755, 0.60000000000000009, 1.0471975511965976, 0.0 },
+  { 1.1357478470419360, 0.60000000000000009, 1.2217304763960306, 0.0 },
+  { 1.2780617372844061, 0.60000000000000009, 1.3962634015954636, 0.0 },
+  { 1.4180833944487241, 0.60000000000000009, 1.5707963267948966, 0.0 },
 };
 const double toler016 = 2.5000000000000020e-13;
 
-// Test data for k=0.69999999999999996.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 4.0435005012914979e-16
+// Test data for k=0.70000000000000018.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.5937579711009016e-16
+// mean(f - f_Boost): 6.1062266354383615e-17
+// variance(f - f_Boost): 1.8112301165881739e-32
+// stddev(f - f_Boost): 1.3458194962877355e-16
 const testcase_ellint_2<double>
 data017[10] =
 {
-  { 0.0000000000000000, 0.69999999999999996, 0.0000000000000000 },
-  { 0.17410041242702542, 0.69999999999999996, 0.17453292519943295 },
-  { 0.34564605085764760, 0.69999999999999996, 0.34906585039886590 },
-  { 0.51228495693314646, 0.69999999999999996, 0.52359877559829882 },
-  { 0.67207654098799530, 0.69999999999999996, 0.69813170079773179 },
-  { 0.82370932631556515, 0.69999999999999996, 0.87266462599716477 },
-  { 0.96672313309452795, 0.69999999999999996, 1.0471975511965976 },
-  { 1.1017090644949503, 0.69999999999999996, 1.2217304763960306 },
-  { 1.2304180097292914, 0.69999999999999996, 1.3962634015954636 },
-  { 1.3556611355719554, 0.69999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, 0.70000000000000018, 0.0000000000000000, 0.0 },
+  { 0.17410041242702540, 0.70000000000000018, 0.17453292519943295, 0.0 },
+  { 0.34564605085764760, 0.70000000000000018, 0.34906585039886590, 0.0 },
+  { 0.51228495693314657, 0.70000000000000018, 0.52359877559829882, 0.0 },
+  { 0.67207654098799519, 0.70000000000000018, 0.69813170079773179, 0.0 },
+  { 0.82370932631556493, 0.70000000000000018, 0.87266462599716477, 0.0 },
+  { 0.96672313309452806, 0.70000000000000018, 1.0471975511965976, 0.0 },
+  { 1.1017090644949501, 0.70000000000000018, 1.2217304763960306, 0.0 },
+  { 1.2304180097292916, 0.70000000000000018, 1.3962634015954636, 0.0 },
+  { 1.3556611355719552, 0.70000000000000018, 1.5707963267948966, 0.0 },
 };
 const double toler017 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.4793687438660849e-16
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.0438106231598255e-15
+// mean(f - f_Boost): 1.8318679906315082e-16
+// variance(f - f_Boost): 1.6301071049293564e-31
+// stddev(f - f_Boost): 4.0374584888632060e-16
 const testcase_ellint_2<double>
 data018[10] =
 {
-  { 0.0000000000000000, 0.80000000000000004, 0.0000000000000000 },
-  { 0.17396762274534805, 0.80000000000000004, 0.17453292519943295 },
-  { 0.34458685226969316, 0.80000000000000004, 0.34906585039886590 },
-  { 0.50872923654502433, 0.80000000000000004, 0.52359877559829882 },
-  { 0.66372016539176215, 0.80000000000000004, 0.69813170079773179 },
-  { 0.80760344410167406, 0.80000000000000004, 0.87266462599716477 },
-  { 0.93945480372495049, 0.80000000000000004, 1.0471975511965976 },
-  { 1.0597473310395036, 0.80000000000000004, 1.2217304763960306 },
-  { 1.1706981862452361, 0.80000000000000004, 1.3962634015954636 },
-  { 1.2763499431699064, 0.80000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, 0.80000000000000004, 0.0000000000000000, 0.0 },
+  { 0.17396762274534805, 0.80000000000000004, 0.17453292519943295, 0.0 },
+  { 0.34458685226969321, 0.80000000000000004, 0.34906585039886590, 0.0 },
+  { 0.50872923654502433, 0.80000000000000004, 0.52359877559829882, 0.0 },
+  { 0.66372016539176226, 0.80000000000000004, 0.69813170079773179, 0.0 },
+  { 0.80760344410167406, 0.80000000000000004, 0.87266462599716477, 0.0 },
+  { 0.93945480372495072, 0.80000000000000004, 1.0471975511965976, 0.0 },
+  { 1.0597473310395040, 0.80000000000000004, 1.2217304763960306, 0.0 },
+  { 1.1706981862452359, 0.80000000000000004, 1.3962634015954636, 0.0 },
+  { 1.2763499431699064, 0.80000000000000004, 1.5707963267948966, 0.0 },
 };
 const double toler018 = 2.5000000000000020e-13;
 
-// Test data for k=0.89999999999999991.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.7901367831880493e-16
+// Test data for k=0.90000000000000013.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 6.6116483711056727e-16
+// mean(f - f_Boost): 1.3877787807814457e-17
+// variance(f - f_Boost): 2.3776912893669577e-35
+// stddev(f - f_Boost): 4.8761575952454181e-18
 const testcase_ellint_2<double>
 data019[10] =
 {
-  { 0.0000000000000000, 0.89999999999999991, 0.0000000000000000 },
-  { 0.17381690606167960, 0.89999999999999991, 0.17453292519943295 },
-  { 0.34337919186972055, 0.89999999999999991, 0.34906585039886590 },
-  { 0.50464268659856326, 0.89999999999999991, 0.52359877559829882 },
-  { 0.65400003842368570, 0.89999999999999991, 0.69813170079773179 },
-  { 0.78854928419904657, 0.89999999999999991, 0.87266462599716477 },
-  { 0.90645698626315407, 0.89999999999999991, 1.0471975511965976 },
-  { 1.0075154899135930, 0.89999999999999991, 1.2217304763960306 },
-  { 1.0940135583194071, 0.89999999999999991, 1.3962634015954636 },
-  { 1.1716970527816144, 0.89999999999999991, 1.5707963267948966 },
+  { 0.0000000000000000, 0.90000000000000013, 0.0000000000000000, 0.0 },
+  { 0.17381690606167963, 0.90000000000000013, 0.17453292519943295, 0.0 },
+  { 0.34337919186972055, 0.90000000000000013, 0.34906585039886590, 0.0 },
+  { 0.50464268659856337, 0.90000000000000013, 0.52359877559829882, 0.0 },
+  { 0.65400003842368593, 0.90000000000000013, 0.69813170079773179, 0.0 },
+  { 0.78854928419904635, 0.90000000000000013, 0.87266462599716477, 0.0 },
+  { 0.90645698626315385, 0.90000000000000013, 1.0471975511965976, 0.0 },
+  { 1.0075154899135927, 0.90000000000000013, 1.2217304763960306, 0.0 },
+  { 1.0940135583194068, 0.90000000000000013, 1.3962634015954636, 0.0 },
+  { 1.1716970527816140, 0.90000000000000013, 1.5707963267948966, 0.0 },
 };
 const double toler019 = 2.5000000000000020e-13;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_ellint_2<Tp> (&data)[Num], Tp toler)
+  test(const testcase_ellint_2<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::ellint_2(data[i].k, data[i].phi);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::ellint_2(data[i].k, data[i].phi);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index 8a7202f..05f34c8 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for k=-0.90000000000000002, nu=0.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 2.9686139313362077e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 5.7842011620951154e-16
+// mean(f - f_Boost): 5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
 const testcase_ellint_3<double>
 data001[10] =
 {
   { 0.0000000000000000, -0.90000000000000002, 0.0000000000000000, 
-         0.0000000000000000 },
-  { 0.17525427376115024, -0.90000000000000002, 0.0000000000000000, 
-         0.17453292519943295 },
+         0.0000000000000000, 0.0 },
+  { 0.17525427376115027, -0.90000000000000002, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
   { 0.35492464591297446, -0.90000000000000002, 0.0000000000000000, 
-         0.34906585039886590 },
-  { 0.54388221416157112, -0.90000000000000002, 0.0000000000000000, 
-         0.52359877559829882 },
-  { 0.74797400423532490, -0.90000000000000002, 0.0000000000000000, 
-         0.69813170079773179 },
-  { 0.97463898451966458, -0.90000000000000002, 0.0000000000000000, 
-         0.87266462599716477 },
-  { 1.2334463254523440, -0.90000000000000002, 0.0000000000000000, 
-         1.0471975511965976 },
+         0.34906585039886590, 0.0 },
+  { 0.54388221416157123, -0.90000000000000002, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.74797400423532512, -0.90000000000000002, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.97463898451966446, -0.90000000000000002, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2334463254523438, -0.90000000000000002, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
   { 1.5355247765594913, -0.90000000000000002, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.8882928567775121, -0.90000000000000002, 0.0000000000000000, 
-         1.3962634015954636 },
+         1.2217304763960306, 0.0 },
+  { 1.8882928567775126, -0.90000000000000002, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
   { 2.2805491384227703, -0.90000000000000002, 0.0000000000000000, 
-         1.5707963267948966 },
+         1.5707963267948966, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
 // Test data for k=-0.90000000000000002, nu=0.10000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.0141810743801079e-16
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.1500594295134815e-16
+// mean(f - f_Boost): 1.0269562977782698e-16
+// variance(f - f_Boost): 1.4388836606733082e-32
+// stddev(f - f_Boost): 1.1995347684303728e-16
 const testcase_ellint_3<double>
 data002[10] =
 {
   { 0.0000000000000000, -0.90000000000000002, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17507714233254656, -0.90000000000000002, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.35350932904326521, -0.90000000000000002, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.53911129989870976, -0.90000000000000002, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.73666644254508395, -0.90000000000000002, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.95250736612100195, -0.90000000000000002, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.1950199550905594, -0.90000000000000002, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.4741687286340850, -0.90000000000000002, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.7968678183506057, -0.90000000000000002, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 2.1537868513875287, -0.90000000000000002, 0.10000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17543204932716244, -0.90000000000000002, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35636022898551184, -0.90000000000000002, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54880278898382584, -0.90000000000000002, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.75988834774529268, -0.90000000000000002, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.99853303003568117, -0.90000000000000002, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2759958823999022, -0.90000000000000002, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.6051187364639401, -0.90000000000000002, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.9941406879519472, -0.90000000000000002, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.4295011187834881, -0.90000000000000002, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
 // Test data for k=-0.90000000000000002, nu=0.20000000000000001.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.0588292817405780e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 5.2711357908578066e-16
+// mean(f - f_Boost): 8.0491169285323847e-17
+// variance(f - f_Boost): 7.9985534974304465e-34
+// stddev(f - f_Boost): 2.8281714052423424e-17
 const testcase_ellint_3<double>
 data003[10] =
 {
   { 0.0000000000000000, -0.90000000000000002, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17490065089140927, -0.90000000000000002, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.35211377590661436, -0.90000000000000002, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.53448220334204100, -0.90000000000000002, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.72591368943179579, -0.90000000000000002, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.93192539780038763, -0.90000000000000002, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 1.1600809679692683, -0.90000000000000002, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.4195407225882510, -0.90000000000000002, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.7168966476424525, -0.90000000000000002, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 2.0443194576468890, -0.90000000000000002, 0.20000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17561047321968409, -0.90000000000000002, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35781659944356109, -0.90000000000000002, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.55388150905215283, -0.90000000000000002, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.77246874123251441, -0.90000000000000002, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 1.0244466254771925, -0.90000000000000002, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.3234824077640801, -0.90000000000000002, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.6849848968804237, -0.90000000000000002, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 2.1185749045502273, -0.90000000000000002, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.6076835743348412, -0.90000000000000002, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler003 = 2.5000000000000020e-13;
 
-// Test data for k=-0.90000000000000002, nu=0.29999999999999999.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.2403611223075570e-16
+// Test data for k=-0.90000000000000002, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.9955372494296814e-16
+// mean(f - f_Boost): 5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
 const testcase_ellint_3<double>
 data004[10] =
 {
-  { 0.0000000000000000, -0.90000000000000002, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17472479532647531, -0.90000000000000002, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.35073750187374114, -0.90000000000000002, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.52998766129466957, -0.90000000000000002, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.71566993548699553, -0.90000000000000002, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.91271517762560195, -0.90000000000000002, 0.29999999999999999
-         0.87266462599716477 },
-  { 1.1281241199843370, -0.90000000000000002, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.3704929576917451, -0.90000000000000002, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.6461981511487713, -0.90000000000000002, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.9486280260314426, -0.90000000000000002, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.90000000000000002, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17578954966746221, -0.90000000000000002, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35929429810867447, -0.90000000000000002, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.55912757154240811, -0.90000000000000002, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.78578314722025389, -0.90000000000000002, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 1.0526941001131365, -0.90000000000000002, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.3769682234538601, -0.90000000000000002, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.7779437432911238, -0.90000000000000002, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 2.2676509341813631, -0.90000000000000002, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 2.8256506968858512, -0.90000000000000002, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler004 = 2.5000000000000020e-13;
 
 // Test data for k=-0.90000000000000002, nu=0.40000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3487482375512111e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.7042235432234642e-16
+// mean(f - f_Boost): 2.0261570199409106e-16
+// variance(f - f_Boost): 5.8024227149195491e-32
+// stddev(f - f_Boost): 2.4088218520512364e-16
 const testcase_ellint_3<double>
 data005[10] =
 {
   { 0.0000000000000000, -0.90000000000000002, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17454957156468837, -0.90000000000000002, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34938003933330430, -0.90000000000000002, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.52562093533067433, -0.90000000000000002, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.70589461324915670, -0.90000000000000002, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.89472658511942849, -0.90000000000000002, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 1.0987419542323440, -0.90000000000000002, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.3261349565496303, -0.90000000000000002, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.5831293909853765, -0.90000000000000002, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.8641114227238349, -0.90000000000000002, 0.40000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17596928293938452, -0.90000000000000002, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36079388642472821, -0.90000000000000002, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.56455096667115612, -0.90000000000000002, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.79990996997869435, -0.90000000000000002, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0836647913872215, -0.90000000000000002, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.4378726836091849, -0.90000000000000002, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.8880446720682853, -0.90000000000000002, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 2.4505848932025227, -0.90000000000000002, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 3.1000689868578615, -0.90000000000000002, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler005 = 2.5000000000000020e-13;
 
 // Test data for k=-0.90000000000000002, nu=0.50000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.4538944656036724e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 3.8944086593755267e-16
+// mean(f - f_Boost): 6.9388939039072284e-17
+// variance(f - f_Boost): 1.7333369499485123e-32
+// stddev(f - f_Boost): 1.3165625507162629e-16
 const testcase_ellint_3<double>
 data006[10] =
 {
   { 0.0000000000000000, -0.90000000000000002, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17437497557073334, -0.90000000000000002, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34804093691586013, -0.90000000000000002, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.52137576320372891, -0.90000000000000002, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.69655163996912262, -0.90000000000000002, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.87783188683054236, -0.90000000000000002, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 1.0716015959755185, -0.90000000000000002, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.2857636916026749, -0.90000000000000002, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.5264263913252363, -0.90000000000000002, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.7888013241937861, -0.90000000000000002, 0.50000000000000000, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17614967734498183, -0.90000000000000002, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.36231594750319435, -0.90000000000000002, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.57016256984349567, -0.90000000000000002, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.81494025918293422, -0.90000000000000002, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.1178482279283477, -0.90000000000000002, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.5081455873012106, -0.90000000000000002, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 2.0213599730863998, -0.90000000000000002, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.6822467012926827, -0.90000000000000002, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 3.4591069002104677, -0.90000000000000002, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler006 = 2.5000000000000020e-13;
 
-// Test data for k=-0.90000000000000002, nu=0.59999999999999998.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.5560830683344639e-16
+// Test data for k=-0.90000000000000002, nu=0.60000000000000009.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.0602096790645418e-16
+// mean(f - f_Boost): 1.0269562977782698e-16
+// variance(f - f_Boost): 1.4388836606733082e-32
+// stddev(f - f_Boost): 1.1995347684303728e-16
 const testcase_ellint_3<double>
 data007[10] =
 {
-  { 0.0000000000000000, -0.90000000000000002, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17420100334657812, -0.90000000000000002, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34671975876122157, -0.90000000000000002, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.51724631570707946, -0.90000000000000002, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.68760879113743023, -0.90000000000000002, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.86192157779698364, -0.90000000000000002, 0.59999999999999998
-         0.87266462599716477 },
-  { 1.0464279696166354, -0.90000000000000002, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.2488156247094007, -0.90000000000000002, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.4750988777188472, -0.90000000000000002, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.7211781128919523, -0.90000000000000002, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.90000000000000002, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17633073723493825, -0.90000000000000002, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.36386108723492810, -0.90000000000000002, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.57597424744716241, -0.90000000000000002, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.83098051948501150, -0.90000000000000002, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.1558706545698916, -0.90000000000000002, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.5905576379415669, -0.90000000000000002, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 2.1875186010215080, -0.90000000000000002, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.9885767771316849, -0.90000000000000002, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 3.9549939883570224, -0.90000000000000002, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler007 = 2.5000000000000020e-13;
 
-// Test data for k=-0.90000000000000002, nu=0.69999999999999996.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.4833366769839281e-16
+// Test data for k=-0.90000000000000002, nu=0.70000000000000007.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.1938610791060186e-16
+// mean(f - f_Boost): 3.0253577421035517e-16
+// variance(f - f_Boost): 4.2342877557562532e-32
+// stddev(f - f_Boost): 2.0577385051935665e-16
 const testcase_ellint_3<double>
 data008[10] =
 {
-  { 0.0000000000000000, -0.90000000000000002, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17402765093102207, -0.90000000000000002, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34541608382635131, -0.90000000000000002, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.51322715827061682, -0.90000000000000002, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.67903717872440272, -0.90000000000000002, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.84690113601682671, -0.90000000000000002, 0.69999999999999996
-         0.87266462599716477 },
-  { 1.0229914311548418, -0.90000000000000002, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.2148329639709381, -0.90000000000000002, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.4283586501307803, -0.90000000000000002, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.6600480747670940, -0.90000000000000002, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.90000000000000002, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17651246700160939, -0.90000000000000002, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.36542993547358982, -0.90000000000000002, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.58199897877674867, -0.90000000000000002, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.84815633587352857, -0.90000000000000002, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.1985495623872375, -0.90000000000000002, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.6892158134027688, -0.90000000000000002, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 2.4029722191094236, -0.90000000000000002, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 3.4201084941340052, -0.90000000000000002, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 4.6985482312992435, -0.90000000000000002, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler008 = 2.5000000000000020e-13;
 
 // Test data for k=-0.90000000000000002, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.7525301941362493e-16
+// max(|f - f_Boost|): 2.6645352591003757e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 6.5091520146032660e-16
+// mean(f - f_Boost): 2.8310687127941490e-16
+// variance(f - f_Boost): 9.8950000698295322e-33
+// stddev(f - f_Boost): 9.9473614943006532e-17
 const testcase_ellint_3<double>
 data009[10] =
 {
   { 0.0000000000000000, -0.90000000000000002, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17385491439925146, -0.90000000000000002, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.34412950523113928, -0.90000000000000002, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.50931321668729590, -0.90000000000000002, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.67081081392296327, -0.90000000000000002, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.83268846097293259, -0.90000000000000002, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 1.0010985015814027, -0.90000000000000002, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 1.1834394045489680, -0.90000000000000002, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.3855695891683186, -0.90000000000000002, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.6044591960982202, -0.90000000000000002, 0.80000000000000004, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17669487107954862, -0.90000000000000002, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36702314729628421, -0.90000000000000002, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.58825099711365492, -0.90000000000000002, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.86661711422209031, -0.90000000000000002, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.2469779109884802, -0.90000000000000002, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.8105469760531578, -0.90000000000000002, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.6989505165893752, -0.90000000000000002, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 4.0935213267757424, -0.90000000000000002, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 5.9820740813645710, -0.90000000000000002, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler009 = 2.5000000000000020e-13;
 
 // Test data for k=-0.90000000000000002, nu=0.90000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8471853989694167e-16
+// max(|f - f_Boost|): 4.4408920985006262e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 8.2628580104449673e-16
+// mean(f - f_Boost): 8.5764728652293339e-16
+// variance(f - f_Boost): 8.9671393318321280e-31
+// stddev(f - f_Boost): 9.4694980499666013e-16
 const testcase_ellint_3<double>
 data010[10] =
 {
   { 0.0000000000000000, -0.90000000000000002, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17368278986240135, -0.90000000000000002, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.34285962963961397, -0.90000000000000002, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.50549974644993312, -0.90000000000000002, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.66290623857720876, -0.90000000000000002, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.81921183128847175, -0.90000000000000002, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.98058481956066390, -0.90000000000000002, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 1.1543223520473569, -0.90000000000000002, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.3462119782292938, -0.90000000000000002, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.5536420236310946, -0.90000000000000002, 0.90000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17687795394604169, -0.90000000000000002, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36864140434751286, -0.90000000000000002, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.59474595366817051, -0.90000000000000002, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.88654237226056665, -0.90000000000000002, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.3026595810616726, -0.90000000000000002, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.9653635459278078, -0.90000000000000002, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 3.1451407527189463, -0.90000000000000002, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 5.3745230680316114, -0.90000000000000002, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 8.9942562031858682, -0.90000000000000002, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler010 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004, nu=0.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1175183168766718e-16
+// max(|f - f_Boost|): 1.5543122344752192e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.7898565163847540e-16
+// mean(f - f_Boost): 2.3869795029440865e-16
+// variance(f - f_Boost): 2.1368406725192426e-31
+// stddev(f - f_Boost): 4.6225974002926564e-16
 const testcase_ellint_3<double>
 data011[10] =
 {
   { 0.0000000000000000, -0.80000000000000004, 0.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 0.17510154241338899, -0.80000000000000004, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.35365068839779390, -0.80000000000000004, 0.0000000000000000, 
-         0.34906585039886590 },
+         0.17453292519943295, 0.0 },
+  { 0.35365068839779396, -0.80000000000000004, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
   { 0.53926804409084550, -0.80000000000000004, 0.0000000000000000, 
-         0.52359877559829882 },
-  { 0.73587926028070361, -0.80000000000000004, 0.0000000000000000, 
-         0.69813170079773179 },
+         0.52359877559829882, 0.0 },
+  { 0.73587926028070372, -0.80000000000000004, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
   { 0.94770942970071170, -0.80000000000000004, 0.0000000000000000, 
-         0.87266462599716477 },
+         0.87266462599716477, 0.0 },
   { 1.1789022995388236, -0.80000000000000004, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.4323027881876009, -0.80000000000000004, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.7069629739121674, -0.80000000000000004, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 1.9953027776647296, -0.80000000000000004, 0.0000000000000000, 
-         1.5707963267948966 },
+         1.0471975511965976, 0.0 },
+  { 1.4323027881876012, -0.80000000000000004, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.7069629739121677, -0.80000000000000004, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.9953027776647294, -0.80000000000000004, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler011 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004, nu=0.10000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1537164503193145e-16
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 8.3898786942190374e-16
+// mean(f - f_Boost): 2.3869795029440865e-16
+// variance(f - f_Boost): 2.9190059990693968e-31
+// stddev(f - f_Boost): 5.4027826155319237e-16
 const testcase_ellint_3<double>
 data012[10] =
 {
   { 0.0000000000000000, -0.80000000000000004, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17492468824017163, -0.80000000000000004, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.35224443521476911, -0.80000000000000004, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.53456851853226950, -0.80000000000000004, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.72488875602364922, -0.80000000000000004, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.92661354274638952, -0.80000000000000004, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.1432651144499075, -0.80000000000000004, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.3774479927211429, -0.80000000000000004, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.6287092337196041, -0.80000000000000004, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.8910755418379521, -0.80000000000000004, 0.10000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17527903952342144, -0.80000000000000004, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35507705313548549, -0.80000000000000004, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54411455987643553, -0.80000000000000004, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.74745625666804383, -0.80000000000000004, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.97046953684238557, -0.80000000000000004, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2183080025184605, -0.80000000000000004, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4943711151994405, -0.80000000000000004, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.7972401309544201, -0.80000000000000004, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.1172616484005085, -0.80000000000000004, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler012 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004, nu=0.20000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1894552974436829e-16
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.8513740186068518e-16
+// mean(f - f_Boost): 2.8310687127941490e-16
+// variance(f - f_Boost): 2.7528339102381189e-31
+// stddev(f - f_Boost): 5.2467455724840699e-16
 const testcase_ellint_3<double>
 data013[10] =
 {
   { 0.0000000000000000, -0.80000000000000004, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17474847286224940, -0.80000000000000004, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.35085779529084682, -0.80000000000000004, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.53000829263059146, -0.80000000000000004, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.71443466027453384, -0.80000000000000004, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.90698196872715420, -0.80000000000000004, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 1.1108198200558579, -0.80000000000000004, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.3284988909963957, -0.80000000000000004, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.5600369318140328, -0.80000000000000004, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.8007226661734588, -0.80000000000000004, 0.20000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17545718375086419, -0.80000000000000004, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35652404627248163, -0.80000000000000004, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54911638512920913, -0.80000000000000004, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.75967684282131176, -0.80000000000000004, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.99513526893543769, -0.80000000000000004, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2622192109995993, -0.80000000000000004, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.5654106676347741, -0.80000000000000004, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.9029531718534984, -0.80000000000000004, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.2624789434186798, -0.80000000000000004, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler013 = 2.5000000000000020e-13;
 
-// Test data for k=-0.80000000000000004, nu=0.29999999999999999.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2247517409029886e-16
+// Test data for k=-0.80000000000000004, nu=0.30000000000000004.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.2825261583337354e-16
+// mean(f - f_Boost): 2.6367796834847468e-16
+// variance(f - f_Boost): 2.8249350208968825e-31
+// stddev(f - f_Boost): 5.3150117788175054e-16
 const testcase_ellint_3<double>
 data014[10] =
 {
-  { 0.0000000000000000, -0.80000000000000004, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17457289217669889, -0.80000000000000004, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34949028801501258, -0.80000000000000004, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.52558024362769307, -0.80000000000000004, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.70447281740094891, -0.80000000000000004, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.88864745641528986, -0.80000000000000004, 0.29999999999999999
-         0.87266462599716477 },
-  { 1.0811075819341462, -0.80000000000000004, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.2844589654082377, -0.80000000000000004, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.4991461361277847, -0.80000000000000004, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.7214611048717301, -0.80000000000000004, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.80000000000000004, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17563597931587369, -0.80000000000000004, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35799220412005128, -0.80000000000000004, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.55428253691111318, -0.80000000000000004, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.77260647376977365, -0.80000000000000004, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 1.0220015271210958, -0.80000000000000004, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.3115965312302671, -0.80000000000000004, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.6478518468813512, -0.80000000000000004, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 2.0290458414203481, -0.80000000000000004, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 2.4392042002725693, -0.80000000000000004, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler014 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004, nu=0.40000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2596216594752862e-16
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 8.3462748389836647e-16
+// mean(f - f_Boost): 3.3861802251067273e-16
+// variance(f - f_Boost): 4.3719465706454422e-31
+// stddev(f - f_Boost): 6.6120696991527871e-16
 const testcase_ellint_3<double>
 data015[10] =
 {
   { 0.0000000000000000, -0.80000000000000004, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17439794211872175, -0.80000000000000004, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34814144964568972, -0.80000000000000004, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.52127776285273064, -0.80000000000000004, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.69496411438966588, -0.80000000000000004, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.87146878427509589, -0.80000000000000004, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 1.0537579024937762, -0.80000000000000004, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.2445534387922637, -0.80000000000000004, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.4446769766361993, -0.80000000000000004, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.6512267838651289, -0.80000000000000004, 0.40000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17581543047866136, -0.80000000000000004, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35948208343061633, -0.80000000000000004, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.55962280893702021, -0.80000000000000004, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.78632063889234116, -0.80000000000000004, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0514333069550323, -0.80000000000000004, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.3677213138838757, -0.80000000000000004, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.7451736773665165, -0.80000000000000004, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 2.1830100424586831, -0.80000000000000004, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.6604037035529724, -0.80000000000000004, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler015 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004, nu=0.50000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2940800093915668e-16
+// max(|f - f_Boost|): 2.6645352591003757e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 9.0388243828581744e-16
+// mean(f - f_Boost): 3.8580250105724191e-16
+// variance(f - f_Boost): 6.4106456575047741e-31
+// stddev(f - f_Boost): 8.0066507713929764e-16
 const testcase_ellint_3<double>
 data016[10] =
 {
   { 0.0000000000000000, -0.80000000000000004, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17422361866118044, -0.80000000000000004, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34681083254170475, -0.80000000000000004, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.51709470815494440, -0.80000000000000004, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.68587375344080237, -0.80000000000000004, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.85532571852810624, -0.80000000000000004, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 1.0284677391874903, -0.80000000000000004, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.2081693942686225, -0.80000000000000004, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.3955803006426311, -0.80000000000000004, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.5884528947755532, -0.80000000000000004, 0.50000000000000000, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17599554153999472, -0.80000000000000004, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.36099426243351540, -0.80000000000000004, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.56514786174780673, -0.80000000000000004, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.80090697622371010, -0.80000000000000004, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0838891627679339, -0.80000000000000004, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.4323506654466280, -0.80000000000000004, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.8625761085390575, -0.80000000000000004, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.3768757305654766, -0.80000000000000004, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.9478781158239746, -0.80000000000000004, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler016 = 2.5000000000000020e-13;
 
-// Test data for k=-0.80000000000000004, nu=0.59999999999999998.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3281408974056389e-16
+// Test data for k=-0.80000000000000004, nu=0.60000000000000009.
+// max(|f - f_Boost|): 3.5527136788005009e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.0631099169042069e-15
+// mean(f - f_Boost): 4.8294701571194306e-16
+// variance(f - f_Boost): 1.1633910328160319e-30
+// stddev(f - f_Boost): 1.0786060600682865e-15
 const testcase_ellint_3<double>
 data017[10] =
 {
-  { 0.0000000000000000, -0.80000000000000004, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17404991781414089, -0.80000000000000004, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34549800443625167, -0.80000000000000004, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.51302536167001545, -0.80000000000000004, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.67717065003912236, -0.80000000000000004, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.84011512421134416, -0.80000000000000004, 0.59999999999999998
-         0.87266462599716477 },
-  { 1.0049863847088740, -0.80000000000000004, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.1748145941898920, -0.80000000000000004, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.3510319699755071, -0.80000000000000004, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.5319262547427865, -0.80000000000000004, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.80000000000000004, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17617631684170665, -0.80000000000000004, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.36252934193666231, -0.80000000000000004, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.57086932622945163, -0.80000000000000004, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.81646796740150973, -0.80000000000000004, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.1199552158519064, -0.80000000000000004, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.5079766673336394, -0.80000000000000004, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 2.0082747447038165, -0.80000000000000004, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.6315146066775523, -0.80000000000000004, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 3.3418121892288051, -0.80000000000000004, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler017 = 2.5000000000000020e-13;
 
-// Test data for k=-0.80000000000000004, nu=0.69999999999999996.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3618176466061808e-16
+// Test data for k=-0.80000000000000004, nu=0.70000000000000007.
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.6544679145741375e-16
+// mean(f - f_Boost): 3.2751579226442120e-16
+// variance(f - f_Boost): 4.4236851331020672e-31
+// stddev(f - f_Boost): 6.6510789599147505e-16
 const testcase_ellint_3<double>
 data018[10] =
 {
-  { 0.0000000000000000, -0.80000000000000004, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17387683562442199, -0.80000000000000004, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34420254775101611, -0.80000000000000004, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.50906439222143673, -0.80000000000000004, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.66882693152688422, -0.80000000000000004, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.82574792844091316, -0.80000000000000004, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.98310431309490931, -0.80000000000000004, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.1440884535113258, -0.80000000000000004, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.3103743938952537, -0.80000000000000004, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.4806912324625332, -0.80000000000000004, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.80000000000000004, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17635776076721221, -0.80000000000000004, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.36408794649916976, -0.80000000000000004, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.57679992290624138, -0.80000000000000004, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.83312441418142813, -0.80000000000000004, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.1603958891464856, -0.80000000000000004, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.5982855143796213, -0.80000000000000004, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 2.1962484408371821, -0.80000000000000004, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.9873281786111869, -0.80000000000000004, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 3.9268876980046397, -0.80000000000000004, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler018 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3951228558314112e-16
+// max(|f - f_Boost|): 4.4408920985006262e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 9.0176949165011079e-16
+// mean(f - f_Boost): 7.0499162063697436e-16
+// variance(f - f_Boost): 1.7230805408026989e-30
+// stddev(f - f_Boost): 1.3126616246400665e-15
 const testcase_ellint_3<double>
 data019[10] =
 {
   { 0.0000000000000000, -0.80000000000000004, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17370436817515203, -0.80000000000000004, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.34292405894783395, -0.80000000000000004, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.50520682176250076, -0.80000000000000004, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.66081751679736178, -0.80000000000000004, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.81214672249355102, -0.80000000000000004, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.96264481387685552, -0.80000000000000004, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 1.1156611352656258, -0.80000000000000004, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.2730756225143889, -0.80000000000000004, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.4339837018309471, -0.80000000000000004, 0.80000000000000004, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17653987774203392, -0.80000000000000004, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36567072568046877, -0.80000000000000004, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.58295359996558616, -0.80000000000000004, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.85101998309176108, -0.80000000000000004, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.2062322059736537, -0.80000000000000004, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.7090321420917429, -0.80000000000000004, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.4529058049405066, -0.80000000000000004, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 3.5368893360106948, -0.80000000000000004, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 4.9246422058196062, -0.80000000000000004, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler019 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004, nu=0.90000000000000002.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 4.4280684534289690e-16
+// max(|f - f_Boost|): 4.4408920985006262e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.7782721357365268e-16
+// mean(f - f_Boost): 8.9928064994637676e-16
+// variance(f - f_Boost): 1.5485199571025344e-30
+// stddev(f - f_Boost): 1.2443954183066307e-15
 const testcase_ellint_3<double>
 data020[10] =
 {
   { 0.0000000000000000, -0.80000000000000004, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17353251158533151, -0.80000000000000004, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.34166214791545768, -0.80000000000000004, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.50144799535130569, -0.80000000000000004, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.65311976193814425, -0.80000000000000004, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.79924384892320866, -0.80000000000000004, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.94345762353365603, -0.80000000000000004, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 1.0892582069219161, -0.80000000000000004, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.2387000876610268, -0.80000000000000004, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.3911845406776222, -0.80000000000000004, 0.90000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17672267223433513, -0.80000000000000004, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36727835537196063, -0.80000000000000004, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.58934569363716649, -0.80000000000000004, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.87032723471138851, -0.80000000000000004, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.2588676111323349, -0.80000000000000004, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.8498731900660019, -0.80000000000000004, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.8368381299300420, -0.80000000000000004, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 4.5674844191654058, -0.80000000000000004, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 7.2263259298637115, -0.80000000000000004, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler020 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996, nu=0.0000000000000000.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.5930208052157665e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.5425633303580569e-16
+// mean(f - f_Boost): 7.7715611723760953e-17
+// variance(f - f_Boost): 7.4564398834547797e-34
+// stddev(f - f_Boost): 2.7306482533374340e-17
 const testcase_ellint_3<double>
 data021[10] =
 {
   { 0.0000000000000000, -0.69999999999999996, 0.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 0.17496737466916723, -0.69999999999999996, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.35254687535677925, -0.69999999999999996, 0.0000000000000000, 
-         0.34906585039886590 },
-  { 0.53536740275997119, -0.69999999999999996, 0.0000000000000000, 
-         0.52359877559829882 },
+         0.17453292519943295, 0.0 },
+  { 0.35254687535677931, -0.69999999999999996, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.53536740275997130, -0.69999999999999996, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
   { 0.72603797651684454, -0.69999999999999996, 0.0000000000000000, 
-         0.69813170079773179 },
-  { 0.92698296348313458, -0.69999999999999996, 0.0000000000000000, 
-         0.87266462599716477 },
+         0.69813170079773179, 0.0 },
+  { 0.92698296348313447, -0.69999999999999996, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
   { 1.1400447527693316, -0.69999999999999996, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.3657668117194073, -0.69999999999999996, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.6024686895959159, -0.69999999999999996, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 1.8456939983747236, -0.69999999999999996, 0.0000000000000000, 
-         1.5707963267948966 },
+         1.0471975511965976, 0.0 },
+  { 1.3657668117194071, -0.69999999999999996, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.6024686895959162, -0.69999999999999996, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.8456939983747234, -0.69999999999999996, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler021 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996, nu=0.10000000000000001.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.6735282577377367e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.2736371663370261e-16
+// mean(f - f_Boost): 8.8817841970012528e-17
+// variance(f - f_Boost): 9.7390235212470591e-34
+// stddev(f - f_Boost): 3.1207408609570677e-17
 const testcase_ellint_3<double>
 data022[10] =
 {
   { 0.0000000000000000, -0.69999999999999996, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17479076384884684, -0.69999999999999996, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.35114844900396364, -0.69999999999999996, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.53072776947527001, -0.69999999999999996, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.71530198262386235, -0.69999999999999996, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.90666760677828306, -0.69999999999999996, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.1063366517438080, -0.69999999999999996, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.3149477243092149, -0.69999999999999996, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.5314886725038925, -0.69999999999999996, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.7528050171757608, -0.69999999999999996, 0.10000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17514462737300920, -0.69999999999999996, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35396527997470451, -0.69999999999999996, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54015179589433981, -0.69999999999999996, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.73734430854477728, -0.69999999999999996, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.94888950796697047, -0.69999999999999996, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1772807959736322, -0.69999999999999996, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4231796401075831, -0.69999999999999996, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6841856799887469, -0.69999999999999996, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.9541347343119562, -0.69999999999999996, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler022 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996, nu=0.20000000000000001.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.7517969287516802e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.9907249355047774e-16
+// mean(f - f_Boost): 3.3306690738754695e-17
+// variance(f - f_Boost): 1.3695501826753678e-34
+// stddev(f - f_Boost): 1.1702778228589003e-17
 const testcase_ellint_3<double>
 data023[10] =
 {
   { 0.0000000000000000, -0.69999999999999996, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17461479077791475, -0.69999999999999996, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34976950621407538, -0.69999999999999996, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.52622533231350177, -0.69999999999999996, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.70508774017895215, -0.69999999999999996, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.88775302531730294, -0.69999999999999996, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 1.0756195476149006, -0.69999999999999996, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.2695349716654374, -0.69999999999999996, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.4690814617070540, -0.69999999999999996, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.6721098780092145, -0.69999999999999996, 0.20000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17532252613350796, -0.69999999999999996, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35540417596807522, -0.69999999999999996, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54508913033361928, -0.69999999999999996, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.74927635777718415, -0.69999999999999996, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.97261706337936338, -0.69999999999999996, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2187303976209327, -0.69999999999999996, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4887796709222487, -0.69999999999999996, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.7796581281839212, -0.69999999999999996, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.0829290325820202, -0.69999999999999996, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler023 = 2.5000000000000020e-13;
 
-// Test data for k=-0.69999999999999996, nu=0.29999999999999999.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8280039841080712e-16
+// Test data for k=-0.69999999999999996, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.6912897610535316e-16
+// mean(f - f_Boost): 1.6653345369377347e-17
+// variance(f - f_Boost): 2.6207864467918357e-32
+// stddev(f - f_Boost): 1.6188843216214787e-16
 const testcase_ellint_3<double>
 data024[10] =
 {
-  { 0.0000000000000000, -0.69999999999999996, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17443945136076175, -0.69999999999999996, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34840956983535287, -0.69999999999999996, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.52185308551329168, -0.69999999999999996, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.69535240431168255, -0.69999999999999996, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.87007983473964923, -0.69999999999999996, 0.29999999999999999
-         0.87266462599716477 },
-  { 1.0474657975577066, -0.69999999999999996, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.2286225419931891, -0.69999999999999996, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.4136490671013271, -0.69999999999999996, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.6011813647733213, -0.69999999999999996, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.69999999999999996, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17550107516328570, -0.69999999999999996, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35686409576571959, -0.69999999999999996, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.55018827316513352, -0.69999999999999996, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.76189759494390275, -0.69999999999999996, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.99844623430885615, -0.69999999999999996, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.2652862989039833, -0.69999999999999996, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.5647666808691361, -0.69999999999999996, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.8932499694938163, -0.69999999999999996, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 2.2392290510988535, -0.69999999999999996, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler024 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996, nu=0.40000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3472957053482092e-16
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 6.5578567644745380e-16
+// mean(f - f_Boost): 1.4710455076283324e-16
+// variance(f - f_Boost): 2.6715739327327140e-33
+// stddev(f - f_Boost): 5.1687270509601433e-17
 const testcase_ellint_3<double>
 data025[10] =
 {
   { 0.0000000000000000, -0.69999999999999996, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17426474153983229, -0.69999999999999996, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34706817945773732, -0.69999999999999996, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.51760452851738148, -0.69999999999999996, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.68605801534722755, -0.69999999999999996, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.85351339387296532, -0.69999999999999996, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 1.0215297967969539, -0.69999999999999996, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.1915051074460530, -0.69999999999999996, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.3639821911744707, -0.69999999999999996, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.5382162002954762, -0.69999999999999996, 0.40000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17568027871494424, -0.69999999999999996, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35834559208180261, -0.69999999999999996, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.55545885451190613, -0.69999999999999996, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.77528120402568101, -0.69999999999999996, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0267241287600319, -0.69999999999999996, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.3181380338980246, -0.69999999999999996, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.6542840785132085, -0.69999999999999996, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 2.0315595131131818, -0.69999999999999996, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.4342502915307875, -0.69999999999999996, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler025 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996, nu=0.50000000000000000.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.9748346743390620e-16
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 6.0416041815443256e-16
+// mean(f - f_Boost): 1.9151347174783951e-16
+// variance(f - f_Boost): 7.8758646268991113e-33
+// stddev(f - f_Boost): 8.8746068233466605e-17
 const testcase_ellint_3<double>
 data026[10] =
 {
   { 0.0000000000000000, -0.69999999999999996, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17409065729516096, -0.69999999999999996, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34574489064986091, -0.69999999999999996, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.51347361925579782, -0.69999999999999996, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.67717079489579279, -0.69999999999999996, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.83793902055292280, -0.69999999999999996, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.99752863545289705, -0.69999999999999996, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.1576240080401501, -0.69999999999999996, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.3191464023923762, -0.69999999999999996, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.4818433192178544, -0.69999999999999996, 0.50000000000000000, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17586014108156545, -0.69999999999999996, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35984923894341653, -0.69999999999999996, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.56091135606739995, -0.69999999999999996, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.78951212635197054, -0.69999999999999996, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0578865732938729, -0.69999999999999996, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.3789149005151722, -0.69999999999999996, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.7620212286086225, -0.69999999999999996, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.2051554347435585, -0.69999999999999996, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.6868019968236991, -0.69999999999999996, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler026 = 2.5000000000000020e-13;
 
-// Test data for k=-0.69999999999999996, nu=0.59999999999999998.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 4.0457157538295173e-16
+// Test data for k=-0.69999999999999996, nu=0.60000000000000009.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.6515644573247170e-16
+// mean(f - f_Boost): 9.9920072216264091e-17
+// variance(f - f_Boost): 1.2325951644078310e-33
+// stddev(f - f_Boost): 3.5108334685767011e-17
 const testcase_ellint_3<double>
 data027[10] =
 {
-  { 0.0000000000000000, -0.69999999999999996, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17391719464391614, -0.69999999999999996, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34443927423869031, -0.69999999999999996, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.50945473266486063, -0.69999999999999996, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.66866056326513812, -0.69999999999999996, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.82325830002337352, -0.69999999999999996, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.97522808245669368, -0.69999999999999996, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.1265300613705285, -0.69999999999999996, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.2784066076152001, -0.69999999999999996, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.4309994736080540, -0.69999999999999996, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.69999999999999996, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17604066659721918, -0.69999999999999996, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.36137563278353424, -0.69999999999999996, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.56655721272747606, -0.69999999999999996, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.80468966552978305, -0.69999999999999996, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0924902943683852, -0.69999999999999996, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.4499247992499797, -0.69999999999999996, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.8953714382113815, -0.69999999999999996, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.4323229949248670, -0.69999999999999996, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 3.0314573496746742, -0.69999999999999996, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler027 = 2.5000000000000020e-13;
 
-// Test data for k=-0.69999999999999996, nu=0.69999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 5.4867405596732161e-16
+// Test data for k=-0.69999999999999996, nu=0.70000000000000007.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.8475278552871384e-16
+// mean(f - f_Boost): 9.9920072216264091e-17
+// variance(f - f_Boost): 1.2325951644078310e-33
+// stddev(f - f_Boost): 3.5108334685767011e-17
 const testcase_ellint_3<double>
 data028[10] =
 {
-  { 0.0000000000000000, -0.69999999999999996, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17374434963995031, -0.69999999999999996, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34315091562900674, -0.69999999999999996, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.50554262375653347, -0.69999999999999996, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.66050025406305801, -0.69999999999999996, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.80938620118847404, -0.69999999999999996, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.95443223855852144, -0.69999999999999996, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.0978573207128304, -0.69999999999999996, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.2411754575007123, -0.69999999999999996, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.3848459188329196, -0.69999999999999996, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.69999999999999996, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17622185963747933, -0.69999999999999996, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.36292539360435261, -0.69999999999999996, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.57240892970150015, -0.69999999999999996, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.82093084713182629, -0.69999999999999996, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.1312609022179871, -0.69999999999999996, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.5345768067715795, -0.69999999999999996, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 2.0668847445934420, -0.69999999999999996, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.7483444537551240, -0.69999999999999996, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 3.5408408771788560, -0.69999999999999996, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler028 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1829502028913879e-16
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 6.8664526853112274e-16
+// mean(f - f_Boost): 1.6930901125533636e-16
+// variance(f - f_Boost): 3.5389557150937801e-33
+// stddev(f - f_Boost): 5.9489122661994095e-17
 const testcase_ellint_3<double>
 data029[10] =
 {
   { 0.0000000000000000, -0.69999999999999996, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17357211837335740, -0.69999999999999996, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.34187941416012108, -0.69999999999999996, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.50173239465478259, -0.69999999999999996, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.65266550725988315, -0.69999999999999996, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.79624879865249298, -0.69999999999999996, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.93497577043296920, -0.69999999999999996, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 1.0713041566930750, -0.69999999999999996, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.2069772023255654, -0.69999999999999996, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.3427110650397531, -0.69999999999999996, 0.80000000000000004, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17640372461994805, -0.69999999999999996, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36449916621651091, -0.69999999999999996, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.57848021800372573, -0.69999999999999996, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.83837480968392586, -0.69999999999999996, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1751669030061143, -0.69999999999999996, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.6381851899173601, -0.69999999999999996, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.3002065924302197, -0.69999999999999996, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 3.2337600665337862, -0.69999999999999996, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 4.4042405729076961, -0.69999999999999996, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler029 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996, nu=0.90000000000000002.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2494869624129105e-16
+// max(|f - f_Boost|): 3.5527136788005009e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 8.5869439826269878e-16
+// mean(f - f_Boost): 6.7723604502134545e-16
+// variance(f - f_Boost): 4.8757508225668289e-31
+// stddev(f - f_Boost): 6.9826576763914390e-16
 const testcase_ellint_3<double>
 data030[10] =
 {
   { 0.0000000000000000, -0.69999999999999996, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17340049697003637, -0.69999999999999996, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.34062438249741556, -0.69999999999999996, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.49801946510076867, -0.69999999999999996, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.64513432604750476, -0.69999999999999996, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.78378145487573758, -0.69999999999999996, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.91671799500854623, -0.69999999999999996, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 1.0466193579463123, -0.69999999999999996, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.1754218079199146, -0.69999999999999996, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.3040500499695913, -0.69999999999999996, 0.90000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17658626600478800, -0.69999999999999996, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36609762156017206, -0.69999999999999996, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.58478615187842409, -0.69999999999999996, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.85718862878291846, -0.69999999999999996, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.2255385617397643, -0.69999999999999996, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.7696521899992939, -0.69999999999999996, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.6476314987883502, -0.69999999999999996, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 4.1373434902898083, -0.69999999999999996, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 6.3796094177887746, -0.69999999999999996, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler030 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998, nu=0.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 2.8964816695821429e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.3664899092028927e-16
+// mean(f - f_Boost): 5.2735593669694933e-17
+// variance(f - f_Boost): 3.4333862218458872e-34
+// stddev(f - f_Boost): 1.8529398861932589e-17
 const testcase_ellint_3<double>
 data031[10] =
 {
   { 0.0000000000000000, -0.59999999999999998, 0.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 0.17485154362988359, -0.59999999999999998, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.35160509865544326, -0.59999999999999998, 0.0000000000000000, 
-         0.34906585039886590 },
+         0.17453292519943295, 0.0 },
+  { 0.35160509865544320, -0.59999999999999998, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
   { 0.53210652578446138, -0.59999999999999998, 0.0000000000000000, 
-         0.52359877559829882 },
+         0.52359877559829882, 0.0 },
   { 0.71805304664485659, -0.59999999999999998, 0.0000000000000000, 
-         0.69813170079773179 },
-  { 0.91082759030195970, -0.59999999999999998, 0.0000000000000000, 
-         0.87266462599716477 },
+         0.69813170079773179, 0.0 },
+  { 0.91082759030195981, -0.59999999999999998, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
   { 1.1112333229323361, -0.59999999999999998, 0.0000000000000000, 
-         1.0471975511965976 },
+         1.0471975511965976, 0.0 },
   { 1.3191461190365270, -0.59999999999999998, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.5332022105084773, -0.59999999999999998, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 1.7507538029157526, -0.59999999999999998, 0.0000000000000000, 
-         1.5707963267948966 },
+         1.2217304763960306, 0.0 },
+  { 1.5332022105084779, -0.59999999999999998, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.7507538029157523, -0.59999999999999998, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler031 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998, nu=0.10000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 2.6674242225057385e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.2335247010355137e-16
+// mean(f - f_Boost): 8.6042284408449634e-17
+// variance(f - f_Boost): 2.2835347143080263e-33
+// stddev(f - f_Boost): 4.7786344433405099e-17
 const testcase_ellint_3<double>
 data032[10] =
 {
   { 0.0000000000000000, -0.59999999999999998, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17467514275022011, -0.59999999999999998, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.35021333086258255, -0.59999999999999998, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.52751664092962691, -0.59999999999999998, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.70752126971957874, -0.59999999999999998, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.89111058756112871, -0.59999999999999998, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.0789241202877768, -0.59999999999999998, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.2710800210399946, -0.59999999999999998, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.4669060574440276, -0.59999999999999998, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.6648615773343014, -0.59999999999999998, 0.10000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17502858548476194, -0.59999999999999998, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35301673150537388, -0.59999999999999998, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53683932476326812, -0.59999999999999998, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72914228589586771, -0.59999999999999998, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.93208036718354692, -0.59999999999999998, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1468984688863377, -0.59999999999999998, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3733904977062528, -0.59999999999999998, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6094225663372157, -0.59999999999999998, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8508766487100685, -0.59999999999999998, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler032 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998, nu=0.20000000000000001.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1891472451898755e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.0940560416437693e-16
+// mean(f - f_Boost): 4.1633363423443370e-17
+// variance(f - f_Boost): 8.5834655546147173e-33
+// stddev(f - f_Boost): 9.2646994309662939e-17
 const testcase_ellint_3<double>
 data033[10] =
 {
   { 0.0000000000000000, -0.59999999999999998, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17449937871800650, -0.59999999999999998, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34884093647346553, -0.59999999999999998, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.52306221119844087, -0.59999999999999998, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.69749955678982223, -0.59999999999999998, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.87274610682416853, -0.59999999999999998, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 1.0494620540750792, -0.59999999999999998, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.2280847305507339, -0.59999999999999998, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.4085436279696886, -0.59999999999999998, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.5901418016279374, -0.59999999999999998, 0.20000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17520627248155893, -0.59999999999999998, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35444873935437748, -0.59999999999999998, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54172310557682524, -0.59999999999999998, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.74084300280734672, -0.59999999999999998, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.95509001527006121, -0.59999999999999998, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1865688084431796, -0.59999999999999998, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4352978868932598, -0.59999999999999998, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6983400371331816, -0.59999999999999998, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.9695980282802215, -0.59999999999999998, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler033 = 2.5000000000000020e-13;
 
-// Test data for k=-0.59999999999999998, nu=0.29999999999999999.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 2.9132420715478757e-16
+// Test data for k=-0.59999999999999998, nu=0.30000000000000004.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.9470074709717020e-16
+// mean(f - f_Boost): 7.4940054162198071e-17
+// variance(f - f_Boost): 1.6823592487044846e-32
+// stddev(f - f_Boost): 1.2970579203352812e-16
 const testcase_ellint_3<double>
 data034[10] =
 {
-  { 0.0000000000000000, -0.59999999999999998, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17432424744393932, -0.59999999999999998, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34748744127146447, -0.59999999999999998, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.51873632743924825, -0.59999999999999998, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.68794610396313116, -0.59999999999999998, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.85558070175468726, -0.59999999999999998, 0.29999999999999999
-         0.87266462599716477 },
-  { 1.0224416343605653, -0.59999999999999998, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.1893144457936788, -0.59999999999999998, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.3566435377982575, -0.59999999999999998, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.5243814243493585, -0.59999999999999998, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.59999999999999998, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17538460882640122, -0.59999999999999998, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35590165133735557, -0.59999999999999998, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.54676661152254535, -0.59999999999999998, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.75321709418305305, -0.59999999999999998, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.98012637808992920, -0.59999999999999998, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.2310891277158875, -0.59999999999999998, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.5069157924585623, -0.59999999999999998, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.8039583598337940, -0.59999999999999998, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 2.1134154405060599, -0.59999999999999998, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler034 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998, nu=0.40000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3897581541285558e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.7909659715991921e-16
+// mean(f - f_Boost): -2.7755575615628915e-18
+// variance(f - f_Boost): 2.4044165394594425e-32
+// stddev(f - f_Boost): 1.5506181152880429e-16
 const testcase_ellint_3<double>
 data035[10] =
 {
   { 0.0000000000000000, -0.59999999999999998, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17414974487670717, -0.59999999999999998, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34615238767335027, -0.59999999999999998, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.51453257838108557, -0.59999999999999998, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.67882386787534399, -0.59999999999999998, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.83948470233173578, -0.59999999999999998, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 0.99753496200073977, -0.59999999999999998, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.1541101404388487, -0.59999999999999998, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.3100911323398814, -0.59999999999999998, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.4659345278069984, -0.59999999999999998, 0.40000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17556359876533037, -0.59999999999999998, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35737601674244679, -0.59999999999999998, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.55197933771320218, -0.59999999999999998, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.76633591620002894, -0.59999999999999998, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0075231136019616, -0.59999999999999998, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2815842073813450, -0.59999999999999998, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.5911666941449827, -0.59999999999999998, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.9323227566025762, -0.59999999999999998, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.2925036420985130, -0.59999999999999998, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler035 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998, nu=0.50000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.5022138270566200e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.6240126899196213e-16
+// mean(f - f_Boost): 9.1593399531575410e-17
+// variance(f - f_Boost): 1.0357223256482469e-33
+// stddev(f - f_Boost): 3.2182640128619758e-17
 const testcase_ellint_3<double>
 data036[10] =
 {
   { 0.0000000000000000, -0.59999999999999998, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17397586700252807, -0.59999999999999998, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34483533397138516, -0.59999999999999998, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.51044500461706477, -0.59999999999999998, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.67009988034712664, -0.59999999999999998, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.82434762375735193, -0.59999999999999998, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.97447346702798998, -0.59999999999999998, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.1219494000522143, -0.59999999999999998, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.2680242605954484, -0.59999999999999998, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.4135484285693078, -0.59999999999999998, 0.50000000000000000, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17574324658480217, -0.59999999999999998, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35887240603169313, -0.59999999999999998, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55737161826345261, -0.59999999999999998, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.78028227313077458, -0.59999999999999998, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0376989776486290, -0.59999999999999998, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.3395933991042925, -0.59999999999999998, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.6924049626591782, -0.59999999999999998, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.0931011856518920, -0.59999999999999998, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.5239007084492706, -0.59999999999999998, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler036 = 2.5000000000000020e-13;
 
-// Test data for k=-0.59999999999999998, nu=0.59999999999999998.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.2504224329684343e-16
+// Test data for k=-0.59999999999999998, nu=0.60000000000000009.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.6651378277398083e-16
+// mean(f - f_Boost): 1.1934897514720432e-16
+// variance(f - f_Boost): 1.7585404776158019e-33
+// stddev(f - f_Boost): 4.1934955319110598e-17
 const testcase_ellint_3<double>
 data037[10] =
 {
-  { 0.0000000000000000, -0.59999999999999998, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17380260984469353, -0.59999999999999998, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34353585361777839, -0.59999999999999998, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.50646805774321380, -0.59999999999999998, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.66174468108625506, -0.59999999999999998, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.81007462280278408, -0.59999999999999998, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.95303466945718729, -0.59999999999999998, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.0924118588677505, -0.59999999999999998, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.2297640574847937, -0.59999999999999998, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.3662507535812816, -0.59999999999999998, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.59999999999999998, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17592355661219386, -0.59999999999999998, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.36039141192661606, -0.59999999999999998, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.56295472636903854, -0.59999999999999998, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.79515295130165986, -0.59999999999999998, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0711886441942242, -0.59999999999999998, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.4072952835139891, -0.59999999999999998, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.8174863977376825, -0.59999999999999998, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.3029921578542232, -0.59999999999999998, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 2.8388723099514972, -0.59999999999999998, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler037 = 2.5000000000000020e-13;
 
-// Test data for k=-0.59999999999999998, nu=0.69999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3559889697529752e-16
+// Test data for k=-0.59999999999999998, nu=0.70000000000000007.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.2451074234797436e-16
+// mean(f - f_Boost): 5.2735593669694933e-17
+// variance(f - f_Boost): 3.4333862218458872e-34
+// stddev(f - f_Boost): 1.8529398861932589e-17
 const testcase_ellint_3<double>
 data038[10] =
 {
-  { 0.0000000000000000, -0.59999999999999998, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17362996946312007, -0.59999999999999998, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34225353454870588, -0.59999999999999998, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.50259656397799524, -0.59999999999999998, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.65373184496628933, -0.59999999999999998, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.79658372884056439, -0.59999999999999998, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.93303240100245421, -0.59999999999999998, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.0651547944716557, -0.59999999999999998, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.1947676204853441, -0.59999999999999998, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.3232737468822813, -0.59999999999999998, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.59999999999999998, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17610453321631936, -0.59999999999999998, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.36193365056369764, -0.59999999999999998, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.56874098962268527, -0.59999999999999998, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.81106198671477181, -0.59999999999999998, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.1086886419010082, -0.59999999999999998, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.4879048567239257, -0.59999999999999998, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 1.9780310073615923, -0.59999999999999998, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.5941545586772712, -0.59999999999999998, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 3.3029735898397155, -0.59999999999999998, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler038 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998, nu=0.80000000000000004.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.1879494682720725e-16
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.3826960061025914e-16
+// mean(f - f_Boost): 2.7478019859472625e-16
+// variance(f - f_Boost): 4.6451528105588637e-32
+// stddev(f - f_Boost): 2.1552616570984749e-16
 const testcase_ellint_3<double>
 data039[10] =
 {
   { 0.0000000000000000, -0.59999999999999998, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17345794195390685, -0.59999999999999998, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.34098797854531027, -0.59999999999999998, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.49882569168826213, -0.59999999999999998, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.64603758566475511, -0.59999999999999998, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.78380365594769730, -0.59999999999999998, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.91430946255611190, -0.59999999999999998, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 1.0398955217270607, -0.59999999999999998, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.1625948314277679, -0.59999999999999998, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.2840021261752192, -0.59999999999999998, 0.80000000000000004, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17628618080795252, -0.59999999999999998, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36349976272521012, -0.59999999999999998, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.57474392342151914, -0.59999999999999998, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.82814493499158159, -0.59999999999999998, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1511281795998280, -0.59999999999999998, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.5864286332503075, -0.59999999999999998, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.1958944866494527, -0.59999999999999998, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 3.0398358172574604, -0.59999999999999998, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 4.0867036409261832, -0.59999999999999998, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler039 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998, nu=0.90000000000000002.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.4768329326726447e-16
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.7440178400898422e-16
+// mean(f - f_Boost): 5.0792703376600914e-16
+// variance(f - f_Boost): 1.9863137923719990e-31
+// stddev(f - f_Boost): 4.4568080420543122e-16
 const testcase_ellint_3<double>
 data040[10] =
 {
   { 0.0000000000000000, -0.59999999999999998, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17328652344890030, -0.59999999999999998, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.33973880062929018, -0.59999999999999998, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.49515092233122743, -0.59999999999999998, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.63864042139737043, -0.59999999999999998, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.77167205646538850, -0.59999999999999998, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.89673202848034383, -0.59999999999999998, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 1.0163984492661304, -0.59999999999999998, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.1328845785162431, -0.59999999999999998, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.2479362973851875, -0.59999999999999998, 0.90000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17646850384035848, -0.59999999999999998, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36509041515134105, -0.59999999999999998, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.58097838596260631, -0.59999999999999998, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.84656453396163722, -0.59999999999999998, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1997828426963724, -0.59999999999999998, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.7112436789225605, -0.59999999999999998, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.5193168553672312, -0.59999999999999998, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.8656670488606686, -0.59999999999999998, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.8709993116265595, -0.59999999999999998, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler040 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000, nu=0.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.1201497220602069e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.4551389361831220e-16
+// mean(f - f_Boost): -1.3877787807814457e-17
+// variance(f - f_Boost): 2.5893058141206173e-32
+// stddev(f - f_Boost): 1.6091320064309879e-16
 const testcase_ellint_3<double>
 data041[10] =
 {
   { 0.0000000000000000, -0.50000000000000000, 0.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 0.17475385514035785, -0.50000000000000000, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.35081868470101585, -0.50000000000000000, 0.0000000000000000, 
-         0.34906585039886590 },
+         0.17453292519943295, 0.0 },
+  { 0.35081868470101579, -0.50000000000000000, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
   { 0.52942862705190574, -0.50000000000000000, 0.0000000000000000, 
-         0.52359877559829882 },
-  { 0.71164727562630314, -0.50000000000000000, 0.0000000000000000, 
-         0.69813170079773179 },
+         0.52359877559829882, 0.0 },
+  { 0.71164727562630326, -0.50000000000000000, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
   { 0.89824523594227768, -0.50000000000000000, 0.0000000000000000, 
-         0.87266462599716477 },
-  { 1.0895506700518851, -0.50000000000000000, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.2853005857432931, -0.50000000000000000, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.4845545520549484, -0.50000000000000000, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 1.6857503548125963, -0.50000000000000000, 0.0000000000000000, 
-         1.5707963267948966 },
+         0.87266462599716477, 0.0 },
+  { 1.0895506700518853, -0.50000000000000000, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2853005857432933, -0.50000000000000000, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4845545520549488, -0.50000000000000000, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.6857503548125961, -0.50000000000000000, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler041 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000, nu=0.10000000000000001.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.1662857256911530e-16
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.7416868347177582e-16
+// mean(f - f_Boost): 2.7755575615628915e-18
+// variance(f - f_Boost): 5.4326441655972001e-32
+// stddev(f - f_Boost): 2.3308033305273100e-16
 const testcase_ellint_3<double>
 data042[10] =
 {
   { 0.0000000000000000, -0.50000000000000000, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17457763120814676, -0.50000000000000000, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.34943246340849154, -0.50000000000000000, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.52487937869610790, -0.50000000000000000, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.70127785096388384, -0.50000000000000000, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.87898815988624479, -0.50000000000000000, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.0582764576094172, -0.50000000000000000, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.2391936844060205, -0.50000000000000000, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.4214793542995841, -0.50000000000000000, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.6045524936084892, -0.50000000000000000, 0.10000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17493071928248824, -0.50000000000000000, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35222467688034798, -0.50000000000000000, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53411928652008112, -0.50000000000000000, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72256398117177589, -0.50000000000000000, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.91899583232771009, -0.50000000000000000, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1240549163055360, -0.50000000000000000, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3372938086286021, -0.50000000000000000, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5570024469132429, -0.50000000000000000, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7803034946545480, -0.50000000000000000, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler042 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000, nu=0.20000000000000001.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.2114786773102175e-16
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.1198767993730867e-16
+// mean(f - f_Boost): 2.7755575615628914e-17
+// variance(f - f_Boost): 5.0311947683004831e-32
+// stddev(f - f_Boost): 2.2430324938128922e-16
 const testcase_ellint_3<double>
 data043[10] =
 {
   { 0.0000000000000000, -0.50000000000000000, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17440204336345433, -0.50000000000000000, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34806552388338824, -0.50000000000000000, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.52046416757129810, -0.50000000000000000, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.69140924550993865, -0.50000000000000000, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.86104678636125520, -0.50000000000000000, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 1.0297439459053981, -0.50000000000000000, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.1979214112912033, -0.50000000000000000, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.3659033858648930, -0.50000000000000000, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.5338490483665983, -0.50000000000000000, 0.20000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17510822779582402, -0.50000000000000000, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35365094725531487, -0.50000000000000000, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53895933237328697, -0.50000000000000000, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.73408090840070794, -0.50000000000000000, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.94145442818535396, -0.50000000000000000, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1624120186296487, -0.50000000000000000, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3965823372867114, -0.50000000000000000, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6414308440430099, -0.50000000000000000, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8922947612264018, -0.50000000000000000, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler043 = 2.5000000000000020e-13;
 
-// Test data for k=-0.50000000000000000, nu=0.29999999999999999.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.2557837230041312e-16
+// Test data for k=-0.50000000000000000, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3800262770228813e-16
+// mean(f - f_Boost): 5.8286708792820721e-17
+// variance(f - f_Boost): 8.5027191584278157e-32
+// stddev(f - f_Boost): 2.9159422419567599e-16
 const testcase_ellint_3<double>
 data044[10] =
 {
-  { 0.0000000000000000, -0.50000000000000000, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17422708752228896, -0.50000000000000000, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34671739434855858, -0.50000000000000000, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.51617616305641878, -0.50000000000000000, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.68200047612545167, -0.50000000000000000, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.84427217869498372, -0.50000000000000000, 0.29999999999999999
-         0.87266462599716477 },
-  { 1.0035637821389782, -0.50000000000000000, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.1606800483933111, -0.50000000000000000, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.3164407134643459, -0.50000000000000000, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.4715681939859637, -0.50000000000000000, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.50000000000000000, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17528638488102041, -0.50000000000000000, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35509802222332720, -0.50000000000000000, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.54395740731866193, -0.50000000000000000, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.74625871438752667, -0.50000000000000000, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.96588271186092023, -0.50000000000000000, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.2054319584357329, -0.50000000000000000, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.4651077994832871, -0.50000000000000000, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.7416018368052644, -0.50000000000000000, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 2.0277924458111314, -0.50000000000000000, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler044 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000, nu=0.40000000000000002.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.2992508582900068e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.0439932918341581e-16
+// mean(f - f_Boost): 3.0531133177191807e-17
+// variance(f - f_Boost): 9.0809736800018602e-32
+// stddev(f - f_Boost): 3.0134653938616686e-16
 const testcase_ellint_3<double>
 data045[10] =
 {
   { 0.0000000000000000, -0.50000000000000000, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17405275963859917, -0.50000000000000000, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34538761957029329, -0.50000000000000000, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.51200902646603907, -0.50000000000000000, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.67301522212868792, -0.50000000000000000, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.82853844466313320, -0.50000000000000000, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 0.97942097862681488, -0.50000000000000000, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.1268429801220614, -0.50000000000000000, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.2720406704533922, -0.50000000000000000, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.4161679518465340, -0.50000000000000000, 0.40000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17546519477859268, -0.50000000000000000, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35656644822531680, -0.50000000000000000, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54912289677411319, -0.50000000000000000, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.75916731611690047, -0.50000000000000000, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.99260415631328214, -0.50000000000000000, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2541925856918670, -0.50000000000000000, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.5456393705347609, -0.50000000000000000, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.8631904972952076, -0.50000000000000000, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.1962905366178065, -0.50000000000000000, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler045 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000, nu=0.50000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3419255755184137e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.6797816859260978e-16
+// mean(f - f_Boost): 9.4368957093138303e-17
+// variance(f - f_Boost): 7.7794254682023874e-32
+// stddev(f - f_Boost): 2.7891621444803792e-16
 const testcase_ellint_3<double>
 data046[10] =
 {
   { 0.0000000000000000, -0.50000000000000000, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17387905570381157, -0.50000000000000000, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34407576010465207, -0.50000000000000000, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.50795686560160824, -0.50000000000000000, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.66442115453330164, -0.50000000000000000, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.81373829119355345, -0.50000000000000000, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.95705743313235825, -0.50000000000000000, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.0959131991362554, -0.50000000000000000, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.2318900529754597, -0.50000000000000000, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.3664739530045971, -0.50000000000000000, 0.50000000000000000, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17564466176941509, -0.50000000000000000, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35805679276065394, -0.50000000000000000, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55446601496200032, -0.50000000000000000, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.77288783578259013, -0.50000000000000000, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0220246013918972, -0.50000000000000000, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.3101681612463965, -0.50000000000000000, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.6422994881851025, -0.50000000000000000, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.0152636030998816, -0.50000000000000000, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.4136715042011945, -0.50000000000000000, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler046 = 2.5000000000000020e-13;
 
-// Test data for k=-0.50000000000000000, nu=0.59999999999999998.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3838494104749599e-16
+// Test data for k=-0.50000000000000000, nu=0.60000000000000009.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.9178421578645735e-16
+// mean(f - f_Boost): 1.3322676295501878e-16
+// variance(f - f_Boost): 1.7749370367472766e-31
+// stddev(f - f_Boost): 4.2130001622920411e-16
 const testcase_ellint_3<double>
 data047[10] =
 {
-  { 0.0000000000000000, -0.50000000000000000, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17370597174637581, -0.50000000000000000, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34278139158591414, -0.50000000000000000, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.50401419439302708, -0.50000000000000000, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.65618938076167210, -0.50000000000000000, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.79977959248855424, -0.50000000000000000, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.93625925190753545, -0.50000000000000000, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.0674905658379708, -0.50000000000000000, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.1953481298023050, -0.50000000000000000, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.3215740290190876, -0.50000000000000000, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.50000000000000000, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17582479017522740, -0.50000000000000000, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.35956964546660036, -0.50000000000000000, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.55999790372984193, -0.50000000000000000, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.78751507911209895, -0.50000000000000000, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0546620505035220, -0.50000000000000000, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.3754438357425935, -0.50000000000000000, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.7615727400820127, -0.50000000000000000, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.2134638067565242, -0.50000000000000000, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 2.7090491861753558, -0.50000000000000000, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler047 = 2.5000000000000020e-13;
 
-// Test data for k=-0.50000000000000000, nu=0.69999999999999996.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.4250604066951477e-16
+// Test data for k=-0.50000000000000000, nu=0.70000000000000007.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.0745105182189226e-16
+// mean(f - f_Boost): 4.1633363423443370e-17
+// variance(f - f_Boost): 1.9996383743576116e-32
+// stddev(f - f_Boost): 1.4140857026211713e-16
 const testcase_ellint_3<double>
 data048[10] =
 {
-  { 0.0000000000000000, -0.50000000000000000, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17353350383131641, -0.50000000000000000, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34150410405436771, -0.50000000000000000, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.50017589696443487, -0.50000000000000000, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.64829398188419951, -0.50000000000000000, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.78658270782402073, -0.50000000000000000, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.91684738336675053, -0.50000000000000000, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.0412486789555935, -0.50000000000000000, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.1619021847612001, -0.50000000000000000, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.2807475181182502, -0.50000000000000000, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.50000000000000000, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17600558435914915, -0.50000000000000000, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.36110561926726259, -0.50000000000000000, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.56573074641137111, -0.50000000000000000, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.80316073084237205, -0.50000000000000000, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.0911910688131461, -0.50000000000000000, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.4530946406380640, -0.50000000000000000, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 1.9144386536785372, -0.50000000000000000, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.4878788958234970, -0.50000000000000000, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 3.1433945297859225, -0.50000000000000000, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler048 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.5715240651179632e-16
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.4380477375534667e-16
+// mean(f - f_Boost): 2.3037127760972000e-16
+// variance(f - f_Boost): 1.4989821857033475e-31
+// stddev(f - f_Boost): 3.8716691306248618e-16
 const testcase_ellint_3<double>
 data049[10] =
 {
   { 0.0000000000000000, -0.50000000000000000, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17336164805979126, -0.50000000000000000, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.34024350132086773, -0.50000000000000000, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.49643719555734073, -0.50000000000000000, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.64071162456976150, -0.50000000000000000, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.77407836177211908, -0.50000000000000000, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.89867058251905652, -0.50000000000000000, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 1.0169181822134910, -0.50000000000000000, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.1311363312779448, -0.50000000000000000, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.2434165408189539, -0.50000000000000000, 0.80000000000000004, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17618704872620228, -0.50000000000000000, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36266535159745827, -0.50000000000000000, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.57167789954529158, -0.50000000000000000, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.81995752984315018, -0.50000000000000000, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1325112162158122, -0.50000000000000000, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.5479055930718042, -0.50000000000000000, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.1215243941010486, -0.50000000000000000, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.9069405767650132, -0.50000000000000000, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.8750701888108066, -0.50000000000000000, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler049 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000, nu=0.90000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.4664649039489274e-16
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.6192315188521289e-16
+// mean(f - f_Boost): 3.5249581031848718e-16
+// variance(f - f_Boost): 2.5029385557256515e-31
+// stddev(f - f_Boost): 5.0029376927217987e-16
 const testcase_ellint_3<double>
 data050[10] =
 {
   { 0.0000000000000000, -0.50000000000000000, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17319040056865681, -0.50000000000000000, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.33899920036578557, -0.50000000000000000, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.49279362182695174, -0.50000000000000000, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.63342123379746151, -0.50000000000000000, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.76220595179550321, -0.50000000000000000, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.88160004743532294, -0.50000000000000000, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 0.99427448642310123, -0.50000000000000000, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.1027091512470095, -0.50000000000000000, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.2091116095504744, -0.50000000000000000, 0.90000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17636918772384180, -0.50000000000000000, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36424950570740700, -0.50000000000000000, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57785404590231426, -0.50000000000000000, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.83806480521716531, -0.50000000000000000, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1798568683069752, -0.50000000000000000, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.6678766243739607, -0.50000000000000000, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.4282976450693483, -0.50000000000000000, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.6810787666126656, -0.50000000000000000, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.5355132096026454, -0.50000000000000000, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler050 = 2.5000000000000020e-13;
 
-// Test data for k=-0.40000000000000002, nu=0.0000000000000000.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.0617918857203532e-16
+// Test data for k=-0.39999999999999991, nu=0.0000000000000000.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.1423314994346225e-16
+// mean(f - f_Boost): 1.9428902930940238e-17
+// variance(f - f_Boost): 2.2263750157116445e-32
+// stddev(f - f_Boost): 1.4921042241450980e-16
 const testcase_ellint_3<double>
 data051[10] =
 {
-  { 0.0000000000000000, -0.40000000000000002, 0.0000000000000000, 
-         0.0000000000000000 },
-  { 0.17467414669441528, -0.40000000000000002, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.35018222772483443, -0.40000000000000002, 0.0000000000000000, 
-         0.34906585039886590 },
-  { 0.52729015917508737, -0.40000000000000002, 0.0000000000000000, 
-         0.52359877559829882 },
-  { 0.70662374407341244, -0.40000000000000002, 0.0000000000000000, 
-         0.69813170079773179 },
-  { 0.88859210497602170, -0.40000000000000002, 0.0000000000000000, 
-         0.87266462599716477 },
-  { 1.0733136290471379, -0.40000000000000002, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.2605612170157061, -0.40000000000000002, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.4497513956433439, -0.40000000000000002, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 1.6399998658645112, -0.40000000000000002, 0.0000000000000000, 
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.39999999999999991, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17467414669441528, -0.39999999999999991, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35018222772483443, -0.39999999999999991, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52729015917508748, -0.39999999999999991, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.70662374407341244, -0.39999999999999991, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.88859210497602159, -0.39999999999999991, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0733136290471381, -0.39999999999999991, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2605612170157066, -0.39999999999999991, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4497513956433439, -0.39999999999999991, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.6399998658645112, -0.39999999999999991, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler051 = 2.5000000000000020e-13;
 
-// Test data for k=-0.40000000000000002, nu=0.10000000000000001.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2644663257577874e-16
+// Test data for k=-0.39999999999999991, nu=0.10000000000000001.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.8489340395463703e-16
+// mean(f - f_Boost): 6.3837823915946496e-17
+// variance(f - f_Boost): 4.4785242050000272e-32
+// stddev(f - f_Boost): 2.1162523963365114e-16
 const testcase_ellint_3<double>
 data052[10] =
 {
-  { 0.0000000000000000, -0.40000000000000002, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17449806706684670, -0.40000000000000002, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.34880048623856075, -0.40000000000000002, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.52277322065757392, -0.40000000000000002, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.69638072056918365, -0.40000000000000002, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.86968426619831540, -0.40000000000000002, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.0428044206578095, -0.40000000000000002, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.2158651158274378, -0.40000000000000002, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.3889447129893324, -0.40000000000000002, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.5620566886683604, -0.40000000000000002, 0.10000000000000001, 
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.39999999999999991, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17485086590796767, -0.39999999999999991, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35158366412506992, -0.39999999999999991, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53194731675711726, -0.39999999999999991, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.71740615528010931, -0.39999999999999991, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.90896157773487030, -0.39999999999999991, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1069605483834348, -0.39999999999999991, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3109353428823001, -0.39999999999999991, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5195460789903448, -0.39999999999999991, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7306968836847187, -0.39999999999999991, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler052 = 2.5000000000000020e-13;
 
-// Test data for k=-0.40000000000000002, nu=0.20000000000000001.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.4583049464169287e-16
+// Test data for k=-0.39999999999999991, nu=0.20000000000000001.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.0467985583872730e-16
+// mean(f - f_Boost): 8.6042284408449634e-17
+// variance(f - f_Boost): 1.5826864298542218e-32
+// stddev(f - f_Boost): 1.2580486595733180e-16
 const testcase_ellint_3<double>
 data053[10] =
 {
-  { 0.0000000000000000, -0.40000000000000002, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17432262290723397, -0.40000000000000002, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34743795258968596, -0.40000000000000002, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.51838919472805101, -0.40000000000000002, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.68663134739057907, -0.40000000000000002, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.85206432981833979, -0.40000000000000002, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 1.0149595349004430, -0.40000000000000002, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.1758349405464676, -0.40000000000000002, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.3353337673882637, -0.40000000000000002, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.4941414344266770, -0.40000000000000002, 0.20000000000000001, 
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.39999999999999991, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17502822886437389, -0.39999999999999991, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35300530062530805, -0.39999999999999991, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53675259548210896, -0.39999999999999991, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72878006428676934, -0.39999999999999991, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.93100219010583563, -0.39999999999999991, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1443487271187609, -0.39999999999999991, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3683427764108813, -0.39999999999999991, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6008221459300933, -0.39999999999999991, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8380358826317627, -0.39999999999999991, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler053 = 2.5000000000000020e-13;
 
-// Test data for k=-0.40000000000000002, nu=0.29999999999999999.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.1925080711125793e-16
+// Test data for k=-0.39999999999999991, nu=0.30000000000000004.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 2.9973414591826100e-16
+// mean(f - f_Boost): 8.6042284408449634e-17
+// variance(f - f_Boost): 1.5826864298542218e-32
+// stddev(f - f_Boost): 1.2580486595733180e-16
 const testcase_ellint_3<double>
 data054[10] =
 {
-  { 0.0000000000000000, -0.40000000000000002, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17414781013591540, -0.40000000000000002, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34609415696777285, -0.40000000000000002, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.51413131295862535, -0.40000000000000002, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.67733527622935630, -0.40000000000000002, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.83558675182733266, -0.40000000000000002, 0.29999999999999999
-         0.87266462599716477 },
-  { 0.98940140808865906, -0.40000000000000002, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.1396968797728058, -0.40000000000000002, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.2875920037865090, -0.40000000000000002, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.4342789859950078, -0.40000000000000002, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.39999999999999991, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17520623975982899, -0.39999999999999991, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35444766141612105, -0.39999999999999991, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.54171455841536009, -0.39999999999999991, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.74080517001084012, -0.39999999999999991, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.95496950509296563, -0.39999999999999991, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.1862627879844718, -0.39999999999999991, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.4346501803799458, -0.39999999999999991, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.6971744798077697, -0.39999999999999991, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 1.9677924132520139, -0.39999999999999991, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler054 = 2.5000000000000020e-13;
 
-// Test data for k=-0.40000000000000002, nu=0.40000000000000002.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.8235661108581362e-16
+// Test data for k=-0.39999999999999991, nu=0.40000000000000002.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.2577246923979600e-16
+// mean(f - f_Boost): 1.8596235662471373e-16
+// variance(f - f_Boost): 1.6222417021441306e-31
+// stddev(f - f_Boost): 4.0277061736727151e-16
 const testcase_ellint_3<double>
 data055[10] =
 {
-  { 0.0000000000000000, -0.40000000000000002, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17397362471112707, -0.40000000000000002, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34476864603333196, -0.40000000000000002, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.50999329415379346, -0.40000000000000002, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.66845674551396006, -0.40000000000000002, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.82012848346231748, -0.40000000000000002, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 0.96582449258349057, -0.40000000000000002, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.1068473749476286, -0.40000000000000002, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.2447132729159989, -0.40000000000000002, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.3809986210732901, -0.40000000000000002, 0.40000000000000002, 
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.39999999999999991, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17538490283034375, -0.39999999999999991, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35591129064319948, -0.39999999999999991, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54684250413264535, -0.39999999999999991, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.75355027742668290, -0.39999999999999991, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.98117935026780634, -0.39999999999999991, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2337464222030734, -0.39999999999999991, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.5125183419289221, -0.39999999999999991, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.8140224451130311, -0.39999999999999991, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.1289968719280026, -0.39999999999999991, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler055 = 2.5000000000000020e-13;
 
-// Test data for k=-0.40000000000000002, nu=0.50000000000000000.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.9965792755639576e-16
+// Test data for k=-0.39999999999999991, nu=0.50000000000000000.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.8009196014748294e-16
+// mean(f - f_Boost): 1.6375789613221060e-16
+// variance(f - f_Boost): 6.4788283329186610e-32
+// stddev(f - f_Boost): 2.5453542647181080e-16
 const testcase_ellint_3<double>
 data056[10] =
 {
-  { 0.0000000000000000, -0.40000000000000002, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17380006262854136, -0.40000000000000002, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34346098216756610, -0.40000000000000002, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.50596929935059420, -0.40000000000000002, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.65996392089131251, -0.40000000000000002, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.80558463511364786, -0.40000000000000002, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.94397834522857704, -0.40000000000000002, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.0768075114108115, -0.40000000000000002, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.2059184624251333, -0.40000000000000002, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.3331797176377398, -0.40000000000000002, 0.50000000000000000, 
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.39999999999999991, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17556422235224273, -0.39999999999999991, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35739675341763921, -0.39999999999999991, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55214655195037188, -0.39999999999999991, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.76709520942047438, -0.39999999999999991, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0100278761577499, -0.39999999999999991, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2882265661384342, -0.39999999999999991, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.6059059780051874, -0.39999999999999991, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.9600182740224081, -0.39999999999999991, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.3367461373176508, -0.39999999999999991, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler056 = 2.5000000000000020e-13;
 
-// Test data for k=-0.40000000000000002, nu=0.59999999999999998.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.1640223038298069e-16
+// Test data for k=-0.39999999999999991, nu=0.60000000000000009.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 2.8411408870840790e-16
+// mean(f - f_Boost): 9.7144514654701197e-17
+// variance(f - f_Boost): 1.4860570558543486e-32
+// stddev(f - f_Boost): 1.2190393988113545e-16
 const testcase_ellint_3<double>
 data057[10] =
 {
-  { 0.0000000000000000, -0.40000000000000002, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17362711992081245, -0.40000000000000002, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34217074276403953, -0.40000000000000002, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.50205389185761606, -0.40000000000000002, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.65182834920372734, -0.40000000000000002, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.79186512820565136, -0.40000000000000002, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.92365535916287134, -0.40000000000000002, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.0491915663957907, -0.40000000000000002, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.1705934291745106, -0.40000000000000002, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.2899514672527024, -0.40000000000000002, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.39999999999999991, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17574420264267029, -0.39999999999999991, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.35890463689046265, -0.39999999999999991, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.55763773975194486, -0.39999999999999991, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.78153324227761267, -0.39999999999999991, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0420205885765887, -0.39999999999999991, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.3517205230381770, -0.39999999999999991, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.7210360970313896, -0.39999999999999991, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.1500780510169242, -0.39999999999999991, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 2.6186940209850191, -0.39999999999999991, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler057 = 2.5000000000000020e-13;
 
-// Test data for k=-0.40000000000000002, nu=0.69999999999999996.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.3264047918332349e-16
+// Test data for k=-0.39999999999999991, nu=0.70000000000000007.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.1553900340611668e-16
+// mean(f - f_Boost): 1.1657341758564144e-16
+// variance(f - f_Boost): 1.3242789405258207e-32
+// stddev(f - f_Boost): 1.1507731924779187e-16
 const testcase_ellint_3<double>
 data058[10] =
 {
-  { 0.0000000000000000, -0.40000000000000002, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17345479265712868, -0.40000000000000002, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34089751955950354, -0.40000000000000002, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.49824200167361332, -0.40000000000000002, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.64402450341199402, -0.40000000000000002, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.77889207804122873, -0.40000000000000002, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.90468169720957992, -0.40000000000000002, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.0236847823692916, -0.40000000000000002, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.1382465247425166, -0.40000000000000002, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.2506255923253344, -0.40000000000000002, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.39999999999999991, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17592484806010436, -0.39999999999999991, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.36043555139631439, -0.39999999999999991, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.56332813669944881, -0.39999999999999991, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.79697424562157548, -0.39999999999999991, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.0778155987523672, -0.39999999999999991, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.4272018169896268, -0.39999999999999991, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 1.8684377907453380, -0.39999999999999991, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.4128677409207469, -0.39999999999999991, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 3.0327078743873241, -0.39999999999999991, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler058 = 2.5000000000000020e-13;
 
-// Test data for k=-0.40000000000000002, nu=0.80000000000000004.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 6.6611561645571024e-16
+// Test data for k=-0.39999999999999991, nu=0.80000000000000004.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.5727642219519274e-16
+// mean(f - f_Boost): 2.1926904736346843e-16
+// variance(f - f_Boost): 1.5293405480859847e-31
+// stddev(f - f_Boost): 3.9106783913868252e-16
 const testcase_ellint_3<double>
 data059[10] =
 {
-  { 0.0000000000000000, -0.40000000000000002, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17328307694277154, -0.40000000000000002, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.33964091800132007, -0.40000000000000002, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.49452889372467440, -0.40000000000000002, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.63652940095937316, -0.40000000000000002, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.76659772511159097, -0.40000000000000002, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.88691047977338111, -0.40000000000000002, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 1.0000273200611638, -0.40000000000000002, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.1084787902188009, -0.40000000000000002, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.2146499565727209, -0.40000000000000002, 0.80000000000000004, 
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.39999999999999991, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17610616300487833, -0.39999999999999991, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36199013167171978, -0.39999999999999991, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56923097361842423, -0.39999999999999991, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.81354878456624347, -0.39999999999999991, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1182902719261825, -0.39999999999999991, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.5192950589409022, -0.39999999999999991, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.0678761710223981, -0.39999999999999991, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.8135222249879783, -0.39999999999999991, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.7289548002199902, -0.39999999999999991, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler059 = 2.5000000000000020e-13;
 
-// Test data for k=-0.40000000000000002, nu=0.90000000000000002.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.6376730823308004e-16
+// Test data for k=-0.39999999999999991, nu=0.90000000000000002.
+// max(|f - f_Boost|): 2.6645352591003757e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.0221626338023938e-16
+// mean(f - f_Boost): 4.1910919179599658e-16
+// variance(f - f_Boost): 6.2246150910247033e-31
+// stddev(f - f_Boost): 7.8896229891070860e-16
 const testcase_ellint_3<double>
 data060[10] =
 {
-  { 0.0000000000000000, -0.40000000000000002, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17311196891868127, -0.40000000000000002, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.33840055664911906, -0.40000000000000002, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.49091013944075329, -0.40000000000000002, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.62932228186809580, -0.40000000000000002, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.75492278323019801, -0.40000000000000002, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.87021659043854294, -0.40000000000000002, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 0.97800245228239246, -0.40000000000000002, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.0809625773173697, -0.40000000000000002, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.1815758115929846, -0.40000000000000002, 0.90000000000000002, 
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.39999999999999991, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17628815191971123, -0.39999999999999991, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36356903815378772, -0.39999999999999991, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57536079447000310, -0.39999999999999991, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.83141355850172571, -0.39999999999999991, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1646481598721361, -0.39999999999999991, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.6357275034001995, -0.39999999999999991, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.3628787566572398, -0.39999999999999991, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.5521010369134958, -0.39999999999999991, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.3055535102872513, -0.39999999999999991, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler060 = 2.5000000000000020e-13;
 
-// Test data for k=-0.30000000000000004, nu=0.0000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.3361874537309281e-16
+// Test data for k=-0.29999999999999993, nu=0.0000000000000000.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.2241249691539529e-16
+// mean(f - f_Boost): 4.9960036108132046e-17
+// variance(f - f_Boost): 4.6872855002064458e-32
+// stddev(f - f_Boost): 2.1650139722889657e-16
 const testcase_ellint_3<double>
 data061[10] =
 {
-  { 0.0000000000000000, -0.30000000000000004, 0.0000000000000000, 
-         0.0000000000000000 },
-  { 0.17461228653000099, -0.30000000000000004, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.34969146102798415, -0.30000000000000004, 0.0000000000000000, 
-         0.34906585039886590 },
-  { 0.52565822873726320, -0.30000000000000004, 0.0000000000000000, 
-         0.52359877559829882 },
-  { 0.70284226512408532, -0.30000000000000004, 0.0000000000000000, 
-         0.69813170079773179 },
-  { 0.88144139195111182, -0.30000000000000004, 0.0000000000000000, 
-         0.87266462599716477 },
-  { 1.0614897067260520, -0.30000000000000004, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.2428416824174218, -0.30000000000000004, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.4251795877015927, -0.30000000000000004, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 1.6080486199305128, -0.30000000000000004, 0.0000000000000000, 
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.29999999999999993, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17461228653000099, -0.29999999999999993, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.34969146102798421, -0.29999999999999993, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52565822873726309, -0.29999999999999993, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.70284226512408543, -0.29999999999999993, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.88144139195111171, -0.29999999999999993, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0614897067260520, -0.29999999999999993, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2428416824174220, -0.29999999999999993, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4251795877015929, -0.29999999999999993, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.6080486199305126, -0.29999999999999993, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler061 = 2.5000000000000020e-13;
 
-// Test data for k=-0.30000000000000004, nu=0.10000000000000001.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.3908043711907203e-16
+// Test data for k=-0.29999999999999993, nu=0.10000000000000001.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.1872304407982844e-16
+// mean(f - f_Boost): 9.4368957093138303e-17
+// variance(f - f_Boost): 4.0359883022230488e-32
+// stddev(f - f_Boost): 2.0089769292411121e-16
 const testcase_ellint_3<double>
 data062[10] =
 {
-  { 0.0000000000000000, -0.30000000000000004, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17443631884814376, -0.30000000000000004, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.34831316835124926, -0.30000000000000004, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.52116586276523857, -0.30000000000000004, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.69269385837910036, -0.30000000000000004, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.86279023163070856, -0.30000000000000004, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.0315321461438263, -0.30000000000000004, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.1991449111869024, -0.30000000000000004, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.3659561780923213, -0.30000000000000004, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.5323534693557528, -0.30000000000000004, 0.10000000000000001, 
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.29999999999999993, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17478889331392972, -0.29999999999999993, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35108939018329183, -0.29999999999999993, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53028990896115835, -0.29999999999999993, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.71352417052371409, -0.29999999999999993, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.90153086032405894, -0.29999999999999993, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.0945187977283313, -0.29999999999999993, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.2920699268385680, -0.29999999999999993, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.4931243665896394, -0.29999999999999993, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.6960848815118226, -0.29999999999999993, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler062 = 2.5000000000000020e-13;
 
-// Test data for k=-0.30000000000000004, nu=0.20000000000000001.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.4447238179454079e-16
+// Test data for k=-0.29999999999999993, nu=0.20000000000000001.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.2247497610332889e-16
+// mean(f - f_Boost): 1.1102230246251565e-16
+// variance(f - f_Boost): 3.8043060629871325e-32
+// stddev(f - f_Boost): 1.9504630380981672e-16
 const testcase_ellint_3<double>
 data063[10] =
 {
-  { 0.0000000000000000, -0.30000000000000004, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17426098615372088, -0.30000000000000004, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34695402664689923, -0.30000000000000004, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.51680555567038933, -0.30000000000000004, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.68303375225260210, -0.30000000000000004, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.84540662891295026, -0.30000000000000004, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 1.0041834051646927, -0.30000000000000004, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.1599952702345711, -0.30000000000000004, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.3137179520499165, -0.30000000000000004, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.4663658145259877, -0.30000000000000004, 0.20000000000000001, 
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.29999999999999993, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17496614335337535, -0.29999999999999993, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35250745937139372, -0.29999999999999993, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53506875002836884, -0.29999999999999993, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72479106622248191, -0.29999999999999993, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.92326451535891607, -0.29999999999999993, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1312092060698349, -0.29999999999999993, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3481473154592321, -0.29999999999999993, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5722049569662748, -0.29999999999999993, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8002173372290498, -0.29999999999999993, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler063 = 2.5000000000000020e-13;
 
-// Test data for k=-0.30000000000000004, nu=0.29999999999999999.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.4979715256503266e-16
+// Test data for k=-0.29999999999999993, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.1678685180047551e-16
+// mean(f - f_Boost): 1.0547118733938987e-16
+// variance(f - f_Boost): 7.5633408838247182e-32
+// stddev(f - f_Boost): 2.7501528837184157e-16
 const testcase_ellint_3<double>
 data064[10] =
 {
-  { 0.0000000000000000, -0.30000000000000004, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17408628437042842, -0.30000000000000004, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34561356761638401, -0.30000000000000004, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.51257058617875850, -0.30000000000000004, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.67382207124602878, -0.30000000000000004, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.82914751587825131, -0.30000000000000004, 0.29999999999999999
-         0.87266462599716477 },
-  { 0.97907434814374938, -0.30000000000000004, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.1246399297351584, -0.30000000000000004, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.2671793970398149, -0.30000000000000004, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.4081767433479091, -0.30000000000000004, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.29999999999999993, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17514404084107435, -0.29999999999999993, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35394619108645647, -0.29999999999999993, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.54000325463372689, -0.29999999999999993, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.73670193794067651, -0.29999999999999993, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.94689345491722177, -0.29999999999999993, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.1723274608389140, -0.29999999999999993, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.4128880552936287, -0.29999999999999993, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.6659010047449661, -0.29999999999999993, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 1.9260216862473254, -0.29999999999999993, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler064 = 2.5000000000000020e-13;
 
-// Test data for k=-0.30000000000000004, nu=0.40000000000000002.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.5505716921759864e-16
+// Test data for k=-0.29999999999999993, nu=0.40000000000000002.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.3983279132797385e-16
+// mean(f - f_Boost): 1.1657341758564144e-16
+// variance(f - f_Boost): 1.8245832308692586e-31
+// stddev(f - f_Boost): 4.2715140534349863e-16
 const testcase_ellint_3<double>
 data065[10] =
 {
-  { 0.0000000000000000, -0.30000000000000004, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17391220945982727, -0.30000000000000004, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34429133937639689, -0.30000000000000004, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.50845471668581632, -0.30000000000000004, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.66502347027873854, -0.30000000000000004, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.81389191978012254, -0.30000000000000004, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 0.95590618002140570, -0.30000000000000004, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.0924915195213121, -0.30000000000000004, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.2253651604038061, -0.30000000000000004, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.3563643538969763, -0.30000000000000004, 0.40000000000000002, 
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.29999999999999993, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17532259000954434, -0.29999999999999993, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35540612770983693, -0.29999999999999993, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54510265552938919, -0.29999999999999993, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.74932476310965057, -0.29999999999999993, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.97272793583093109, -0.29999999999999993, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2188928987074241, -0.29999999999999993, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.4888771674085941, -0.29999999999999993, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.7794558498219191, -0.29999999999999993, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.0822121773175528, -0.29999999999999993, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler065 = 2.5000000000000020e-13;
 
-// Test data for k=-0.30000000000000004, nu=0.50000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.7807908859023716e-16
+// Test data for k=-0.29999999999999993, nu=0.50000000000000000.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.0516138451673425e-16
+// mean(f - f_Boost): 4.7184478546569152e-17
+// variance(f - f_Boost): 1.9448563670505968e-32
+// stddev(f - f_Boost): 1.3945810722401896e-16
 const testcase_ellint_3<double>
 data066[10] =
 {
-  { 0.0000000000000000, -0.30000000000000004, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17373875742088232, -0.30000000000000004, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34298690571124157, -0.30000000000000004, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.50445214859646936, -0.30000000000000004, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.65660648352418516, -0.30000000000000004, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.79953670639287289, -0.30000000000000004, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.93443393926588536, -0.30000000000000004, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.0630838369016911, -0.30000000000000004, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.1875197325653029, -0.30000000000000004, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.3098448759814962, -0.30000000000000004, 0.50000000000000000, 
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.29999999999999993, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17550179513158179, -0.29999999999999993, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35688783251681200, -0.29999999999999993, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55037700010142798, -0.29999999999999993, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.76273839789895992, -0.29999999999999993, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0011570518830419, -0.29999999999999993, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2722987414055109, -0.29999999999999993, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5799590511080066, -0.29999999999999993, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.9212367220124293, -0.29999999999999993, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2833505881933971, -0.29999999999999993, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler066 = 2.5000000000000020e-13;
 
-// Test data for k=-0.30000000000000004, nu=0.59999999999999998.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.0057999499931649e-16
+// Test data for k=-0.29999999999999993, nu=0.60000000000000009.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.2121157428443725e-16
+// mean(f - f_Boost): 1.9428902930940239e-16
+// variance(f - f_Boost): 1.5987596229703424e-31
+// stddev(f - f_Boost): 3.9984492281012430e-16
 const testcase_ellint_3<double>
 data067[10] =
 {
-  { 0.0000000000000000, -0.30000000000000004, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17356592428950823, -0.30000000000000004, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34169984536697379, -0.30000000000000004, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.50055748266498457, -0.30000000000000004, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.64854298527106768, -0.30000000000000004, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.78599329284207431, -0.30000000000000004, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.91445452089128199, -0.30000000000000004, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.0360412952290587, -0.30000000000000004, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.1530473919778641, -0.30000000000000004, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.2677758800420669, -0.30000000000000004, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.29999999999999993, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17568166052076745, -0.29999999999999993, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.35839189074731181, -0.29999999999999993, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.55583724744367558, -0.29999999999999993, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.77703498090888223, -0.29999999999999993, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0326772113675962, -0.29999999999999993, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.3345139983717369, -0.29999999999999993, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.6921742922838403, -0.29999999999999993, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.1056608968472186, -0.29999999999999993, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 2.5560975528589061, -0.29999999999999993, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler067 = 2.5000000000000020e-13;
 
-// Test data for k=-0.30000000000000004, nu=0.69999999999999996.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.2239502844122443e-16
+// Test data for k=-0.29999999999999993, nu=0.70000000000000007.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.0088945789059381e-16
+// mean(f - f_Boost): 1.6653345369377348e-16
+// variance(f - f_Boost): 3.1994213989721786e-31
+// stddev(f - f_Boost): 5.6563428104846852e-16
 const testcase_ellint_3<double>
 data068[10] =
 {
-  { 0.0000000000000000, -0.30000000000000004, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17339370613812224, -0.30000000000000004, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34042975138455933, -0.30000000000000004, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.49676568368075985, -0.30000000000000004, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.64080774055753720, -0.30000000000000004, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.77318507779667278, -0.30000000000000004, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.89579782346548609, -0.30000000000000004, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.0110573286052202, -0.30000000000000004, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.1214710972949635, -0.30000000000000004, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.2294913236274982, -0.30000000000000004, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.29999999999999993, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17586219053197988, -0.29999999999999993, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.35991891074557669, -0.29999999999999993, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.56149538019961731, -0.29999999999999993, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.79232303189667685, -0.29999999999999993, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.0679345542878826, -0.29999999999999993, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.4084400085913955, -0.29999999999999993, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 1.8357382859296454, -0.29999999999999993, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.3604197996171519, -0.29999999999999993, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 2.9562123549913872, -0.29999999999999993, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler068 = 2.5000000000000020e-13;
 
-// Test data for k=-0.30000000000000004, nu=0.80000000000000004.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.4358357000101250e-16
+// Test data for k=-0.29999999999999993, nu=0.80000000000000004.
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.1197887707781618e-16
+// mean(f - f_Boost): 3.4416913763379854e-16
+// variance(f - f_Boost): 4.3461914185990199e-31
+// stddev(f - f_Boost): 6.5925650687718054e-16
 const testcase_ellint_3<double>
 data069[10] =
 {
-  { 0.0000000000000000, -0.30000000000000004, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17322209907520358, -0.30000000000000004, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.33917623046949996, -0.30000000000000004, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.49307204894329176, -0.30000000000000004, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.63337802830291734, -0.30000000000000004, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.76104540997689407, -0.30000000000000004, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.87832009635450714, -0.30000000000000004, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 0.98787879723171790, -0.30000000000000004, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.0924036340069339, -0.30000000000000004, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.1944567571590048, -0.30000000000000004, 0.80000000000000004, 
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.29999999999999993, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17604338956191670, -0.29999999999999993, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36146952517410791, -0.29999999999999993, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56736453393774644, -0.29999999999999993, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.80873149979001091, -0.29999999999999993, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1077903069860620, -0.29999999999999993, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.4985874311132998, -0.29999999999999993, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.0298167266724954, -0.29999999999999993, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.7483929054985432, -0.29999999999999993, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.6283050484567170, -0.29999999999999993, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler069 = 2.5000000000000020e-13;
 
-// Test data for k=-0.30000000000000004, nu=0.90000000000000002.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.6419688299804087e-16
+// Test data for k=-0.29999999999999993, nu=0.90000000000000002.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.1301806687926828e-16
+// mean(f - f_Boost): 4.1633363423443370e-16
+// variance(f - f_Boost): 2.2835347143080263e-31
+// stddev(f - f_Boost): 4.7786344433405093e-16
 const testcase_ellint_3<double>
 data070[10] =
 {
-  { 0.0000000000000000, -0.30000000000000004, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17305109924485945, -0.30000000000000004, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.33793890239556984, -0.30000000000000004, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.48947218005089738, -0.30000000000000004, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.62623332340775151, -0.30000000000000004, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.74951596581511148, -0.30000000000000004, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.86189886597755994, -0.30000000000000004, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 0.96629451153092005, -0.30000000000000004, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.0655269133492682, -0.30000000000000004, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.1622376896064914, -0.30000000000000004, 0.90000000000000002, 
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.29999999999999993, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17622526204962433, -0.29999999999999993, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36304439230777141, -0.29999999999999993, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57345914744719195, -0.29999999999999993, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.82641512928845162, -0.29999999999999993, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1534256210757743, -0.29999999999999993, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.6124900353411677, -0.29999999999999993, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.3165905514845089, -0.29999999999999993, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.4625619526539824, -0.29999999999999993, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.1479514944016787, -0.29999999999999993, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler070 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996, nu=0.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2156475739151676e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.2156475739151676e-16
+// mean(f - f_Boost): -5.2735593669694933e-17
+// variance(f - f_Boost): 3.0473442641042680e-32
+// stddev(f - f_Boost): 1.7456644190978597e-16
 const testcase_ellint_3<double>
 data071[10] =
 {
   { 0.0000000000000000, -0.19999999999999996, 0.0000000000000000, 
-         0.0000000000000000 },
-  { 0.17456817290292809, -0.19999999999999996, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.34934315932086801, -0.19999999999999996, 0.0000000000000000, 
-         0.34906585039886590 },
+         0.0000000000000000, 0.0 },
+  { 0.17456817290292806, -0.19999999999999996, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.34934315932086796, -0.19999999999999996, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
   { 0.52450880529443988, -0.19999999999999996, 0.0000000000000000, 
-         0.52359877559829882 },
-  { 0.70020491009844876, -0.19999999999999996, 0.0000000000000000, 
-         0.69813170079773179 },
-  { 0.87651006649967955, -0.19999999999999996, 0.0000000000000000, 
-         0.87266462599716477 },
+         0.52359877559829882, 0.0 },
+  { 0.70020491009844887, -0.19999999999999996, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.87651006649967977, -0.19999999999999996, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
   { 1.0534305870298994, -0.19999999999999996, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.2308975521670784, -0.19999999999999996, 0.0000000000000000, 
-         1.2217304763960306 },
+         1.0471975511965976, 0.0 },
+  { 1.2308975521670789, -0.19999999999999996, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
   { 1.4087733584990738, -0.19999999999999996, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 1.5868678474541660, -0.19999999999999996, 0.0000000000000000, 
-         1.5707963267948966 },
+         1.3962634015954636, 0.0 },
+  { 1.5868678474541662, -0.19999999999999996, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler071 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996, nu=0.10000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3374593253183472e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.0890622182605400e-16
+// mean(f - f_Boost): -3.8857805861880476e-17
+// variance(f - f_Boost): 2.8794792590749608e-32
+// stddev(f - f_Boost): 1.6969028431454054e-16
 const testcase_ellint_3<double>
 data072[10] =
 {
   { 0.0000000000000000, -0.19999999999999996, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17439228502691748, -0.19999999999999996, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.34796731137565740, -0.19999999999999996, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.52003370294544848, -0.19999999999999996, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.69012222258631462, -0.19999999999999996, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.85803491465566772, -0.19999999999999996, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.0238463961099364, -0.19999999999999996, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.1878691059202153, -0.19999999999999996, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.3505985031831940, -0.19999999999999996, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.5126513474261087, -0.19999999999999996, 0.10000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17474469953608965, -0.19999999999999996, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35073860234984255, -0.19999999999999996, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.52912258712951521, -0.19999999999999996, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.71081701558898069, -0.19999999999999996, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.89640758521169384, -0.19999999999999996, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.0860417038089853, -0.19999999999999996, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.2793599255528623, -0.19999999999999996, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.4754938544089076, -0.19999999999999996, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.6731552050562593, -0.19999999999999996, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler072 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996, nu=0.20000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.4549984059502760e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 3.9570963716579749e-16
+// mean(f - f_Boost): -5.8286708792820721e-17
+// variance(f - f_Boost): 3.1158217732380362e-32
+// stddev(f - f_Boost): 1.7651690494788412e-16
 const testcase_ellint_3<double>
 data073[10] =
 {
   { 0.0000000000000000, -0.19999999999999996, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17421703179583747, -0.19999999999999996, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34661057411998791, -0.19999999999999996, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.51569006052647393, -0.19999999999999996, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.68052412821107244, -0.19999999999999996, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.84081341263313825, -0.19999999999999996, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 0.99683359988842890, -0.19999999999999996, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.1493086715118852, -0.19999999999999996, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.2992699693957541, -0.19999999999999996, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.4479323932249564, -0.19999999999999996, 0.20000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17492186907740698, -0.19999999999999996, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35215414286134267, -0.19999999999999996, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53388285615182440, -0.19999999999999996, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72200960282688265, -0.19999999999999996, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.91793087614428526, -0.19999999999999996, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1222602841587976, -0.19999999999999996, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3345489407496247, -0.19999999999999996, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5531225705475502, -0.19999999999999996, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7751816279738935, -0.19999999999999996, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler073 = 2.5000000000000020e-13;
 
-// Test data for k=-0.19999999999999996, nu=0.29999999999999999.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.3140668101543467e-16
+// Test data for k=-0.19999999999999996, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.6785817924053817e-16
+// mean(f - f_Boost): -1.1102230246251566e-17
+// variance(f - f_Boost): 9.9840208317034302e-32
+// stddev(f - f_Boost): 3.1597501217190311e-16
 const testcase_ellint_3<double>
 data074[10] =
 {
-  { 0.0000000000000000, -0.19999999999999996, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17404240913577704, -0.19999999999999996, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34527248032587193, -0.19999999999999996, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.51147118981668416, -0.19999999999999996, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.67137107867777601, -0.19999999999999996, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.82470418188668893, -0.19999999999999996, 0.29999999999999999
-         0.87266462599716477 },
-  { 0.97202873223594299, -0.19999999999999996, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.1144773569375266, -0.19999999999999996, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.2535292433701000, -0.19999999999999996, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.3908453514752477, -0.19999999999999996, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.19999999999999996, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17509968571715159, -0.19999999999999996, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35359030214835629, -0.19999999999999996, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.53879807274537084, -0.19999999999999996, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.73384116418059731, -0.19999999999999996, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.94132799329524031, -0.19999999999999996, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.1628407021801439, -0.19999999999999996, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.3982440216739438, -0.19999999999999996, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.6450634983653640, -0.19999999999999996, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 1.8983924169967099, -0.19999999999999996, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler074 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996, nu=0.40000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.6788709752760483e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3298410018355870e-16
+// mean(f - f_Boost): 1.3877787807814457e-17
+// variance(f - f_Boost): 9.4370567274974557e-32
+// stddev(f - f_Boost): 3.0719792850046133e-16
 const testcase_ellint_3<double>
 data075[10] =
 {
   { 0.0000000000000000, -0.19999999999999996, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17386841301066674, -0.19999999999999996, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34395257914113253, -0.19999999999999996, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.50737088376869466, -0.19999999999999996, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.66262801717277631, -0.19999999999999996, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.80958766645079094, -0.19999999999999996, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 0.94913754236162040, -0.19999999999999996, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.0827985514222997, -0.19999999999999996, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.2124212429050478, -0.19999999999999996, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.3400002519661005, -0.19999999999999996, 0.40000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17527815368535152, -0.19999999999999996, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35504762134297801, -0.19999999999999996, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54387742353211344, -0.19999999999999996, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.74637910471804259, -0.19999999999999996, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.96690539714174639, -0.19999999999999996, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2087859420184757, -0.19999999999999996, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.4729799844168852, -0.19999999999999996, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.7564445064596661, -0.19999999999999996, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.0512956926676802, -0.19999999999999996, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler075 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996, nu=0.50000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.7788201301356829e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3841806057292116e-16
+// mean(f - f_Boost): 8.0491169285323847e-17
+// variance(f - f_Boost): 8.0538110429953348e-32
+// stddev(f - f_Boost): 2.8379237204328335e-16
 const testcase_ellint_3<double>
 data076[10] =
 {
   { 0.0000000000000000, -0.19999999999999996, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17369503942181799, -0.19999999999999996, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34265043534362660, -0.19999999999999996, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.50338337208655415, -0.19999999999999996, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.65426373297163609, -0.19999999999999996, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.79536193036145808, -0.19999999999999996, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.92791875910061605, -0.19999999999999996, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.0538145052725829, -0.19999999999999996, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.1752060022875899, -0.19999999999999996, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.2943374404397372, -0.19999999999999996, 0.50000000000000000, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17545727725228877, -0.19999999999999996, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35652666242062175, -0.19999999999999996, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.54913090549102406, -0.19999999999999996, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.75970161209211551, -0.19999999999999996, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.99504737401590326, -0.19999999999999996, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2614666007124373, -0.19999999999999996, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5625255355205496, -0.19999999999999996, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.8954460255613343, -0.19999999999999996, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2481046259421302, -0.19999999999999996, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler076 = 2.5000000000000020e-13;
 
-// Test data for k=-0.19999999999999996, nu=0.59999999999999998.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.8899223779598256e-16
+// Test data for k=-0.19999999999999996, nu=0.60000000000000009.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.5317584994994743e-16
+// mean(f - f_Boost): -1.3877787807814457e-17
+// variance(f - f_Boost): 1.0045745697575397e-31
+// stddev(f - f_Boost): 3.1695024369095219e-16
 const testcase_ellint_3<double>
 data077[10] =
 {
-  { 0.0000000000000000, -0.19999999999999996, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17352228440746925, -0.19999999999999996, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34136562863713626, -0.19999999999999996, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.49950328177638481, -0.19999999999999996, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.64625032705690799, -0.19999999999999996, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.78193941198403083, -0.19999999999999996, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.90817230934317128, -0.19999999999999996, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.0271563751276462, -0.19999999999999996, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.1412999379040518, -0.19999999999999996, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.2530330675914556, -0.19999999999999996, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.19999999999999996, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17563706072900442, -0.19999999999999996, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.35802800926807238, -0.19999999999999996, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.55456942250515051, -0.19999999999999996, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.77390003828438203, -0.19999999999999996, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0262441366366397, -0.19999999999999996, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.3228192988439669, -0.19999999999999996, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.6728005754680795, -0.19999999999999996, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.0761587107468511, -0.19999999999999996, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 2.5148333891629315, -0.19999999999999996, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler077 = 2.5000000000000020e-13;
 
-// Test data for k=-0.19999999999999996, nu=0.69999999999999996.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.9999318361775115e-16
+// Test data for k=-0.19999999999999996, nu=0.70000000000000007.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.1818454249546518e-16
+// mean(f - f_Boost): 3.6082248300317589e-17
+// variance(f - f_Boost): 8.9638010532618564e-32
+// stddev(f - f_Boost): 2.9939607634806868e-16
 const testcase_ellint_3<double>
 data078[10] =
 {
-  { 0.0000000000000000, -0.19999999999999996, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17335014404233895, -0.19999999999999996, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34009775298617811, -0.19999999999999996, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.49572560201923810, -0.19999999999999996, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.63856276669886503, -0.19999999999999996, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.76924438644867565, -0.19999999999999996, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.88973060843856466, -0.19999999999999996, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.0025230471636377, -0.19999999999999996, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.1102356376093103, -0.19999999999999996, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.2154356555075863, -0.19999999999999996, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.19999999999999996, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17581750846781172, -0.19999999999999996, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.35955226882028513, -0.19999999999999996, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.56020489659466499, -0.19999999999999996, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.78908196988531487, -0.19999999999999996, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.0611336754143517, -0.19999999999999996, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.3956969951058884, -0.19999999999999996, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 1.8138131612209609, -0.19999999999999996, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.3256365528879561, -0.19999999999999996, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 2.9058704854500963, -0.19999999999999996, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler078 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 5.0901276230707249e-16
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.9866614515542431e-16
+// mean(f - f_Boost): 1.8318679906315082e-16
+// variance(f - f_Boost): 3.1335688610218711e-31
+// stddev(f - f_Boost): 5.5978289193417400e-16
 const testcase_ellint_3<double>
 data079[10] =
 {
   { 0.0000000000000000, -0.19999999999999996, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17317861443718538, -0.19999999999999996, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.33884641598718701, -0.19999999999999996, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.49204565281259494, -0.19999999999999996, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.63117851188220320, -0.19999999999999996, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.75721095949544170, -0.19999999999999996, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.87245201443919118, -0.19999999999999996, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 0.97966584238831089, -0.19999999999999996, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.0816336325174360, -0.19999999999999996, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.1810223448909909, -0.19999999999999996, 0.80000000000000004, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17599862486281712, -0.19999999999999996, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36110007227128776, -0.19999999999999996, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56605039658567224, -0.19999999999999996, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.80537523874517691, -0.19999999999999996, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1005662342414086, -0.19999999999999996, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.4845340298105778, -0.19999999999999996, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.0043332244969392, -0.19999999999999996, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.7052856676744761, -0.19999999999999996, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.5622166386422629, -0.19999999999999996, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler079 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996, nu=0.90000000000000002.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 6.4833128442756722e-16
+// max(|f - f_Boost|): 2.6645352591003757e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.2817178727913890e-16
+// mean(f - f_Boost): 3.4694469519536142e-16
+// variance(f - f_Boost): 6.6311432369155086e-31
+// stddev(f - f_Boost): 8.1431831840598485e-16
 const testcase_ellint_3<double>
 data080[10] =
 {
   { 0.0000000000000000, -0.19999999999999996, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17300769173837277, -0.19999999999999996, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.33761123827372508, -0.19999999999999996, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.48845905690769426, -0.19999999999999996, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.62407720017324952, -0.19999999999999996, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.74578146525124289, -0.19999999999999996, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.85621583540073076, -0.19999999999999996, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 0.95837725988001199, -0.19999999999999996, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.0551821412633928, -0.19999999999999996, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.1493679916141861, -0.19999999999999996, 0.90000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17618041435044951, -0.19999999999999996, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36267207636502929, -0.19999999999999996, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57212028758237743, -0.19999999999999996, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.82293323876704483, -0.19999999999999996, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1457077279880385, -0.19999999999999996, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.5967346899325681, -0.19999999999999996, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.2856537353421724, -0.19999999999999996, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.4034714304613902, -0.19999999999999996, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.0448269356200361, -0.19999999999999996, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler080 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978, nu=0.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.1735566504509650e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.1735566504509645e-16
+// mean(f - f_Boost): -3.6082248300317589e-17
+// variance(f - f_Boost): 8.2258607846939269e-33
+// stddev(f - f_Boost): 9.0696531271564778e-17
 const testcase_ellint_3<double>
 data081[10] =
 {
   { 0.0000000000000000, -0.099999999999999978, 0.0000000000000000, 
-         0.0000000000000000 },
-  { 0.17454173353063659, -0.099999999999999978, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.34913506721468091, -0.099999999999999978, 0.0000000000000000, 
-         0.34906585039886590 },
-  { 0.52382550016538942, -0.099999999999999978, 0.0000000000000000, 
-         0.52359877559829882 },
+         0.0000000000000000, 0.0 },
+  { 0.17454173353063662, -0.099999999999999978, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.34913506721468096, -0.099999999999999978, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52382550016538953, -0.099999999999999978, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
   { 0.69864700854177020, -0.099999999999999978, 0.0000000000000000, 
-         0.69813170079773179 },
-  { 0.87361792586964870, -0.099999999999999978, 0.0000000000000000, 
-         0.87266462599716477 },
-  { 1.0487386319621683, -0.099999999999999978, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.2239913752078757, -0.099999999999999978, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.3993423113684049, -0.099999999999999978, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 1.5747455615173562, -0.099999999999999978, 0.0000000000000000, 
-         1.5707963267948966 },
+         0.69813170079773179, 0.0 },
+  { 0.87361792586964859, -0.099999999999999978, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0487386319621685, -0.099999999999999978, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2239913752078759, -0.099999999999999978, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.3993423113684051, -0.099999999999999978, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.5747455615173558, -0.099999999999999978, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler081 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978, nu=0.10000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3097339877269682e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.0305747373482148e-16
+// mean(f - f_Boost): -3.0531133177191807e-17
+// variance(f - f_Boost): 1.1508025840536076e-34
+// stddev(f - f_Boost): 1.0727546709539920e-17
 const testcase_ellint_3<double>
 data082[10] =
 {
   { 0.0000000000000000, -0.099999999999999978, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17436589347616613, -0.099999999999999978, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.34776067871237359, -0.099999999999999978, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.51936064354727796, -0.099999999999999978, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.68860303749364349, -0.099999999999999978, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.85524561882332051, -0.099999999999999978, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.0193708301908335, -0.099999999999999978, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.1813474067123044, -0.099999999999999978, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.3417670770424983, -0.099999999999999978, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.5013711111199950, -0.099999999999999978, 0.10000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17471821213559732, -0.099999999999999978, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35052902610011138, -0.099999999999999978, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.52842865990255727, -0.099999999999999978, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.70921799731166713, -0.099999999999999978, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.89340330535868662, -0.099999999999999978, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.0811075784236857, -0.099999999999999978, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.2720133232666426, -0.099999999999999978, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.4653630031861395, -0.099999999999999978, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.6600374067558428, -0.099999999999999978, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler082 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978, nu=0.20000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.4399947764827574e-16
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 1.6736714959992433e-16
+// mean(f - f_Boost): 5.5511151231257830e-18
+// variance(f - f_Boost): 3.8043060629871325e-36
+// stddev(f - f_Boost): 1.9504630380981673e-18
 const testcase_ellint_3<double>
 data083[10] =
 {
   { 0.0000000000000000, -0.099999999999999978, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17419068786141340, -0.099999999999999978, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34640537686230133, -0.099999999999999978, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.51502689171753946, -0.099999999999999978, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.67904147863672715, -0.099999999999999978, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.83811885126105179, -0.099999999999999978, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 0.99255278555742787, -0.099999999999999978, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.1431260546194930, -0.099999999999999978, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.2909589656532101, -0.099999999999999978, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.4373749386463430, -0.099999999999999978, 0.20000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17489533344059083, -0.099999999999999978, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35194305707815038, -0.099999999999999978, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53317790741512527, -0.099999999999999978, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72036681615081222, -0.099999999999999978, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.91480372268244303, -0.099999999999999978, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1170528708071514, -0.099999999999999978, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3266916802718358, -0.099999999999999978, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5421622241831547, -0.099999999999999978, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7608656115083421, -0.099999999999999978, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler083 = 2.5000000000000020e-13;
 
-// Test data for k=-0.099999999999999978, nu=0.29999999999999999.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.5650492137236872e-16
+// Test data for k=-0.099999999999999978, nu=0.30000000000000004.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 1.9186071760326645e-16
+// mean(f - f_Boost): -1.6653345369377347e-17
+// variance(f - f_Boost): 3.4238754566884194e-35
+// stddev(f - f_Boost): 5.8513891142945016e-18
 const testcase_ellint_3<double>
 data084[10] =
 {
-  { 0.0000000000000000, -0.099999999999999978, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17401611261390104, -0.099999999999999978, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34506869507511773, -0.099999999999999978, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.51081757604259859, -0.099999999999999978, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.66992297597712303, -0.099999999999999978, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.82209722856174228, -0.099999999999999978, 0.29999999999999999
-         0.87266462599716477 },
-  { 0.96792430487669590, -0.099999999999999978, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.1085964108954092, -0.099999999999999978, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.2456748370836999, -0.099999999999999978, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.3809159606704959, -0.099999999999999978, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.099999999999999978, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17507310163441189, -0.099999999999999978, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35337768072524217, -0.099999999999999978, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.53808167801629170, -0.099999999999999978, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.73215166755955019, -0.099999999999999978, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.93806546000201219, -0.099999999999999978, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.1573218723395986, -0.099999999999999978, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.3897859679542097, -0.099999999999999978, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.6331009404328622, -0.099999999999999978, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 1.8826015946315438, -0.099999999999999978, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler084 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978, nu=0.40000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.6854758534459740e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.0338059536914377e-16
+// mean(f - f_Boost): 2.7755575615628914e-17
+// variance(f - f_Boost): 9.5107651574678308e-35
+// stddev(f - f_Boost): 9.7523151904908362e-18
 const testcase_ellint_3<double>
 data085[10] =
 {
   { 0.0000000000000000, -0.099999999999999978, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17384216369897931, -0.099999999999999978, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34375018311376787, -0.099999999999999978, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.50672650758380455, -0.099999999999999978, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.66121264213337616, -0.099999999999999978, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.80706202005774441, -0.099999999999999978, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 0.94519376138245870, -0.099999999999999978, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.0771880300759584, -0.099999999999999978, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.2049711557188272, -0.099999999999999978, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.3306223265207477, -0.099999999999999978, 0.40000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17525152094559704, -0.099999999999999978, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35483343742825979, -0.099999999999999978, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54314913099505446, -0.099999999999999978, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.74463962034766862, -0.099999999999999978, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.96349276837570441, -0.099999999999999978, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2029081382746343, -0.099999999999999978, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.4638022887050806, -0.099999999999999978, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.7432413830105224, -0.099999999999999978, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.0336367403076760, -0.099999999999999978, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler085 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978, nu=0.50000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8017534281650347e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.9864616042835278e-16
+// mean(f - f_Boost): 1.0547118733938987e-16
+// variance(f - f_Boost): 7.5633408838247182e-32
+// stddev(f - f_Boost): 2.7501528837184157e-16
 const testcase_ellint_3<double>
 data086[10] =
 {
   { 0.0000000000000000, -0.099999999999999978, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17366883711936548, -0.099999999999999978, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34244940634881882, -0.099999999999999978, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.50274793281634367, -0.099999999999999978, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.65287941633275082, -0.099999999999999978, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.79291198790315398, -0.099999999999999978, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.92412201537880323, -0.099999999999999978, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.0484480076799372, -0.099999999999999978, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.1681168130475206, -0.099999999999999978, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.2854480708580160, -0.099999999999999978, 0.50000000000000000, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17543059564292182, -0.099999999999999978, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35631088838721664, -0.099999999999999978, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.54839023346436444, -0.099999999999999978, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.75790846946088830, -0.099999999999999978, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.99146713686720678, -0.099999999999999978, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2551692247937198, -0.099999999999999978, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5524660788146873, -0.099999999999999978, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.8806578570830670, -0.099999999999999978, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2279868912966849, -0.099999999999999978, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler086 = 2.5000000000000020e-13;
 
-// Test data for k=-0.099999999999999978, nu=0.59999999999999998.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.9142834151672032e-16
+// Test data for k=-0.099999999999999978, nu=0.60000000000000009.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.6726146516228014e-16
+// mean(f - f_Boost): -3.6082248300317589e-17
+// variance(f - f_Boost): 1.6073193116120635e-34
+// stddev(f - f_Boost): 1.2678009747638087e-17
 const testcase_ellint_3<double>
 data087[10] =
 {
-  { 0.0000000000000000, -0.099999999999999978, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17349612891469013, -0.099999999999999978, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34116594505539444, -0.099999999999999978, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.49887649430466674, -0.099999999999999978, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.64489553282165146, -0.099999999999999978, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.77956016553782437, -0.099999999999999978, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.90451074530096287, -0.099999999999999978, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.0220113666961632, -0.099999999999999978, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.1345351441065563, -0.099999999999999978, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.2445798942989255, -0.099999999999999978, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.099999999999999978, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17561033003590576, -0.099999999999999978, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.35781061668171932, -0.099999999999999978, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.55381585659629196, -0.099999999999999978, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.77204910484575640, -0.099999999999999978, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0224751740393108, -0.099999999999999978, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.3160230906351114, -0.099999999999999978, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.6616282844233206, -0.099999999999999978, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.0592555664850392, -0.099999999999999978, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 2.4913004919173822, -0.099999999999999978, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler087 = 2.5000000000000020e-13;
 
-// Test data for k=-0.099999999999999978, nu=0.69999999999999996.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.5172091551439012e-16
+// Test data for k=-0.099999999999999978, nu=0.70000000000000007.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 5
+// max(|f - f_Boost| / |f_Boost|): 2.1004074871280821e-16
+// mean(f - f_Boost): 3.3306690738754695e-17
+// variance(f - f_Boost): 1.3695501826753678e-34
+// stddev(f - f_Boost): 1.1702778228589003e-17
 const testcase_ellint_3<double>
 data088[10] =
 {
-  { 0.0000000000000000, -0.099999999999999978, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17332403516105047, -0.099999999999999978, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.33989939374896883, -0.099999999999999978, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.49510719568614070, -0.099999999999999978, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.63723607776354974, -0.099999999999999978, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.76693133887935327, -0.099999999999999978, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.88619382078823805, -0.099999999999999978, 0.69999999999999996
-         1.0471975511965976 },
-  { 0.99758012018676490, -0.099999999999999978, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.1037642270814410, -0.099999999999999978, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.2073745911083185, -0.099999999999999978, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, -0.099999999999999978, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17579072847532518, -0.099999999999999978, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.35933322840606297, -0.099999999999999978, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.55943788649460324, -0.099999999999999978, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.78716856504031707, -0.099999999999999978, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.0571501305617423, -0.099999999999999978, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.3882948301743525, -0.099999999999999978, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 1.8011785680114223, -0.099999999999999978, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.3057268183616464, -0.099999999999999978, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 2.8771910188009739, -0.099999999999999978, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler088 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1294144515772258e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.3133043868392355e-16
+// mean(f - f_Boost): 1.8041124150158794e-16
+// variance(f - f_Boost): 6.1843750436434569e-32
+// stddev(f - f_Boost): 2.4868403735751633e-16
 const testcase_ellint_3<double>
 data089[10] =
 {
   { 0.0000000000000000, -0.099999999999999978, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17315255197057014, -0.099999999999999978, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.33864936055747991, -0.099999999999999978, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.49143537041117613, -0.099999999999999978, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.62987861760047492, -0.099999999999999978, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.75496005490917517, -0.099999999999999978, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.86903081862701881, -0.099999999999999978, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 0.97490814820725591, -0.099999999999999978, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.0754290107171083, -0.099999999999999978, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.1733158866987732, -0.099999999999999978, 0.80000000000000004, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17597179535373417, -0.099999999999999978, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36087935387831499, -0.099999999999999978, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56526935244526444, -0.099999999999999978, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.80339402590612397, -0.099999999999999978, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.0963358646374459, -0.099999999999999978, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.4763748483246868, -0.099999999999999978, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.9896610222794102, -0.099999999999999978, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.6806423920122024, -0.099999999999999978, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.5246199613295612, -0.099999999999999978, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler089 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978, nu=0.90000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2325599449457852e-16
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.5624826890976725e-16
+// mean(f - f_Boost): 2.3314683517128288e-16
+// variance(f - f_Boost): 2.9401198977189756e-31
+// stddev(f - f_Boost): 5.4222872459129045e-16
 const testcase_ellint_3<double>
 data090[10] =
 {
   { 0.0000000000000000, -0.099999999999999978, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17298167549096563, -0.099999999999999978, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.33741546662741589, -0.099999999999999978, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.48785665376856868, -0.099999999999999978, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.62280288554518959, -0.099999999999999978, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.74358903115455188, -0.099999999999999978, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.85290207679298335, -0.099999999999999978, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 0.95379006645397379, -0.099999999999999978, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.0492213119872327, -0.099999999999999978, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.1419839485283374, -0.099999999999999978, 0.90000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17615353510599349, -0.099999999999999978, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36244964892922371, -0.099999999999999978, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57132457590110530, -0.099999999999999978, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.82087808820385000, -0.099999999999999978, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1411894342144451, -0.099999999999999978, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.5875929286844597, -0.099999999999999978, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.2678622986596659, -0.099999999999999978, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.3697528941897903, -0.099999999999999978, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 4.9862890417305499, -0.099999999999999978, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler090 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000, nu=0.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.1203697876423452e-16
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.1203697876423447e-16
+// mean(f - f_Boost): -1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
 const testcase_ellint_3<double>
 data091[10] =
 {
   { 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
-         0.0000000000000000 },
-  { 0.17453292519943292, 0.0000000000000000, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.34906585039886584, 0.0000000000000000, 0.0000000000000000, 
-         0.34906585039886590 },
-  { 0.52359877559829870, 0.0000000000000000, 0.0000000000000000, 
-         0.52359877559829882 },
-  { 0.69813170079773168, 0.0000000000000000, 0.0000000000000000, 
-         0.69813170079773179 },
+         0.0000000000000000, 0.0 },
+  { 0.17453292519943295, 0.0000000000000000, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.34906585039886590, 0.0000000000000000, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52359877559829882, 0.0000000000000000, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.69813170079773179, 0.0000000000000000, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
   { 0.87266462599716477, 0.0000000000000000, 0.0000000000000000, 
-         0.87266462599716477 },
-  { 1.0471975511965974, 0.0000000000000000, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.2217304763960304, 0.0000000000000000, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.3962634015954631, 0.0000000000000000, 0.0000000000000000, 
-         1.3962634015954636 },
+         0.87266462599716477, 0.0 },
+  { 1.0471975511965976, 0.0000000000000000, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2217304763960306, 0.0000000000000000, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.3962634015954636, 0.0000000000000000, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
   { 1.5707963267948966, 0.0000000000000000, 0.0000000000000000, 
-         1.5707963267948966 },
+         1.5707963267948966, 0.0 },
 };
 const double toler091 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000, nu=0.10000000000000001.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.1813975824747021e-16
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.1019052604815601e-16
+// mean(f - f_Boost): 2.7755575615628915e-18
+// variance(f - f_Boost): 9.5107651574678312e-37
+// stddev(f - f_Boost): 9.7523151904908366e-19
 const testcase_ellint_3<double>
 data092[10] =
 {
   { 0.0000000000000000, 0.0000000000000000, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17435710107516605, 0.0000000000000000, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.34769194715329604, 0.0000000000000000, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.51913731575866107, 0.0000000000000000, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.68810051897078450, 0.0000000000000000, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.85432615661706823, 0.0000000000000000, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.0179006647340794, 0.0000000000000000, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.1792120640746322, 0.0000000000000000, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.3388834245070498, 0.0000000000000000, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.4976955329233277, 0.0000000000000000, 0.10000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17470938780535167, 0.0000000000000000, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35045931581655582, 0.0000000000000000, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.52819841383849875, 0.0000000000000000, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.70868910807992958, 0.0000000000000000, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.89241311307249638, 0.0000000000000000, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.0794871444666669, 0.0000000000000000, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.2696086247356864, 0.0000000000000000, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.4620562617494721, 0.0000000000000000, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.6557647109660167, 0.0000000000000000, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler092 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000, nu=0.20000000000000001.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2402804784409065e-16
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.0831888697465320e-16
+// mean(f - f_Boost): -1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
 const testcase_ellint_3<double>
 data093[10] =
 {
   { 0.0000000000000000, 0.0000000000000000, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17418191132226074, 0.0000000000000000, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34633712256943405, 0.0000000000000000, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.51480684302043700, 0.0000000000000000, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.67855102942481937, 0.0000000000000000, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.83723056090326253, 0.0000000000000000, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 0.99114645269578161, 0.0000000000000000, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.1411014627915537, 0.0000000000000000, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.2882448138013969, 0.0000000000000000, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.4339343023863691, 0.0000000000000000, 0.20000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17488649304197776, 0.0000000000000000, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35187284488675424, 0.0000000000000000, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53294400750146131, 0.0000000000000000, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.71982347021822823, 0.0000000000000000, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.91377311030258745, 0.0000000000000000, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1153429007215137, 0.0000000000000000, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3241202847784086, 0.0000000000000000, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5385854914338242, 0.0000000000000000, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7562036827601815, 0.0000000000000000, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler093 = 2.5000000000000020e-13;
 
-// Test data for k=0.0000000000000000, nu=0.29999999999999999.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2972291118632678e-16
+// Test data for k=0.0000000000000000, nu=0.30000000000000004.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.0642101770923591e-16
+// mean(f - f_Boost): -1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
 const testcase_ellint_3<double>
 data094[10] =
 {
-  { 0.0000000000000000, 0.0000000000000000, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17400735186871724, 0.0000000000000000, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34500091027020219, 0.0000000000000000, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.51060069523901530, 0.0000000000000000, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.66944393961375448, 0.0000000000000000, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.82123776744538157, 0.0000000000000000, 0.29999999999999999
-         0.87266462599716477 },
-  { 0.96657579245516501, 0.0000000000000000, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.1066703663542414, 0.0000000000000000, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.2431094251944901, 0.0000000000000000, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.3776795151134889, 0.0000000000000000, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.0000000000000000, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17506424509761404, 0.0000000000000000, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35330695794774630, 0.0000000000000000, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.53784398359522367, 0.0000000000000000, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.73159289408687844, 0.0000000000000000, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.93699031797084975, 0.0000000000000000, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.1555098909390267, 0.0000000000000000, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.3870184960144325, 0.0000000000000000, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.6291980835772994, 0.0000000000000000, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 1.8774607092226381, 0.0000000000000000, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler094 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000, nu=0.40000000000000002.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.3524218164111537e-16
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.0449580089795878e-16
+// mean(f - f_Boost): -1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
 const testcase_ellint_3<double>
 data095[10] =
 {
   { 0.0000000000000000, 0.0000000000000000, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17383341868035862, 0.0000000000000000, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34368286022299821, 0.0000000000000000, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.50651268947499395, 0.0000000000000000, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.66074441806097539, 0.0000000000000000, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.80622931670113474, 0.0000000000000000, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 0.94389791565435210, 0.0000000000000000, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.0753503387899728, 0.0000000000000000, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.2025374759127518, 0.0000000000000000, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.3275651989026320, 0.0000000000000000, 0.40000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17524264820030025, 0.0000000000000000, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35476219513871499, 0.0000000000000000, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54290749235440094, 0.0000000000000000, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.74406433757109913, 0.0000000000000000, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.96236826162553313, 0.0000000000000000, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2009785880262487, 0.0000000000000000, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.4608000106167567, 0.0000000000000000, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.7389349574753439, 0.0000000000000000, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.0278893379868057, 0.0000000000000000, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler095 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000, nu=0.50000000000000000.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.6090167266677240e-16
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.0254203825026289e-16
+// mean(f - f_Boost): -1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
 const testcase_ellint_3<double>
 data096[10] =
 {
   { 0.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17366010776037044, 0.0000000000000000, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34238253799539309, 0.0000000000000000, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.50253707775976397, 0.0000000000000000, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.65242145347295766, 0.0000000000000000, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.79210420018698058, 0.0000000000000000, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.92287437995632171, 0.0000000000000000, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.0466900550798659, 0.0000000000000000, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.1658007366618623, 0.0000000000000000, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.2825498301618641, 0.0000000000000000, 0.50000000000000000, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17542170661831016, 0.0000000000000000, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35623911740195419, 0.0000000000000000, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.54814449099863127, 0.0000000000000000, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.75731546607718081, 0.0000000000000000, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.99028751188233310, 0.0000000000000000, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2531022857760581, 0.0000000000000000, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5491761777615785, 0.0000000000000000, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.8758359693666533, 0.0000000000000000, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2214414690791831, 0.0000000000000000, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler096 = 2.5000000000000020e-13;
 
-// Test data for k=0.0000000000000000, nu=0.59999999999999998.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.4581288258006758e-16
+// Test data for k=0.0000000000000000, nu=0.60000000000000009.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 2.1742785192400269e-16
+// mean(f - f_Boost): 1.3877787807814457e-17
+// variance(f - f_Boost): 2.3776912893669577e-35
+// stddev(f - f_Boost): 4.8761575952454181e-18
 const testcase_ellint_3<double>
 data097[10] =
 {
-  { 0.0000000000000000, 0.0000000000000000, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17348741514884700, 0.0000000000000000, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34109952405241289, 0.0000000000000000, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.49866850781226285, 0.0000000000000000, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.64444732407062499, 0.0000000000000000, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.77877564686544720, 0.0000000000000000, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.90330743691883475, 0.0000000000000000, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.0203257987604104, 0.0000000000000000, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.1323247918768629, 0.0000000000000000, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.2418235332245127, 0.0000000000000000, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.0000000000000000, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17560142466065651, 0.0000000000000000, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.35773830754879005, 0.0000000000000000, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.55356583986445973, 0.0000000000000000, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.77143701715151514, 0.0000000000000000, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0212334940541210, 0.0000000000000000, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.3137928444460387, 0.0000000000000000, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.6579755004159076, 0.0000000000000000, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.0537461418295506, 0.0000000000000000, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 2.4836470664490253, 0.0000000000000000, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler097 = 2.5000000000000020e-13;
 
-// Test data for k=0.0000000000000000, nu=0.69999999999999996.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.5088894797856263e-16
+// Test data for k=0.0000000000000000, nu=0.70000000000000007.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 4
+// max(|f - f_Boost| / |f_Boost|): 3.0903019454022601e-16
+// mean(f - f_Boost): -6.9388939039072284e-17
+// variance(f - f_Boost): 5.9442282234173945e-34
+// stddev(f - f_Boost): 2.4380787976227090e-17
 const testcase_ellint_3<double>
 data098[10] =
 {
-  { 0.0000000000000000, 0.0000000000000000, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17331533692234474, 0.0000000000000000, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.33983341309265935, 0.0000000000000000, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.49490198805931979, 0.0000000000000000, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.63679715525145297, 0.0000000000000000, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.76616861049481944, 0.0000000000000000, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.88503143209004198, 0.0000000000000000, 0.69999999999999996
-         1.0471975511965976 },
-  { 0.99596060249112173, 0.0000000000000000, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.1016495050260424, 0.0000000000000000, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.2047457872617382, 0.0000000000000000, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.0000000000000000, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17578180667760368, 0.0000000000000000, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.35926037139410999, 0.0000000000000000, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.55918341315855080, 0.0000000000000000, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.78653584856932546, 0.0000000000000000, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.0558379029273324, 0.0000000000000000, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.3858662544850615, 0.0000000000000000, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 1.7970491170359040, 0.0000000000000000, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.2992404490153917, 0.0000000000000000, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 2.8678686047727382, 0.0000000000000000, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler098 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000, nu=0.80000000000000004.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8375904358197891e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.2373744057922657e-16
+// mean(f - f_Boost): 1.0269562977782698e-16
+// variance(f - f_Boost): 1.4388836606733082e-32
+// stddev(f - f_Boost): 1.1995347684303728e-16
 const testcase_ellint_3<double>
 data099[10] =
 {
   { 0.0000000000000000, 0.0000000000000000, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17314386919344210, 0.0000000000000000, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.33858381342073240, 0.0000000000000000, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.49123285640844727, 0.0000000000000000, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.62944854858904509, 0.0000000000000000, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.75421778305499343, 0.0000000000000000, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.86790634112156617, 0.0000000000000000, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 0.97334918087427558, 0.0000000000000000, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.0734012615283985, 0.0000000000000000, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.1708024551734544, 0.0000000000000000, 0.80000000000000004, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17596285706118869, 0.0000000000000000, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36080593896484231, 0.0000000000000000, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56501022706967863, 0.0000000000000000, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.80273891984116930, 0.0000000000000000, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.0949425007763358, 0.0000000000000000, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.4736985692253419, 0.0000000000000000, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.9848676587180696, 0.0000000000000000, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.6726187823193546, 0.0000000000000000, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.5124073655203634, 0.0000000000000000, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler099 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000, nu=0.90000000000000002.
-// max(|f - f_GSL|): 1.1102230246251565e-16
-// max(|f - f_GSL| / |f_GSL|): 1.7838310376154469e-16
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 6.6108624815885066e-16
+// mean(f - f_Boost): 2.1371793224034264e-16
+// variance(f - f_Boost): 5.6389326618626776e-33
+// stddev(f - f_Boost): 7.5092826966779442e-17
 const testcase_ellint_3<double>
 data100[10] =
 {
   { 0.0000000000000000, 0.0000000000000000, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17297300811030597, 0.0000000000000000, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.33735034635360817, 0.0000000000000000, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.48765675230233130, 0.0000000000000000, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.62238126886123568, 0.0000000000000000, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.74286600807269243, 0.0000000000000000, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.85181283909264949, 0.0000000000000000, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 0.95228683995371133, 0.0000000000000000, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.0472730487412552, 0.0000000000000000, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.1395754288497419, 0.0000000000000000, 0.90000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17614458024574997, 0.0000000000000000, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36237566578821978, 0.0000000000000000, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57106058859196640, 0.0000000000000000, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.82019857015755915, 0.0000000000000000, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1397014388908147, 0.0000000000000000, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.5845952415154960, 0.0000000000000000, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.2620531413370775, 0.0000000000000000, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.3587842061975066, 0.0000000000000000, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 4.9672941328980507, 0.0000000000000000, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler100 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009, nu=0.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.1735566504509650e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.1735566504509645e-16
+// mean(f - f_Boost): -5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
 const testcase_ellint_3<double>
 data101[10] =
 {
   { 0.0000000000000000, 0.10000000000000009, 0.0000000000000000, 
-         0.0000000000000000 },
-  { 0.17454173353063659, 0.10000000000000009, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.34913506721468091, 0.10000000000000009, 0.0000000000000000, 
-         0.34906585039886590 },
-  { 0.52382550016538942, 0.10000000000000009, 0.0000000000000000, 
-         0.52359877559829882 },
+         0.0000000000000000, 0.0 },
+  { 0.17454173353063662, 0.10000000000000009, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.34913506721468096, 0.10000000000000009, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52382550016538953, 0.10000000000000009, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
   { 0.69864700854177020, 0.10000000000000009, 0.0000000000000000, 
-         0.69813170079773179 },
-  { 0.87361792586964870, 0.10000000000000009, 0.0000000000000000, 
-         0.87266462599716477 },
-  { 1.0487386319621683, 0.10000000000000009, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.2239913752078757, 0.10000000000000009, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.3993423113684049, 0.10000000000000009, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 1.5747455615173562, 0.10000000000000009, 0.0000000000000000, 
-         1.5707963267948966 },
+         0.69813170079773179, 0.0 },
+  { 0.87361792586964859, 0.10000000000000009, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0487386319621685, 0.10000000000000009, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2239913752078759, 0.10000000000000009, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.3993423113684051, 0.10000000000000009, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.5747455615173560, 0.10000000000000009, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler101 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009, nu=0.10000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3097339877269682e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.0305747373482148e-16
+// mean(f - f_Boost): -3.0531133177191807e-17
+// variance(f - f_Boost): 1.1508025840536076e-34
+// stddev(f - f_Boost): 1.0727546709539920e-17
 const testcase_ellint_3<double>
 data102[10] =
 {
   { 0.0000000000000000, 0.10000000000000009, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17436589347616613, 0.10000000000000009, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.34776067871237359, 0.10000000000000009, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.51936064354727796, 0.10000000000000009, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.68860303749364349, 0.10000000000000009, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.85524561882332051, 0.10000000000000009, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.0193708301908335, 0.10000000000000009, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.1813474067123044, 0.10000000000000009, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.3417670770424983, 0.10000000000000009, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.5013711111199950, 0.10000000000000009, 0.10000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17471821213559732, 0.10000000000000009, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35052902610011138, 0.10000000000000009, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.52842865990255727, 0.10000000000000009, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.70921799731166713, 0.10000000000000009, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.89340330535868662, 0.10000000000000009, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.0811075784236857, 0.10000000000000009, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.2720133232666426, 0.10000000000000009, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.4653630031861395, 0.10000000000000009, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.6600374067558428, 0.10000000000000009, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler102 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009, nu=0.20000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.4399947764827574e-16
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 1.6736714959992433e-16
+// mean(f - f_Boost): 5.5511151231257830e-18
+// variance(f - f_Boost): 3.8043060629871325e-36
+// stddev(f - f_Boost): 1.9504630380981673e-18
 const testcase_ellint_3<double>
 data103[10] =
 {
   { 0.0000000000000000, 0.10000000000000009, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17419068786141340, 0.10000000000000009, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34640537686230133, 0.10000000000000009, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.51502689171753946, 0.10000000000000009, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.67904147863672715, 0.10000000000000009, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.83811885126105179, 0.10000000000000009, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 0.99255278555742787, 0.10000000000000009, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.1431260546194930, 0.10000000000000009, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.2909589656532101, 0.10000000000000009, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.4373749386463430, 0.10000000000000009, 0.20000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17489533344059083, 0.10000000000000009, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35194305707815038, 0.10000000000000009, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53317790741512527, 0.10000000000000009, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72036681615081222, 0.10000000000000009, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.91480372268244303, 0.10000000000000009, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1170528708071514, 0.10000000000000009, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3266916802718358, 0.10000000000000009, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5421622241831547, 0.10000000000000009, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7608656115083421, 0.10000000000000009, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler103 = 2.5000000000000020e-13;
 
-// Test data for k=0.10000000000000009, nu=0.29999999999999999.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.5650492137236872e-16
+// Test data for k=0.10000000000000009, nu=0.30000000000000004.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 1.9186071760326645e-16
+// mean(f - f_Boost): -1.6653345369377347e-17
+// variance(f - f_Boost): 3.4238754566884194e-35
+// stddev(f - f_Boost): 5.8513891142945016e-18
 const testcase_ellint_3<double>
 data104[10] =
 {
-  { 0.0000000000000000, 0.10000000000000009, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17401611261390104, 0.10000000000000009, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34506869507511773, 0.10000000000000009, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.51081757604259859, 0.10000000000000009, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.66992297597712303, 0.10000000000000009, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.82209722856174228, 0.10000000000000009, 0.29999999999999999
-         0.87266462599716477 },
-  { 0.96792430487669590, 0.10000000000000009, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.1085964108954092, 0.10000000000000009, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.2456748370836999, 0.10000000000000009, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.3809159606704959, 0.10000000000000009, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.10000000000000009, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17507310163441189, 0.10000000000000009, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35337768072524217, 0.10000000000000009, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.53808167801629170, 0.10000000000000009, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.73215166755955019, 0.10000000000000009, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.93806546000201219, 0.10000000000000009, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.1573218723395986, 0.10000000000000009, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.3897859679542097, 0.10000000000000009, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.6331009404328622, 0.10000000000000009, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 1.8826015946315438, 0.10000000000000009, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler104 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009, nu=0.40000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.6854758534459740e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.0338059536914377e-16
+// mean(f - f_Boost): 2.7755575615628914e-17
+// variance(f - f_Boost): 9.5107651574678308e-35
+// stddev(f - f_Boost): 9.7523151904908362e-18
 const testcase_ellint_3<double>
 data105[10] =
 {
   { 0.0000000000000000, 0.10000000000000009, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17384216369897931, 0.10000000000000009, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34375018311376787, 0.10000000000000009, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.50672650758380455, 0.10000000000000009, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.66121264213337616, 0.10000000000000009, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.80706202005774441, 0.10000000000000009, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 0.94519376138245870, 0.10000000000000009, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.0771880300759584, 0.10000000000000009, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.2049711557188272, 0.10000000000000009, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.3306223265207477, 0.10000000000000009, 0.40000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17525152094559704, 0.10000000000000009, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35483343742825979, 0.10000000000000009, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54314913099505446, 0.10000000000000009, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.74463962034766862, 0.10000000000000009, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.96349276837570441, 0.10000000000000009, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2029081382746343, 0.10000000000000009, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.4638022887050806, 0.10000000000000009, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.7432413830105224, 0.10000000000000009, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.0336367403076760, 0.10000000000000009, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler105 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009, nu=0.50000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8017534281650347e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.9864616042835278e-16
+// mean(f - f_Boost): 9.4368957093138303e-17
+// variance(f - f_Boost): 7.7794254682023874e-32
+// stddev(f - f_Boost): 2.7891621444803792e-16
 const testcase_ellint_3<double>
 data106[10] =
 {
   { 0.0000000000000000, 0.10000000000000009, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17366883711936548, 0.10000000000000009, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34244940634881882, 0.10000000000000009, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.50274793281634367, 0.10000000000000009, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.65287941633275082, 0.10000000000000009, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.79291198790315398, 0.10000000000000009, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.92412201537880323, 0.10000000000000009, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.0484480076799372, 0.10000000000000009, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.1681168130475206, 0.10000000000000009, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.2854480708580160, 0.10000000000000009, 0.50000000000000000, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17543059564292182, 0.10000000000000009, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35631088838721664, 0.10000000000000009, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.54839023346436455, 0.10000000000000009, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.75790846946088830, 0.10000000000000009, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.99146713686720678, 0.10000000000000009, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2551692247937198, 0.10000000000000009, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5524660788146873, 0.10000000000000009, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.8806578570830670, 0.10000000000000009, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2279868912966849, 0.10000000000000009, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler106 = 2.5000000000000020e-13;
 
-// Test data for k=0.10000000000000009, nu=0.59999999999999998.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.9142834151672032e-16
+// Test data for k=0.10000000000000009, nu=0.60000000000000009.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.6726146516228014e-16
+// mean(f - f_Boost): -3.6082248300317589e-17
+// variance(f - f_Boost): 1.6073193116120635e-34
+// stddev(f - f_Boost): 1.2678009747638087e-17
 const testcase_ellint_3<double>
 data107[10] =
 {
-  { 0.0000000000000000, 0.10000000000000009, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17349612891469013, 0.10000000000000009, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34116594505539444, 0.10000000000000009, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.49887649430466674, 0.10000000000000009, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.64489553282165146, 0.10000000000000009, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.77956016553782437, 0.10000000000000009, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.90451074530096287, 0.10000000000000009, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.0220113666961632, 0.10000000000000009, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.1345351441065563, 0.10000000000000009, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.2445798942989255, 0.10000000000000009, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.10000000000000009, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17561033003590576, 0.10000000000000009, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.35781061668171932, 0.10000000000000009, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.55381585659629196, 0.10000000000000009, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.77204910484575640, 0.10000000000000009, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0224751740393108, 0.10000000000000009, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.3160230906351114, 0.10000000000000009, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.6616282844233206, 0.10000000000000009, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.0592555664850392, 0.10000000000000009, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 2.4913004919173822, 0.10000000000000009, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler107 = 2.5000000000000020e-13;
 
-// Test data for k=0.10000000000000009, nu=0.69999999999999996.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.5172091551439012e-16
+// Test data for k=0.10000000000000009, nu=0.70000000000000007.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 5
+// max(|f - f_Boost| / |f_Boost|): 2.1004074871280821e-16
+// mean(f - f_Boost): 3.3306690738754695e-17
+// variance(f - f_Boost): 1.3695501826753678e-34
+// stddev(f - f_Boost): 1.1702778228589003e-17
 const testcase_ellint_3<double>
 data108[10] =
 {
-  { 0.0000000000000000, 0.10000000000000009, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17332403516105047, 0.10000000000000009, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.33989939374896883, 0.10000000000000009, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.49510719568614070, 0.10000000000000009, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.63723607776354974, 0.10000000000000009, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.76693133887935327, 0.10000000000000009, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.88619382078823805, 0.10000000000000009, 0.69999999999999996
-         1.0471975511965976 },
-  { 0.99758012018676490, 0.10000000000000009, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.1037642270814410, 0.10000000000000009, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.2073745911083185, 0.10000000000000009, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.10000000000000009, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17579072847532518, 0.10000000000000009, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.35933322840606297, 0.10000000000000009, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.55943788649460324, 0.10000000000000009, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.78716856504031707, 0.10000000000000009, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.0571501305617423, 0.10000000000000009, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.3882948301743525, 0.10000000000000009, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 1.8011785680114223, 0.10000000000000009, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.3057268183616464, 0.10000000000000009, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 2.8771910188009739, 0.10000000000000009, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler108 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1294144515772258e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.3133043868392355e-16
+// mean(f - f_Boost): 1.8041124150158794e-16
+// variance(f - f_Boost): 6.1843750436434569e-32
+// stddev(f - f_Boost): 2.4868403735751633e-16
 const testcase_ellint_3<double>
 data109[10] =
 {
   { 0.0000000000000000, 0.10000000000000009, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17315255197057014, 0.10000000000000009, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.33864936055747991, 0.10000000000000009, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.49143537041117613, 0.10000000000000009, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.62987861760047492, 0.10000000000000009, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.75496005490917517, 0.10000000000000009, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.86903081862701881, 0.10000000000000009, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 0.97490814820725591, 0.10000000000000009, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.0754290107171083, 0.10000000000000009, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.1733158866987732, 0.10000000000000009, 0.80000000000000004, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17597179535373417, 0.10000000000000009, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36087935387831499, 0.10000000000000009, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56526935244526444, 0.10000000000000009, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.80339402590612397, 0.10000000000000009, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.0963358646374459, 0.10000000000000009, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.4763748483246868, 0.10000000000000009, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.9896610222794102, 0.10000000000000009, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.6806423920122024, 0.10000000000000009, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.5246199613295612, 0.10000000000000009, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler109 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009, nu=0.90000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2325599449457852e-16
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.5624826890976725e-16
+// mean(f - f_Boost): 2.3314683517128288e-16
+// variance(f - f_Boost): 2.9401198977189756e-31
+// stddev(f - f_Boost): 5.4222872459129045e-16
 const testcase_ellint_3<double>
 data110[10] =
 {
   { 0.0000000000000000, 0.10000000000000009, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17298167549096563, 0.10000000000000009, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.33741546662741589, 0.10000000000000009, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.48785665376856868, 0.10000000000000009, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.62280288554518959, 0.10000000000000009, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.74358903115455188, 0.10000000000000009, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.85290207679298335, 0.10000000000000009, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 0.95379006645397379, 0.10000000000000009, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.0492213119872327, 0.10000000000000009, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.1419839485283374, 0.10000000000000009, 0.90000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17615353510599349, 0.10000000000000009, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36244964892922371, 0.10000000000000009, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57132457590110530, 0.10000000000000009, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.82087808820385000, 0.10000000000000009, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1411894342144451, 0.10000000000000009, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.5875929286844597, 0.10000000000000009, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.2678622986596659, 0.10000000000000009, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.3697528941897903, 0.10000000000000009, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 4.9862890417305499, 0.10000000000000009, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler110 = 2.5000000000000020e-13;
 
-// Test data for k=0.19999999999999996, nu=0.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2156475739151676e-16
+// Test data for k=0.20000000000000018, nu=0.0000000000000000.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.2156475739151676e-16
+// mean(f - f_Boost): -5.2735593669694933e-17
+// variance(f - f_Boost): 3.0473442641042680e-32
+// stddev(f - f_Boost): 1.7456644190978597e-16
 const testcase_ellint_3<double>
 data111[10] =
 {
-  { 0.0000000000000000, 0.19999999999999996, 0.0000000000000000, 
-         0.0000000000000000 },
-  { 0.17456817290292809, 0.19999999999999996, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.34934315932086801, 0.19999999999999996, 0.0000000000000000, 
-         0.34906585039886590 },
-  { 0.52450880529443988, 0.19999999999999996, 0.0000000000000000, 
-         0.52359877559829882 },
-  { 0.70020491009844876, 0.19999999999999996, 0.0000000000000000, 
-         0.69813170079773179 },
-  { 0.87651006649967955, 0.19999999999999996, 0.0000000000000000, 
-         0.87266462599716477 },
-  { 1.0534305870298994, 0.19999999999999996, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.2308975521670784, 0.19999999999999996, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.4087733584990738, 0.19999999999999996, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 1.5868678474541660, 0.19999999999999996, 0.0000000000000000, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.20000000000000018, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17456817290292806, 0.20000000000000018, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.34934315932086796, 0.20000000000000018, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52450880529443988, 0.20000000000000018, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.70020491009844887, 0.20000000000000018, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.87651006649967977, 0.20000000000000018, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0534305870298994, 0.20000000000000018, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2308975521670789, 0.20000000000000018, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4087733584990738, 0.20000000000000018, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.5868678474541662, 0.20000000000000018, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler111 = 2.5000000000000020e-13;
 
-// Test data for k=0.19999999999999996, nu=0.10000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3374593253183472e-16
+// Test data for k=0.20000000000000018, nu=0.10000000000000001.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.0890622182605400e-16
+// mean(f - f_Boost): -3.8857805861880476e-17
+// variance(f - f_Boost): 2.8794792590749608e-32
+// stddev(f - f_Boost): 1.6969028431454054e-16
 const testcase_ellint_3<double>
 data112[10] =
 {
-  { 0.0000000000000000, 0.19999999999999996, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17439228502691748, 0.19999999999999996, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.34796731137565740, 0.19999999999999996, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.52003370294544848, 0.19999999999999996, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.69012222258631462, 0.19999999999999996, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.85803491465566772, 0.19999999999999996, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.0238463961099364, 0.19999999999999996, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.1878691059202153, 0.19999999999999996, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.3505985031831940, 0.19999999999999996, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.5126513474261087, 0.19999999999999996, 0.10000000000000001, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.20000000000000018, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17474469953608965, 0.20000000000000018, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35073860234984255, 0.20000000000000018, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.52912258712951521, 0.20000000000000018, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.71081701558898069, 0.20000000000000018, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.89640758521169384, 0.20000000000000018, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.0860417038089853, 0.20000000000000018, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.2793599255528623, 0.20000000000000018, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.4754938544089076, 0.20000000000000018, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.6731552050562593, 0.20000000000000018, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler112 = 2.5000000000000020e-13;
 
-// Test data for k=0.19999999999999996, nu=0.20000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.4549984059502760e-16
+// Test data for k=0.20000000000000018, nu=0.20000000000000001.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 3.9570963716579749e-16
+// mean(f - f_Boost): -5.8286708792820721e-17
+// variance(f - f_Boost): 3.1158217732380362e-32
+// stddev(f - f_Boost): 1.7651690494788412e-16
 const testcase_ellint_3<double>
 data113[10] =
 {
-  { 0.0000000000000000, 0.19999999999999996, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17421703179583747, 0.19999999999999996, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34661057411998791, 0.19999999999999996, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.51569006052647393, 0.19999999999999996, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.68052412821107244, 0.19999999999999996, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.84081341263313825, 0.19999999999999996, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 0.99683359988842890, 0.19999999999999996, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.1493086715118852, 0.19999999999999996, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.2992699693957541, 0.19999999999999996, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.4479323932249564, 0.19999999999999996, 0.20000000000000001, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.20000000000000018, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17492186907740698, 0.20000000000000018, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35215414286134267, 0.20000000000000018, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53388285615182440, 0.20000000000000018, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72200960282688265, 0.20000000000000018, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.91793087614428526, 0.20000000000000018, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1222602841587976, 0.20000000000000018, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3345489407496247, 0.20000000000000018, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5531225705475502, 0.20000000000000018, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7751816279738935, 0.20000000000000018, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler113 = 2.5000000000000020e-13;
 
-// Test data for k=0.19999999999999996, nu=0.29999999999999999.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.3140668101543467e-16
+// Test data for k=0.20000000000000018, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.6785817924053817e-16
+// mean(f - f_Boost): -1.1102230246251566e-17
+// variance(f - f_Boost): 9.9840208317034302e-32
+// stddev(f - f_Boost): 3.1597501217190311e-16
 const testcase_ellint_3<double>
 data114[10] =
 {
-  { 0.0000000000000000, 0.19999999999999996, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17404240913577704, 0.19999999999999996, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34527248032587193, 0.19999999999999996, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.51147118981668416, 0.19999999999999996, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.67137107867777601, 0.19999999999999996, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.82470418188668893, 0.19999999999999996, 0.29999999999999999
-         0.87266462599716477 },
-  { 0.97202873223594299, 0.19999999999999996, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.1144773569375266, 0.19999999999999996, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.2535292433701000, 0.19999999999999996, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.3908453514752477, 0.19999999999999996, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.20000000000000018, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17509968571715159, 0.20000000000000018, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35359030214835629, 0.20000000000000018, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.53879807274537084, 0.20000000000000018, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.73384116418059731, 0.20000000000000018, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.94132799329524031, 0.20000000000000018, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.1628407021801439, 0.20000000000000018, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.3982440216739438, 0.20000000000000018, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.6450634983653640, 0.20000000000000018, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 1.8983924169967099, 0.20000000000000018, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler114 = 2.5000000000000020e-13;
 
-// Test data for k=0.19999999999999996, nu=0.40000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.6788709752760483e-16
+// Test data for k=0.20000000000000018, nu=0.40000000000000002.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 3.6738449250038925e-16
+// mean(f - f_Boost): -3.0531133177191807e-17
+// variance(f - f_Boost): 2.7810428396951687e-32
+// stddev(f - f_Boost): 1.6676458975739331e-16
 const testcase_ellint_3<double>
 data115[10] =
 {
-  { 0.0000000000000000, 0.19999999999999996, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17386841301066674, 0.19999999999999996, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34395257914113253, 0.19999999999999996, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.50737088376869466, 0.19999999999999996, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.66262801717277631, 0.19999999999999996, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.80958766645079094, 0.19999999999999996, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 0.94913754236162040, 0.19999999999999996, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.0827985514222997, 0.19999999999999996, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.2124212429050478, 0.19999999999999996, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.3400002519661005, 0.19999999999999996, 0.40000000000000002, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.20000000000000018, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17527815368535152, 0.20000000000000018, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35504762134297801, 0.20000000000000018, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54387742353211344, 0.20000000000000018, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.74637910471804259, 0.20000000000000018, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.96690539714174639, 0.20000000000000018, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2087859420184757, 0.20000000000000018, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.4729799844168852, 0.20000000000000018, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.7564445064596661, 0.20000000000000018, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.0512956926676806, 0.20000000000000018, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler115 = 2.5000000000000020e-13;
 
-// Test data for k=0.19999999999999996, nu=0.50000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.7788201301356829e-16
+// Test data for k=0.20000000000000018, nu=0.50000000000000000.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3841806057292116e-16
+// mean(f - f_Boost): 3.6082248300317589e-17
+// variance(f - f_Boost): 8.9638010532618564e-32
+// stddev(f - f_Boost): 2.9939607634806868e-16
 const testcase_ellint_3<double>
 data116[10] =
 {
-  { 0.0000000000000000, 0.19999999999999996, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17369503942181799, 0.19999999999999996, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34265043534362660, 0.19999999999999996, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.50338337208655415, 0.19999999999999996, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.65426373297163609, 0.19999999999999996, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.79536193036145808, 0.19999999999999996, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.92791875910061605, 0.19999999999999996, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.0538145052725829, 0.19999999999999996, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.1752060022875899, 0.19999999999999996, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.2943374404397372, 0.19999999999999996, 0.50000000000000000, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.20000000000000018, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17545727725228877, 0.20000000000000018, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35652666242062175, 0.20000000000000018, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.54913090549102406, 0.20000000000000018, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.75970161209211551, 0.20000000000000018, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.99504737401590326, 0.20000000000000018, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2614666007124373, 0.20000000000000018, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5625255355205498, 0.20000000000000018, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.8954460255613346, 0.20000000000000018, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2481046259421302, 0.20000000000000018, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler116 = 2.5000000000000020e-13;
 
-// Test data for k=0.19999999999999996, nu=0.59999999999999998.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.8899223779598256e-16
+// Test data for k=0.20000000000000018, nu=0.60000000000000009.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.5317584994994743e-16
+// mean(f - f_Boost): -1.3877787807814457e-17
+// variance(f - f_Boost): 1.0045745697575397e-31
+// stddev(f - f_Boost): 3.1695024369095219e-16
 const testcase_ellint_3<double>
 data117[10] =
 {
-  { 0.0000000000000000, 0.19999999999999996, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17352228440746925, 0.19999999999999996, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34136562863713626, 0.19999999999999996, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.49950328177638481, 0.19999999999999996, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.64625032705690799, 0.19999999999999996, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.78193941198403083, 0.19999999999999996, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.90817230934317128, 0.19999999999999996, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.0271563751276462, 0.19999999999999996, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.1412999379040518, 0.19999999999999996, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.2530330675914556, 0.19999999999999996, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.20000000000000018, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17563706072900442, 0.20000000000000018, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.35802800926807238, 0.20000000000000018, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.55456942250515051, 0.20000000000000018, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.77390003828438203, 0.20000000000000018, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0262441366366397, 0.20000000000000018, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.3228192988439669, 0.20000000000000018, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.6728005754680795, 0.20000000000000018, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.0761587107468511, 0.20000000000000018, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 2.5148333891629315, 0.20000000000000018, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler117 = 2.5000000000000020e-13;
 
-// Test data for k=0.19999999999999996, nu=0.69999999999999996.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.9999318361775115e-16
+// Test data for k=0.20000000000000018, nu=0.70000000000000007.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.2209418045118284e-16
+// mean(f - f_Boost): 2.4980018054066023e-17
+// variance(f - f_Boost): 9.1989071679544611e-32
+// stddev(f - f_Boost): 3.0329700242426498e-16
 const testcase_ellint_3<double>
 data118[10] =
 {
-  { 0.0000000000000000, 0.19999999999999996, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17335014404233895, 0.19999999999999996, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34009775298617811, 0.19999999999999996, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.49572560201923810, 0.19999999999999996, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.63856276669886503, 0.19999999999999996, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.76924438644867565, 0.19999999999999996, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.88973060843856466, 0.19999999999999996, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.0025230471636377, 0.19999999999999996, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.1102356376093103, 0.19999999999999996, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.2154356555075863, 0.19999999999999996, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.20000000000000018, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17581750846781172, 0.20000000000000018, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.35955226882028513, 0.20000000000000018, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.56020489659466499, 0.20000000000000018, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.78908196988531498, 0.20000000000000018, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.0611336754143517, 0.20000000000000018, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.3956969951058884, 0.20000000000000018, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 1.8138131612209609, 0.20000000000000018, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.3256365528879561, 0.20000000000000018, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 2.9058704854500963, 0.20000000000000018, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler118 = 2.5000000000000020e-13;
 
-// Test data for k=0.19999999999999996, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 5.0901276230707249e-16
+// Test data for k=0.20000000000000018, nu=0.80000000000000004.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.7399960886656824e-16
+// mean(f - f_Boost): 1.3877787807814457e-16
+// variance(f - f_Boost): 1.7585404776158019e-31
+// stddev(f - f_Boost): 4.1934955319110593e-16
 const testcase_ellint_3<double>
 data119[10] =
 {
-  { 0.0000000000000000, 0.19999999999999996, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17317861443718538, 0.19999999999999996, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.33884641598718701, 0.19999999999999996, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.49204565281259494, 0.19999999999999996, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.63117851188220320, 0.19999999999999996, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.75721095949544170, 0.19999999999999996, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.87245201443919118, 0.19999999999999996, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 0.97966584238831089, 0.19999999999999996, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.0816336325174360, 0.19999999999999996, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.1810223448909909, 0.19999999999999996, 0.80000000000000004, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.20000000000000018, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17599862486281712, 0.20000000000000018, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36110007227128776, 0.20000000000000018, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56605039658567224, 0.20000000000000018, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.80537523874517691, 0.20000000000000018, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1005662342414086, 0.20000000000000018, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.4845340298105778, 0.20000000000000018, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.0043332244969392, 0.20000000000000018, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.7052856676744761, 0.20000000000000018, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.5622166386422633, 0.20000000000000018, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler119 = 2.5000000000000020e-13;
 
-// Test data for k=0.19999999999999996, nu=0.90000000000000002.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 6.4833128442756722e-16
+// Test data for k=0.20000000000000018, nu=0.90000000000000002.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.1718503329017390e-16
+// mean(f - f_Boost): 2.3592239273284576e-16
+// variance(f - f_Boost): 2.9295534376290287e-31
+// stddev(f - f_Boost): 5.4125349307224141e-16
 const testcase_ellint_3<double>
 data120[10] =
 {
-  { 0.0000000000000000, 0.19999999999999996, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17300769173837277, 0.19999999999999996, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.33761123827372508, 0.19999999999999996, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.48845905690769426, 0.19999999999999996, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.62407720017324952, 0.19999999999999996, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.74578146525124289, 0.19999999999999996, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.85621583540073076, 0.19999999999999996, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 0.95837725988001199, 0.19999999999999996, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.0551821412633928, 0.19999999999999996, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.1493679916141861, 0.19999999999999996, 0.90000000000000002, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.20000000000000018, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17618041435044951, 0.20000000000000018, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36267207636502929, 0.20000000000000018, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57212028758237743, 0.20000000000000018, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.82293323876704483, 0.20000000000000018, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1457077279880388, 0.20000000000000018, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.5967346899325681, 0.20000000000000018, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.2856537353421724, 0.20000000000000018, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.4034714304613902, 0.20000000000000018, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.0448269356200370, 0.20000000000000018, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler120 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004, nu=0.0000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.3361874537309281e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.2241249691539529e-16
+// mean(f - f_Boost): 2.7755575615628914e-17
+// variance(f - f_Boost): 2.1399221604302621e-32
+// stddev(f - f_Boost): 1.4628472785736254e-16
 const testcase_ellint_3<double>
 data121[10] =
 {
   { 0.0000000000000000, 0.30000000000000004, 0.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 0.17461228653000099, 0.30000000000000004, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.34969146102798415, 0.30000000000000004, 0.0000000000000000, 
-         0.34906585039886590 },
-  { 0.52565822873726320, 0.30000000000000004, 0.0000000000000000, 
-         0.52359877559829882 },
-  { 0.70284226512408532, 0.30000000000000004, 0.0000000000000000, 
-         0.69813170079773179 },
-  { 0.88144139195111182, 0.30000000000000004, 0.0000000000000000, 
-         0.87266462599716477 },
+         0.17453292519943295, 0.0 },
+  { 0.34969146102798421, 0.30000000000000004, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52565822873726309, 0.30000000000000004, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.70284226512408543, 0.30000000000000004, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.88144139195111171, 0.30000000000000004, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
   { 1.0614897067260520, 0.30000000000000004, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.2428416824174218, 0.30000000000000004, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.4251795877015927, 0.30000000000000004, 0.0000000000000000, 
-         1.3962634015954636 },
+         1.0471975511965976, 0.0 },
+  { 1.2428416824174220, 0.30000000000000004, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4251795877015929, 0.30000000000000004, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
   { 1.6080486199305128, 0.30000000000000004, 0.0000000000000000, 
-         1.5707963267948966 },
+         1.5707963267948966, 0.0 },
 };
 const double toler121 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004, nu=0.10000000000000001.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.3908043711907203e-16
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.1872304407982844e-16
+// mean(f - f_Boost): 7.2164496600635178e-17
+// variance(f - f_Boost): 4.3555500115139682e-32
+// stddev(f - f_Boost): 2.0869954507650391e-16
 const testcase_ellint_3<double>
 data122[10] =
 {
   { 0.0000000000000000, 0.30000000000000004, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17443631884814376, 0.30000000000000004, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.34831316835124926, 0.30000000000000004, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.52116586276523857, 0.30000000000000004, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.69269385837910036, 0.30000000000000004, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.86279023163070856, 0.30000000000000004, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.0315321461438263, 0.30000000000000004, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.1991449111869024, 0.30000000000000004, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.3659561780923213, 0.30000000000000004, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.5323534693557528, 0.30000000000000004, 0.10000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17478889331392972, 0.30000000000000004, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35108939018329183, 0.30000000000000004, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53028990896115835, 0.30000000000000004, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.71352417052371409, 0.30000000000000004, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.90153086032405894, 0.30000000000000004, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.0945187977283313, 0.30000000000000004, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.2920699268385683, 0.30000000000000004, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.4931243665896394, 0.30000000000000004, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.6960848815118226, 0.30000000000000004, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler122 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004, nu=0.20000000000000001.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.4447238179454079e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.2247497610332889e-16
+// mean(f - f_Boost): 6.6613381477509390e-17
+// variance(f - f_Boost): 1.7591111235252501e-32
+// stddev(f - f_Boost): 1.3263148659067538e-16
 const testcase_ellint_3<double>
 data123[10] =
 {
   { 0.0000000000000000, 0.30000000000000004, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17426098615372088, 0.30000000000000004, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34695402664689923, 0.30000000000000004, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.51680555567038933, 0.30000000000000004, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.68303375225260210, 0.30000000000000004, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.84540662891295026, 0.30000000000000004, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 1.0041834051646927, 0.30000000000000004, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.1599952702345711, 0.30000000000000004, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.3137179520499165, 0.30000000000000004, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.4663658145259877, 0.30000000000000004, 0.20000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17496614335337535, 0.30000000000000004, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35250745937139372, 0.30000000000000004, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53506875002836884, 0.30000000000000004, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72479106622248191, 0.30000000000000004, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.92326451535891607, 0.30000000000000004, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1312092060698349, 0.30000000000000004, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3481473154592321, 0.30000000000000004, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5722049569662750, 0.30000000000000004, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8002173372290500, 0.30000000000000004, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler123 = 2.5000000000000020e-13;
 
-// Test data for k=0.30000000000000004, nu=0.29999999999999999.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.4979715256503266e-16
+// Test data for k=0.30000000000000004, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.1678685180047551e-16
+// mean(f - f_Boost): 1.0547118733938987e-16
+// variance(f - f_Boost): 7.5633408838247182e-32
+// stddev(f - f_Boost): 2.7501528837184157e-16
 const testcase_ellint_3<double>
 data124[10] =
 {
-  { 0.0000000000000000, 0.30000000000000004, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17408628437042842, 0.30000000000000004, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34561356761638401, 0.30000000000000004, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.51257058617875850, 0.30000000000000004, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.67382207124602878, 0.30000000000000004, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.82914751587825131, 0.30000000000000004, 0.29999999999999999
-         0.87266462599716477 },
-  { 0.97907434814374938, 0.30000000000000004, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.1246399297351584, 0.30000000000000004, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.2671793970398149, 0.30000000000000004, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.4081767433479091, 0.30000000000000004, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.30000000000000004, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17514404084107435, 0.30000000000000004, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35394619108645647, 0.30000000000000004, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.54000325463372689, 0.30000000000000004, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.73670193794067651, 0.30000000000000004, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.94689345491722177, 0.30000000000000004, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.1723274608389140, 0.30000000000000004, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.4128880552936287, 0.30000000000000004, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.6659010047449661, 0.30000000000000004, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 1.9260216862473254, 0.30000000000000004, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler124 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004, nu=0.40000000000000002.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.5505716921759864e-16
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.3983279132797385e-16
+// mean(f - f_Boost): 1.1657341758564144e-16
+// variance(f - f_Boost): 1.8245832308692586e-31
+// stddev(f - f_Boost): 4.2715140534349863e-16
 const testcase_ellint_3<double>
 data125[10] =
 {
   { 0.0000000000000000, 0.30000000000000004, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17391220945982727, 0.30000000000000004, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34429133937639689, 0.30000000000000004, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.50845471668581632, 0.30000000000000004, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.66502347027873854, 0.30000000000000004, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.81389191978012254, 0.30000000000000004, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 0.95590618002140570, 0.30000000000000004, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.0924915195213121, 0.30000000000000004, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.2253651604038061, 0.30000000000000004, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.3563643538969763, 0.30000000000000004, 0.40000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17532259000954434, 0.30000000000000004, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35540612770983693, 0.30000000000000004, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54510265552938919, 0.30000000000000004, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.74932476310965057, 0.30000000000000004, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.97272793583093109, 0.30000000000000004, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2188928987074241, 0.30000000000000004, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.4888771674085941, 0.30000000000000004, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.7794558498219191, 0.30000000000000004, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.0822121773175528, 0.30000000000000004, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler125 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004, nu=0.50000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.7807908859023716e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.0516138451673425e-16
+// mean(f - f_Boost): 4.7184478546569152e-17
+// variance(f - f_Boost): 1.9448563670505968e-32
+// stddev(f - f_Boost): 1.3945810722401896e-16
 const testcase_ellint_3<double>
 data126[10] =
 {
   { 0.0000000000000000, 0.30000000000000004, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17373875742088232, 0.30000000000000004, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34298690571124157, 0.30000000000000004, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.50445214859646936, 0.30000000000000004, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.65660648352418516, 0.30000000000000004, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.79953670639287289, 0.30000000000000004, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.93443393926588536, 0.30000000000000004, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.0630838369016911, 0.30000000000000004, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.1875197325653029, 0.30000000000000004, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.3098448759814962, 0.30000000000000004, 0.50000000000000000, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17550179513158179, 0.30000000000000004, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35688783251681200, 0.30000000000000004, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55037700010142798, 0.30000000000000004, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.76273839789895992, 0.30000000000000004, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0011570518830419, 0.30000000000000004, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2722987414055109, 0.30000000000000004, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5799590511080066, 0.30000000000000004, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.9212367220124293, 0.30000000000000004, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2833505881933971, 0.30000000000000004, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler126 = 2.5000000000000020e-13;
 
-// Test data for k=0.30000000000000004, nu=0.59999999999999998.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.0057999499931649e-16
+// Test data for k=0.30000000000000004, nu=0.60000000000000009.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.2121157428443725e-16
+// mean(f - f_Boost): 1.9428902930940239e-16
+// variance(f - f_Boost): 1.5987596229703424e-31
+// stddev(f - f_Boost): 3.9984492281012430e-16
 const testcase_ellint_3<double>
 data127[10] =
 {
-  { 0.0000000000000000, 0.30000000000000004, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17356592428950823, 0.30000000000000004, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34169984536697379, 0.30000000000000004, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.50055748266498457, 0.30000000000000004, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.64854298527106768, 0.30000000000000004, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.78599329284207431, 0.30000000000000004, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.91445452089128199, 0.30000000000000004, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.0360412952290587, 0.30000000000000004, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.1530473919778641, 0.30000000000000004, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.2677758800420669, 0.30000000000000004, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.30000000000000004, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17568166052076745, 0.30000000000000004, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.35839189074731181, 0.30000000000000004, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.55583724744367558, 0.30000000000000004, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.77703498090888223, 0.30000000000000004, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0326772113675962, 0.30000000000000004, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.3345139983717369, 0.30000000000000004, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.6921742922838403, 0.30000000000000004, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.1056608968472186, 0.30000000000000004, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 2.5560975528589061, 0.30000000000000004, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler127 = 2.5000000000000020e-13;
 
-// Test data for k=0.30000000000000004, nu=0.69999999999999996.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.2239502844122443e-16
+// Test data for k=0.30000000000000004, nu=0.70000000000000007.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.0088945789059381e-16
+// mean(f - f_Boost): 2.1094237467877973e-16
+// variance(f - f_Boost): 3.0253363535298873e-31
+// stddev(f - f_Boost): 5.5003057674368314e-16
 const testcase_ellint_3<double>
 data128[10] =
 {
-  { 0.0000000000000000, 0.30000000000000004, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17339370613812224, 0.30000000000000004, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34042975138455933, 0.30000000000000004, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.49676568368075985, 0.30000000000000004, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.64080774055753720, 0.30000000000000004, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.77318507779667278, 0.30000000000000004, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.89579782346548609, 0.30000000000000004, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.0110573286052202, 0.30000000000000004, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.1214710972949635, 0.30000000000000004, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.2294913236274982, 0.30000000000000004, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.30000000000000004, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17586219053197988, 0.30000000000000004, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.35991891074557669, 0.30000000000000004, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.56149538019961731, 0.30000000000000004, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.79232303189667685, 0.30000000000000004, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.0679345542878826, 0.30000000000000004, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.4084400085913955, 0.30000000000000004, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 1.8357382859296454, 0.30000000000000004, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.3604197996171519, 0.30000000000000004, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 2.9562123549913872, 0.30000000000000004, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler128 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004, nu=0.80000000000000004.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.4358357000101250e-16
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.1197887707781618e-16
+// mean(f - f_Boost): 3.4416913763379854e-16
+// variance(f - f_Boost): 4.3461914185990199e-31
+// stddev(f - f_Boost): 6.5925650687718054e-16
 const testcase_ellint_3<double>
 data129[10] =
 {
   { 0.0000000000000000, 0.30000000000000004, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17322209907520358, 0.30000000000000004, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.33917623046949996, 0.30000000000000004, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.49307204894329176, 0.30000000000000004, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.63337802830291734, 0.30000000000000004, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.76104540997689407, 0.30000000000000004, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.87832009635450714, 0.30000000000000004, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 0.98787879723171790, 0.30000000000000004, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.0924036340069339, 0.30000000000000004, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.1944567571590048, 0.30000000000000004, 0.80000000000000004, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17604338956191670, 0.30000000000000004, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36146952517410791, 0.30000000000000004, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56736453393774644, 0.30000000000000004, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.80873149979001091, 0.30000000000000004, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1077903069860620, 0.30000000000000004, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.4985874311132998, 0.30000000000000004, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.0298167266724954, 0.30000000000000004, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.7483929054985432, 0.30000000000000004, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.6283050484567170, 0.30000000000000004, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler129 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004, nu=0.90000000000000002.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.6419688299804087e-16
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.1301806687926828e-16
+// mean(f - f_Boost): 4.1633363423443370e-16
+// variance(f - f_Boost): 2.2835347143080263e-31
+// stddev(f - f_Boost): 4.7786344433405093e-16
 const testcase_ellint_3<double>
 data130[10] =
 {
   { 0.0000000000000000, 0.30000000000000004, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17305109924485945, 0.30000000000000004, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.33793890239556984, 0.30000000000000004, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.48947218005089738, 0.30000000000000004, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.62623332340775151, 0.30000000000000004, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.74951596581511148, 0.30000000000000004, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.86189886597755994, 0.30000000000000004, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 0.96629451153092005, 0.30000000000000004, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.0655269133492682, 0.30000000000000004, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.1622376896064914, 0.30000000000000004, 0.90000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17622526204962433, 0.30000000000000004, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36304439230777141, 0.30000000000000004, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57345914744719195, 0.30000000000000004, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.82641512928845162, 0.30000000000000004, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1534256210757743, 0.30000000000000004, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.6124900353411677, 0.30000000000000004, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.3165905514845089, 0.30000000000000004, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.4625619526539824, 0.30000000000000004, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.1479514944016787, 0.30000000000000004, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler130 = 2.5000000000000020e-13;
 
-// Test data for k=0.39999999999999991, nu=0.0000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 5.4157225142938039e-16
+// Test data for k=0.40000000000000013, nu=0.0000000000000000.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.0831445028587608e-15
+// mean(f - f_Boost): 1.7486012637846215e-16
+// variance(f - f_Boost): 3.1664095331106078e-31
+// stddev(f - f_Boost): 5.6270858649132121e-16
 const testcase_ellint_3<double>
 data131[10] =
 {
-  { 0.0000000000000000, 0.39999999999999991, 0.0000000000000000, 
-         0.0000000000000000 },
-  { 0.17467414669441528, 0.39999999999999991, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.35018222772483443, 0.39999999999999991, 0.0000000000000000, 
-         0.34906585039886590 },
-  { 0.52729015917508737, 0.39999999999999991, 0.0000000000000000, 
-         0.52359877559829882 },
-  { 0.70662374407341244, 0.39999999999999991, 0.0000000000000000, 
-         0.69813170079773179 },
-  { 0.88859210497602170, 0.39999999999999991, 0.0000000000000000, 
-         0.87266462599716477 },
-  { 1.0733136290471379, 0.39999999999999991, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.2605612170157061, 0.39999999999999991, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.4497513956433439, 0.39999999999999991, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 1.6399998658645112, 0.39999999999999991, 0.0000000000000000, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.40000000000000013, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17467414669441528, 0.40000000000000013, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35018222772483443, 0.40000000000000013, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52729015917508748, 0.40000000000000013, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.70662374407341244, 0.40000000000000013, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.88859210497602159, 0.40000000000000013, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0733136290471381, 0.40000000000000013, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2605612170157066, 0.40000000000000013, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4497513956433439, 0.40000000000000013, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.6399998658645112, 0.40000000000000013, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler131 = 2.5000000000000020e-13;
 
-// Test data for k=0.39999999999999991, nu=0.10000000000000001.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 5.6859551010103832e-16
+// Test data for k=0.40000000000000013, nu=0.10000000000000001.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.0263824105456986e-15
+// mean(f - f_Boost): 1.7486012637846215e-16
+// variance(f - f_Boost): 3.1664095331106078e-31
+// stddev(f - f_Boost): 5.6270858649132121e-16
 const testcase_ellint_3<double>
 data132[10] =
 {
-  { 0.0000000000000000, 0.39999999999999991, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17449806706684670, 0.39999999999999991, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.34880048623856075, 0.39999999999999991, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.52277322065757392, 0.39999999999999991, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.69638072056918365, 0.39999999999999991, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.86968426619831540, 0.39999999999999991, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.0428044206578095, 0.39999999999999991, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.2158651158274378, 0.39999999999999991, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.3889447129893324, 0.39999999999999991, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.5620566886683604, 0.39999999999999991, 0.10000000000000001, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.40000000000000013, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17485086590796767, 0.40000000000000013, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35158366412506992, 0.40000000000000013, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53194731675711726, 0.40000000000000013, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.71740615528010931, 0.40000000000000013, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.90896157773487030, 0.40000000000000013, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1069605483834348, 0.40000000000000013, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3109353428823001, 0.40000000000000013, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5195460789903450, 0.40000000000000013, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7306968836847190, 0.40000000000000013, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler132 = 2.5000000000000020e-13;
 
-// Test data for k=0.39999999999999991, nu=0.20000000000000001.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 5.9444065952225719e-16
+// Test data for k=0.40000000000000013, nu=0.20000000000000001.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 9.6644296021947179e-16
+// mean(f - f_Boost): 2.0816681711721685e-16
+// variance(f - f_Boost): 3.0360740073926687e-31
+// stddev(f - f_Boost): 5.5100580826273227e-16
 const testcase_ellint_3<double>
 data133[10] =
 {
-  { 0.0000000000000000, 0.39999999999999991, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17432262290723397, 0.39999999999999991, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34743795258968596, 0.39999999999999991, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.51838919472805112, 0.39999999999999991, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.68663134739057907, 0.39999999999999991, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.85206432981833979, 0.39999999999999991, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 1.0149595349004430, 0.39999999999999991, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.1758349405464676, 0.39999999999999991, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.3353337673882637, 0.39999999999999991, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.4941414344266770, 0.39999999999999991, 0.20000000000000001, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.40000000000000013, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17502822886437389, 0.40000000000000013, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35300530062530805, 0.40000000000000013, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53675259548210896, 0.40000000000000013, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72878006428676934, 0.40000000000000013, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.93100219010583574, 0.40000000000000013, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1443487271187611, 0.40000000000000013, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3683427764108813, 0.40000000000000013, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6008221459300933, 0.40000000000000013, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8380358826317627, 0.40000000000000013, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler133 = 2.5000000000000020e-13;
 
-// Test data for k=0.39999999999999991, nu=0.29999999999999999.
-// max(|f - f_GSL|): 1.1102230246251565e-15
-// max(|f - f_GSL| / |f_GSL|): 7.7406350888907249e-16
+// Test data for k=0.40000000000000013, nu=0.30000000000000004.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 9.0271556462838835e-16
+// mean(f - f_Boost): 2.0816681711721685e-16
+// variance(f - f_Boost): 3.0360740073926687e-31
+// stddev(f - f_Boost): 5.5100580826273227e-16
 const testcase_ellint_3<double>
 data134[10] =
 {
-  { 0.0000000000000000, 0.39999999999999991, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17414781013591540, 0.39999999999999991, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34609415696777285, 0.39999999999999991, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.51413131295862535, 0.39999999999999991, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.67733527622935630, 0.39999999999999991, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.83558675182733266, 0.39999999999999991, 0.29999999999999999
-         0.87266462599716477 },
-  { 0.98940140808865906, 0.39999999999999991, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.1396968797728058, 0.39999999999999991, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.2875920037865090, 0.39999999999999991, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.4342789859950078, 0.39999999999999991, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.40000000000000013, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17520623975982899, 0.40000000000000013, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35444766141612105, 0.40000000000000013, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.54171455841536009, 0.40000000000000013, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.74080517001084012, 0.40000000000000013, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.95496950509296574, 0.40000000000000013, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.1862627879844718, 0.40000000000000013, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.4346501803799458, 0.40000000000000013, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.6971744798077699, 0.40000000000000013, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 1.9677924132520139, 0.40000000000000013, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler134 = 2.5000000000000020e-13;
 
-// Test data for k=0.39999999999999991, nu=0.40000000000000002.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.4314214811441816e-16
+// Test data for k=0.40000000000000013, nu=0.40000000000000002.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 8.3436329231972794e-16
+// mean(f - f_Boost): 2.3037127760972000e-16
+// variance(f - f_Boost): 2.9507053793392374e-31
+// stddev(f - f_Boost): 5.4320395611033958e-16
 const testcase_ellint_3<double>
 data135[10] =
 {
-  { 0.0000000000000000, 0.39999999999999991, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17397362471112707, 0.39999999999999991, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34476864603333196, 0.39999999999999991, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.50999329415379346, 0.39999999999999991, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.66845674551396006, 0.39999999999999991, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.82012848346231748, 0.39999999999999991, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 0.96582449258349057, 0.39999999999999991, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.1068473749476286, 0.39999999999999991, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.2447132729159989, 0.39999999999999991, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.3809986210732901, 0.39999999999999991, 0.40000000000000002, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.40000000000000013, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17538490283034375, 0.40000000000000013, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35591129064319948, 0.40000000000000013, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54684250413264535, 0.40000000000000013, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.75355027742668290, 0.40000000000000013, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.98117935026780634, 0.40000000000000013, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2337464222030736, 0.40000000000000013, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.5125183419289221, 0.40000000000000013, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.8140224451130313, 0.40000000000000013, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.1289968719280026, 0.40000000000000013, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler135 = 2.5000000000000020e-13;
 
-// Test data for k=0.39999999999999991, nu=0.50000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.6621057007519435e-16
+// Test data for k=0.40000000000000013, nu=0.50000000000000000.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.7013794022122431e-16
+// mean(f - f_Boost): 2.3037127760972000e-16
+// variance(f - f_Boost): 1.4989821857033475e-31
+// stddev(f - f_Boost): 3.8716691306248618e-16
 const testcase_ellint_3<double>
 data136[10] =
 {
-  { 0.0000000000000000, 0.39999999999999991, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17380006262854136, 0.39999999999999991, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34346098216756610, 0.39999999999999991, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.50596929935059420, 0.39999999999999991, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.65996392089131251, 0.39999999999999991, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.80558463511364786, 0.39999999999999991, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.94397834522857704, 0.39999999999999991, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.0768075114108115, 0.39999999999999991, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.2059184624251333, 0.39999999999999991, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.3331797176377398, 0.39999999999999991, 0.50000000000000000, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.40000000000000013, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17556422235224273, 0.40000000000000013, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35739675341763921, 0.40000000000000013, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55214655195037188, 0.40000000000000013, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.76709520942047438, 0.40000000000000013, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0100278761577499, 0.40000000000000013, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2882265661384342, 0.40000000000000013, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.6059059780051876, 0.40000000000000013, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.9600182740224081, 0.40000000000000013, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.3367461373176512, 0.40000000000000013, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler136 = 2.5000000000000020e-13;
 
-// Test data for k=0.39999999999999991, nu=0.59999999999999998.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.8853630717730749e-16
+// Test data for k=0.40000000000000013, nu=0.60000000000000009.
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 8.4792115132836117e-16
+// mean(f - f_Boost): 2.3037127760972000e-16
+// variance(f - f_Boost): 4.8893797490374802e-31
+// stddev(f - f_Boost): 6.9924099915819294e-16
 const testcase_ellint_3<double>
 data137[10] =
 {
-  { 0.0000000000000000, 0.39999999999999991, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17362711992081245, 0.39999999999999991, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34217074276403953, 0.39999999999999991, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.50205389185761606, 0.39999999999999991, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.65182834920372734, 0.39999999999999991, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.79186512820565136, 0.39999999999999991, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.92365535916287134, 0.39999999999999991, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.0491915663957907, 0.39999999999999991, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.1705934291745106, 0.39999999999999991, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.2899514672527024, 0.39999999999999991, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.40000000000000013, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17574420264267029, 0.40000000000000013, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.35890463689046265, 0.40000000000000013, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.55763773975194486, 0.40000000000000013, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.78153324227761267, 0.40000000000000013, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0420205885765887, 0.40000000000000013, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.3517205230381770, 0.40000000000000013, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.7210360970313896, 0.40000000000000013, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.1500780510169246, 0.40000000000000013, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 2.6186940209850191, 0.40000000000000013, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler137 = 2.5000000000000020e-13;
 
-// Test data for k=0.39999999999999991, nu=0.69999999999999996.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.1018730557776469e-16
+// Test data for k=0.40000000000000013, nu=0.70000000000000007.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.8573292020719759e-16
+// mean(f - f_Boost): 2.2759572004815707e-16
+// variance(f - f_Boost): 2.9613098824898137e-31
+// stddev(f - f_Boost): 5.4417918762938862e-16
 const testcase_ellint_3<double>
 data138[10] =
 {
-  { 0.0000000000000000, 0.39999999999999991, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17345479265712868, 0.39999999999999991, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34089751955950354, 0.39999999999999991, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.49824200167361332, 0.39999999999999991, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.64402450341199402, 0.39999999999999991, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.77889207804122873, 0.39999999999999991, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.90468169720957992, 0.39999999999999991, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.0236847823692916, 0.39999999999999991, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.1382465247425166, 0.39999999999999991, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.2506255923253344, 0.39999999999999991, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.40000000000000013, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17592484806010436, 0.40000000000000013, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.36043555139631439, 0.40000000000000013, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.56332813669944881, 0.40000000000000013, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.79697424562157548, 0.40000000000000013, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.0778155987523672, 0.40000000000000013, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.4272018169896268, 0.40000000000000013, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 1.8684377907453382, 0.40000000000000013, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.4128677409207473, 0.40000000000000013, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 3.0327078743873246, 0.40000000000000013, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler138 = 2.5000000000000020e-13;
 
-// Test data for k=0.39999999999999991, nu=0.80000000000000004.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.3122171115555478e-16
+// Test data for k=0.40000000000000013, nu=0.80000000000000004.
+// max(|f - f_Boost|): 3.5527136788005009e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 9.5273712585384737e-16
+// mean(f - f_Boost): 4.5241588253475131e-16
+// variance(f - f_Boost): 1.1866477068555882e-30
+// stddev(f - f_Boost): 1.0893336067778265e-15
 const testcase_ellint_3<double>
 data139[10] =
 {
-  { 0.0000000000000000, 0.39999999999999991, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17328307694277154, 0.39999999999999991, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.33964091800132007, 0.39999999999999991, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.49452889372467440, 0.39999999999999991, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.63652940095937316, 0.39999999999999991, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.76659772511159097, 0.39999999999999991, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.88691047977338111, 0.39999999999999991, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 1.0000273200611638, 0.39999999999999991, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.1084787902188009, 0.39999999999999991, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.2146499565727209, 0.39999999999999991, 0.80000000000000004, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.40000000000000013, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17610616300487833, 0.40000000000000013, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36199013167171978, 0.40000000000000013, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56923097361842434, 0.40000000000000013, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.81354878456624347, 0.40000000000000013, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1182902719261825, 0.40000000000000013, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.5192950589409022, 0.40000000000000013, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.0678761710223981, 0.40000000000000013, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.8135222249879788, 0.40000000000000013, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.7289548002199902, 0.40000000000000013, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler139 = 2.5000000000000020e-13;
 
-// Test data for k=0.39999999999999991, nu=0.90000000000000002.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.5168974431077345e-16
+// Test data for k=0.40000000000000013, nu=0.90000000000000002.
+// max(|f - f_Boost|): 6.2172489379008766e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.1718379478872251e-15
+// mean(f - f_Boost): 8.4099394115355610e-16
+// variance(f - f_Boost): 3.5684096037099424e-30
+// stddev(f - f_Boost): 1.8890234523980751e-15
 const testcase_ellint_3<double>
 data140[10] =
 {
-  { 0.0000000000000000, 0.39999999999999991, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17311196891868127, 0.39999999999999991, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.33840055664911906, 0.39999999999999991, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.49091013944075329, 0.39999999999999991, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.62932228186809580, 0.39999999999999991, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.75492278323019801, 0.39999999999999991, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.87021659043854294, 0.39999999999999991, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 0.97800245228239246, 0.39999999999999991, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.0809625773173697, 0.39999999999999991, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.1815758115929846, 0.39999999999999991, 0.90000000000000002, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.40000000000000013, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17628815191971123, 0.40000000000000013, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36356903815378772, 0.40000000000000013, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57536079447000310, 0.40000000000000013, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.83141355850172571, 0.40000000000000013, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1646481598721361, 0.40000000000000013, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.6357275034001995, 0.40000000000000013, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.3628787566572402, 0.40000000000000013, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.5521010369134962, 0.40000000000000013, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.3055535102872513, 0.40000000000000013, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler140 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000, nu=0.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.1201497220602069e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.4551389361831220e-16
+// mean(f - f_Boost): -1.3877787807814457e-17
+// variance(f - f_Boost): 2.5893058141206173e-32
+// stddev(f - f_Boost): 1.6091320064309879e-16
 const testcase_ellint_3<double>
 data141[10] =
 {
   { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 0.17475385514035785, 0.50000000000000000, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.35081868470101585, 0.50000000000000000, 0.0000000000000000, 
-         0.34906585039886590 },
+         0.17453292519943295, 0.0 },
+  { 0.35081868470101579, 0.50000000000000000, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
   { 0.52942862705190574, 0.50000000000000000, 0.0000000000000000, 
-         0.52359877559829882 },
-  { 0.71164727562630314, 0.50000000000000000, 0.0000000000000000, 
-         0.69813170079773179 },
+         0.52359877559829882, 0.0 },
+  { 0.71164727562630326, 0.50000000000000000, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
   { 0.89824523594227768, 0.50000000000000000, 0.0000000000000000, 
-         0.87266462599716477 },
-  { 1.0895506700518851, 0.50000000000000000, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.2853005857432931, 0.50000000000000000, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.4845545520549484, 0.50000000000000000, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 1.6857503548125963, 0.50000000000000000, 0.0000000000000000, 
-         1.5707963267948966 },
+         0.87266462599716477, 0.0 },
+  { 1.0895506700518853, 0.50000000000000000, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2853005857432933, 0.50000000000000000, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4845545520549488, 0.50000000000000000, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.6857503548125961, 0.50000000000000000, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler141 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000, nu=0.10000000000000001.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.1662857256911530e-16
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.7416868347177582e-16
+// mean(f - f_Boost): 2.7755575615628915e-18
+// variance(f - f_Boost): 5.4326441655972001e-32
+// stddev(f - f_Boost): 2.3308033305273100e-16
 const testcase_ellint_3<double>
 data142[10] =
 {
   { 0.0000000000000000, 0.50000000000000000, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17457763120814676, 0.50000000000000000, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.34943246340849154, 0.50000000000000000, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.52487937869610790, 0.50000000000000000, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.70127785096388384, 0.50000000000000000, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.87898815988624479, 0.50000000000000000, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.0582764576094172, 0.50000000000000000, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.2391936844060205, 0.50000000000000000, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.4214793542995841, 0.50000000000000000, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.6045524936084892, 0.50000000000000000, 0.10000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17493071928248824, 0.50000000000000000, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35222467688034798, 0.50000000000000000, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53411928652008112, 0.50000000000000000, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72256398117177589, 0.50000000000000000, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.91899583232771009, 0.50000000000000000, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1240549163055360, 0.50000000000000000, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3372938086286021, 0.50000000000000000, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5570024469132429, 0.50000000000000000, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7803034946545480, 0.50000000000000000, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler142 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000, nu=0.20000000000000001.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.2114786773102175e-16
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.1198767993730867e-16
+// mean(f - f_Boost): 2.7755575615628914e-17
+// variance(f - f_Boost): 5.0311947683004831e-32
+// stddev(f - f_Boost): 2.2430324938128922e-16
 const testcase_ellint_3<double>
 data143[10] =
 {
   { 0.0000000000000000, 0.50000000000000000, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17440204336345433, 0.50000000000000000, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34806552388338824, 0.50000000000000000, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.52046416757129810, 0.50000000000000000, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.69140924550993865, 0.50000000000000000, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.86104678636125520, 0.50000000000000000, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 1.0297439459053981, 0.50000000000000000, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.1979214112912033, 0.50000000000000000, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.3659033858648930, 0.50000000000000000, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.5338490483665983, 0.50000000000000000, 0.20000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17510822779582402, 0.50000000000000000, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35365094725531487, 0.50000000000000000, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53895933237328697, 0.50000000000000000, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.73408090840070794, 0.50000000000000000, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.94145442818535396, 0.50000000000000000, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1624120186296487, 0.50000000000000000, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3965823372867114, 0.50000000000000000, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6414308440430099, 0.50000000000000000, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8922947612264018, 0.50000000000000000, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler143 = 2.5000000000000020e-13;
 
-// Test data for k=0.50000000000000000, nu=0.29999999999999999.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.2557837230041312e-16
+// Test data for k=0.50000000000000000, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3800262770228813e-16
+// mean(f - f_Boost): 5.8286708792820721e-17
+// variance(f - f_Boost): 8.5027191584278157e-32
+// stddev(f - f_Boost): 2.9159422419567599e-16
 const testcase_ellint_3<double>
 data144[10] =
 {
-  { 0.0000000000000000, 0.50000000000000000, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17422708752228896, 0.50000000000000000, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34671739434855858, 0.50000000000000000, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.51617616305641878, 0.50000000000000000, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.68200047612545167, 0.50000000000000000, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.84427217869498372, 0.50000000000000000, 0.29999999999999999
-         0.87266462599716477 },
-  { 1.0035637821389782, 0.50000000000000000, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.1606800483933111, 0.50000000000000000, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.3164407134643459, 0.50000000000000000, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.4715681939859637, 0.50000000000000000, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.50000000000000000, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17528638488102041, 0.50000000000000000, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35509802222332720, 0.50000000000000000, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.54395740731866193, 0.50000000000000000, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.74625871438752667, 0.50000000000000000, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.96588271186092023, 0.50000000000000000, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.2054319584357329, 0.50000000000000000, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.4651077994832871, 0.50000000000000000, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.7416018368052644, 0.50000000000000000, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 2.0277924458111314, 0.50000000000000000, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler144 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000, nu=0.40000000000000002.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.2992508582900068e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.0439932918341581e-16
+// mean(f - f_Boost): 3.0531133177191807e-17
+// variance(f - f_Boost): 9.0809736800018602e-32
+// stddev(f - f_Boost): 3.0134653938616686e-16
 const testcase_ellint_3<double>
 data145[10] =
 {
   { 0.0000000000000000, 0.50000000000000000, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17405275963859917, 0.50000000000000000, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34538761957029329, 0.50000000000000000, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.51200902646603907, 0.50000000000000000, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.67301522212868792, 0.50000000000000000, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.82853844466313320, 0.50000000000000000, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 0.97942097862681488, 0.50000000000000000, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.1268429801220614, 0.50000000000000000, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.2720406704533922, 0.50000000000000000, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.4161679518465340, 0.50000000000000000, 0.40000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17546519477859268, 0.50000000000000000, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35656644822531680, 0.50000000000000000, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54912289677411319, 0.50000000000000000, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.75916731611690047, 0.50000000000000000, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.99260415631328214, 0.50000000000000000, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2541925856918670, 0.50000000000000000, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.5456393705347609, 0.50000000000000000, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.8631904972952076, 0.50000000000000000, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.1962905366178065, 0.50000000000000000, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler145 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000, nu=0.50000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3419255755184137e-16
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.6797816859260978e-16
+// mean(f - f_Boost): 9.4368957093138303e-17
+// variance(f - f_Boost): 7.7794254682023874e-32
+// stddev(f - f_Boost): 2.7891621444803792e-16
 const testcase_ellint_3<double>
 data146[10] =
 {
   { 0.0000000000000000, 0.50000000000000000, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17387905570381157, 0.50000000000000000, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34407576010465207, 0.50000000000000000, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.50795686560160824, 0.50000000000000000, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.66442115453330164, 0.50000000000000000, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.81373829119355345, 0.50000000000000000, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.95705743313235825, 0.50000000000000000, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.0959131991362554, 0.50000000000000000, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.2318900529754597, 0.50000000000000000, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.3664739530045971, 0.50000000000000000, 0.50000000000000000, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17564466176941509, 0.50000000000000000, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35805679276065394, 0.50000000000000000, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55446601496200032, 0.50000000000000000, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.77288783578259013, 0.50000000000000000, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0220246013918972, 0.50000000000000000, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.3101681612463965, 0.50000000000000000, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.6422994881851025, 0.50000000000000000, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.0152636030998816, 0.50000000000000000, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.4136715042011945, 0.50000000000000000, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler146 = 2.5000000000000020e-13;
 
-// Test data for k=0.50000000000000000, nu=0.59999999999999998.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3838494104749599e-16
+// Test data for k=0.50000000000000000, nu=0.60000000000000009.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.9178421578645735e-16
+// mean(f - f_Boost): 1.3322676295501878e-16
+// variance(f - f_Boost): 1.7749370367472766e-31
+// stddev(f - f_Boost): 4.2130001622920411e-16
 const testcase_ellint_3<double>
 data147[10] =
 {
-  { 0.0000000000000000, 0.50000000000000000, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17370597174637581, 0.50000000000000000, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34278139158591414, 0.50000000000000000, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.50401419439302708, 0.50000000000000000, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.65618938076167210, 0.50000000000000000, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.79977959248855424, 0.50000000000000000, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.93625925190753545, 0.50000000000000000, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.0674905658379708, 0.50000000000000000, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.1953481298023050, 0.50000000000000000, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.3215740290190876, 0.50000000000000000, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.50000000000000000, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17582479017522740, 0.50000000000000000, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.35956964546660036, 0.50000000000000000, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.55999790372984193, 0.50000000000000000, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.78751507911209895, 0.50000000000000000, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0546620505035220, 0.50000000000000000, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.3754438357425935, 0.50000000000000000, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.7615727400820127, 0.50000000000000000, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.2134638067565242, 0.50000000000000000, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 2.7090491861753558, 0.50000000000000000, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler147 = 2.5000000000000020e-13;
 
-// Test data for k=0.50000000000000000, nu=0.69999999999999996.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.4250604066951477e-16
+// Test data for k=0.50000000000000000, nu=0.70000000000000007.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.0745105182189226e-16
+// mean(f - f_Boost): 4.1633363423443370e-17
+// variance(f - f_Boost): 1.9996383743576116e-32
+// stddev(f - f_Boost): 1.4140857026211713e-16
 const testcase_ellint_3<double>
 data148[10] =
 {
-  { 0.0000000000000000, 0.50000000000000000, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17353350383131641, 0.50000000000000000, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34150410405436771, 0.50000000000000000, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.50017589696443487, 0.50000000000000000, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.64829398188419951, 0.50000000000000000, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.78658270782402073, 0.50000000000000000, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.91684738336675053, 0.50000000000000000, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.0412486789555935, 0.50000000000000000, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.1619021847612001, 0.50000000000000000, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.2807475181182502, 0.50000000000000000, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.50000000000000000, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17600558435914915, 0.50000000000000000, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.36110561926726259, 0.50000000000000000, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.56573074641137111, 0.50000000000000000, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.80316073084237205, 0.50000000000000000, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.0911910688131461, 0.50000000000000000, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.4530946406380640, 0.50000000000000000, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 1.9144386536785372, 0.50000000000000000, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.4878788958234970, 0.50000000000000000, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 3.1433945297859225, 0.50000000000000000, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler148 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.5715240651179632e-16
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.4380477375534667e-16
+// mean(f - f_Boost): 2.3037127760972000e-16
+// variance(f - f_Boost): 1.4989821857033475e-31
+// stddev(f - f_Boost): 3.8716691306248618e-16
 const testcase_ellint_3<double>
 data149[10] =
 {
   { 0.0000000000000000, 0.50000000000000000, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17336164805979126, 0.50000000000000000, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.34024350132086773, 0.50000000000000000, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.49643719555734073, 0.50000000000000000, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.64071162456976150, 0.50000000000000000, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.77407836177211908, 0.50000000000000000, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.89867058251905652, 0.50000000000000000, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 1.0169181822134910, 0.50000000000000000, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.1311363312779448, 0.50000000000000000, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.2434165408189539, 0.50000000000000000, 0.80000000000000004, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17618704872620228, 0.50000000000000000, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36266535159745827, 0.50000000000000000, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.57167789954529158, 0.50000000000000000, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.81995752984315018, 0.50000000000000000, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1325112162158122, 0.50000000000000000, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.5479055930718042, 0.50000000000000000, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.1215243941010486, 0.50000000000000000, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.9069405767650132, 0.50000000000000000, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.8750701888108066, 0.50000000000000000, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler149 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000, nu=0.90000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.4664649039489274e-16
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.6192315188521289e-16
+// mean(f - f_Boost): 3.5249581031848718e-16
+// variance(f - f_Boost): 2.5029385557256515e-31
+// stddev(f - f_Boost): 5.0029376927217987e-16
 const testcase_ellint_3<double>
 data150[10] =
 {
   { 0.0000000000000000, 0.50000000000000000, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17319040056865681, 0.50000000000000000, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.33899920036578557, 0.50000000000000000, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.49279362182695174, 0.50000000000000000, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.63342123379746151, 0.50000000000000000, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.76220595179550321, 0.50000000000000000, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.88160004743532294, 0.50000000000000000, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 0.99427448642310123, 0.50000000000000000, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.1027091512470095, 0.50000000000000000, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.2091116095504744, 0.50000000000000000, 0.90000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17636918772384180, 0.50000000000000000, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36424950570740700, 0.50000000000000000, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57785404590231426, 0.50000000000000000, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.83806480521716531, 0.50000000000000000, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1798568683069752, 0.50000000000000000, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.6678766243739607, 0.50000000000000000, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.4282976450693483, 0.50000000000000000, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.6810787666126656, 0.50000000000000000, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.5355132096026454, 0.50000000000000000, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler150 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009, nu=0.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3664899092028927e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.3664899092028927e-16
+// mean(f - f_Boost): 3.0531133177191807e-17
+// variance(f - f_Boost): 7.8758646268991113e-33
+// stddev(f - f_Boost): 8.8746068233466605e-17
 const testcase_ellint_3<double>
 data151[10] =
 {
   { 0.0000000000000000, 0.60000000000000009, 0.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 0.17485154362988359, 0.60000000000000009, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.35160509865544326, 0.60000000000000009, 0.0000000000000000, 
-         0.34906585039886590 },
+         0.17453292519943295, 0.0 },
+  { 0.35160509865544320, 0.60000000000000009, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
   { 0.53210652578446138, 0.60000000000000009, 0.0000000000000000, 
-         0.52359877559829882 },
+         0.52359877559829882, 0.0 },
   { 0.71805304664485659, 0.60000000000000009, 0.0000000000000000, 
-         0.69813170079773179 },
-  { 0.91082759030195970, 0.60000000000000009, 0.0000000000000000, 
-         0.87266462599716477 },
+         0.69813170079773179, 0.0 },
+  { 0.91082759030195981, 0.60000000000000009, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
   { 1.1112333229323361, 0.60000000000000009, 0.0000000000000000, 
-         1.0471975511965976 },
+         1.0471975511965976, 0.0 },
   { 1.3191461190365270, 0.60000000000000009, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.5332022105084775, 0.60000000000000009, 0.0000000000000000, 
-         1.3962634015954636 },
+         1.2217304763960306, 0.0 },
+  { 1.5332022105084779, 0.60000000000000009, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
   { 1.7507538029157526, 0.60000000000000009, 0.0000000000000000, 
-         1.5707963267948966 },
+         1.5707963267948966, 0.0 },
 };
 const double toler151 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009, nu=0.10000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.4937942733669112e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.2335247010355137e-16
+// mean(f - f_Boost): 8.6042284408449634e-17
+// variance(f - f_Boost): 2.2835347143080263e-33
+// stddev(f - f_Boost): 4.7786344433405099e-17
 const testcase_ellint_3<double>
 data152[10] =
 {
   { 0.0000000000000000, 0.60000000000000009, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17467514275022011, 0.60000000000000009, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.35021333086258255, 0.60000000000000009, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.52751664092962691, 0.60000000000000009, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.70752126971957874, 0.60000000000000009, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.89111058756112871, 0.60000000000000009, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.0789241202877768, 0.60000000000000009, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.2710800210399946, 0.60000000000000009, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.4669060574440276, 0.60000000000000009, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.6648615773343014, 0.60000000000000009, 0.10000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17502858548476194, 0.60000000000000009, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35301673150537388, 0.60000000000000009, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53683932476326812, 0.60000000000000009, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72914228589586771, 0.60000000000000009, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.93208036718354692, 0.60000000000000009, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1468984688863377, 0.60000000000000009, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3733904977062528, 0.60000000000000009, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6094225663372157, 0.60000000000000009, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8508766487100685, 0.60000000000000009, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler152 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009, nu=0.20000000000000001.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1891472451898755e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 2.2547200163366559e-16
+// mean(f - f_Boost): -2.4980018054066023e-17
+// variance(f - f_Boost): 2.1685495635542404e-32
+// stddev(f - f_Boost): 1.4725995937641163e-16
 const testcase_ellint_3<double>
 data153[10] =
 {
   { 0.0000000000000000, 0.60000000000000009, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17449937871800650, 0.60000000000000009, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34884093647346553, 0.60000000000000009, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.52306221119844087, 0.60000000000000009, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.69749955678982223, 0.60000000000000009, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.87274610682416853, 0.60000000000000009, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 1.0494620540750792, 0.60000000000000009, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.2280847305507339, 0.60000000000000009, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.4085436279696888, 0.60000000000000009, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.5901418016279374, 0.60000000000000009, 0.20000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17520627248155893, 0.60000000000000009, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35444873935437748, 0.60000000000000009, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54172310557682524, 0.60000000000000009, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.74084300280734672, 0.60000000000000009, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.95509001527006121, 0.60000000000000009, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1865688084431796, 0.60000000000000009, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4352978868932600, 0.60000000000000009, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6983400371331818, 0.60000000000000009, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.9695980282802217, 0.60000000000000009, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler153 = 2.5000000000000020e-13;
 
-// Test data for k=0.60000000000000009, nu=0.29999999999999999.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.7339932380431439e-16
+// Test data for k=0.60000000000000009, nu=0.30000000000000004.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.9470074709717020e-16
+// mean(f - f_Boost): 3.0531133177191807e-17
+// variance(f - f_Boost): 1.1508025840536076e-34
+// stddev(f - f_Boost): 1.0727546709539920e-17
 const testcase_ellint_3<double>
 data154[10] =
 {
-  { 0.0000000000000000, 0.60000000000000009, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17432424744393932, 0.60000000000000009, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34748744127146447, 0.60000000000000009, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.51873632743924825, 0.60000000000000009, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.68794610396313116, 0.60000000000000009, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.85558070175468726, 0.60000000000000009, 0.29999999999999999
-         0.87266462599716477 },
-  { 1.0224416343605653, 0.60000000000000009, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.1893144457936788, 0.60000000000000009, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.3566435377982575, 0.60000000000000009, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.5243814243493585, 0.60000000000000009, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.60000000000000009, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17538460882640122, 0.60000000000000009, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35590165133735557, 0.60000000000000009, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.54676661152254535, 0.60000000000000009, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.75321709418305305, 0.60000000000000009, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.98012637808992920, 0.60000000000000009, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.2310891277158875, 0.60000000000000009, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.5069157924585623, 0.60000000000000009, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.8039583598337940, 0.60000000000000009, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 2.1134154405060599, 0.60000000000000009, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler154 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009, nu=0.40000000000000002.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.5440898085101625e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.8974839914337670e-16
+// mean(f - f_Boost): -1.3877787807814457e-17
+// variance(f - f_Boost): 2.2849613290816465e-32
+// stddev(f - f_Boost): 1.5116088545260797e-16
 const testcase_ellint_3<double>
 data155[10] =
 {
   { 0.0000000000000000, 0.60000000000000009, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17414974487670717, 0.60000000000000009, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34615238767335027, 0.60000000000000009, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.51453257838108557, 0.60000000000000009, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.67882386787534399, 0.60000000000000009, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.83948470233173578, 0.60000000000000009, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 0.99753496200073977, 0.60000000000000009, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.1541101404388487, 0.60000000000000009, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.3100911323398816, 0.60000000000000009, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.4659345278069984, 0.60000000000000009, 0.40000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17556359876533037, 0.60000000000000009, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35737601674244679, 0.60000000000000009, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.55197933771320218, 0.60000000000000009, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.76633591620002905, 0.60000000000000009, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0075231136019616, 0.60000000000000009, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2815842073813450, 0.60000000000000009, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.5911666941449827, 0.60000000000000009, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.9323227566025762, 0.60000000000000009, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.2925036420985130, 0.60000000000000009, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler155 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009, nu=0.50000000000000000.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.7124937590522226e-16
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 2.1397785842303966e-16
+// mean(f - f_Boost): 9.1593399531575410e-17
+// variance(f - f_Boost): 1.5339913122479866e-32
+// stddev(f - f_Boost): 1.2385440291923362e-16
 const testcase_ellint_3<double>
 data156[10] =
 {
   { 0.0000000000000000, 0.60000000000000009, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17397586700252807, 0.60000000000000009, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34483533397138516, 0.60000000000000009, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.51044500461706477, 0.60000000000000009, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.67009988034712664, 0.60000000000000009, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.82434762375735193, 0.60000000000000009, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.97447346702798998, 0.60000000000000009, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.1219494000522143, 0.60000000000000009, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.2680242605954486, 0.60000000000000009, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.4135484285693078, 0.60000000000000009, 0.50000000000000000, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17574324658480217, 0.60000000000000009, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35887240603169313, 0.60000000000000009, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55737161826345261, 0.60000000000000009, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.78028227313077458, 0.60000000000000009, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0376989776486290, 0.60000000000000009, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.3395933991042928, 0.60000000000000009, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.6924049626591784, 0.60000000000000009, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.0931011856518920, 0.60000000000000009, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.5239007084492711, 0.60000000000000009, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler156 = 2.5000000000000020e-13;
 
-// Test data for k=0.60000000000000009, nu=0.59999999999999998.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.0652177678695900e-16
+// Test data for k=0.60000000000000009, nu=0.60000000000000009.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.6651378277398083e-16
+// mean(f - f_Boost): 1.1934897514720432e-16
+// variance(f - f_Boost): 1.7585404776158019e-33
+// stddev(f - f_Boost): 4.1934955319110598e-17
 const testcase_ellint_3<double>
 data157[10] =
 {
-  { 0.0000000000000000, 0.60000000000000009, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17380260984469353, 0.60000000000000009, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34353585361777839, 0.60000000000000009, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.50646805774321380, 0.60000000000000009, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.66174468108625506, 0.60000000000000009, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.81007462280278408, 0.60000000000000009, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.95303466945718729, 0.60000000000000009, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.0924118588677505, 0.60000000000000009, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.2297640574847937, 0.60000000000000009, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.3662507535812816, 0.60000000000000009, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.60000000000000009, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17592355661219386, 0.60000000000000009, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.36039141192661606, 0.60000000000000009, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.56295472636903854, 0.60000000000000009, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.79515295130165986, 0.60000000000000009, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0711886441942242, 0.60000000000000009, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.4072952835139891, 0.60000000000000009, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.8174863977376825, 0.60000000000000009, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.3029921578542232, 0.60000000000000009, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 2.8388723099514972, 0.60000000000000009, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler157 = 2.5000000000000020e-13;
 
-// Test data for k=0.60000000000000009, nu=0.69999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1692457486457856e-16
+// Test data for k=0.60000000000000009, nu=0.70000000000000007.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 2.0027679235921772e-16
+// mean(f - f_Boost): -1.3877787807814457e-17
+// variance(f - f_Boost): 2.2849613290816465e-32
+// stddev(f - f_Boost): 1.5116088545260797e-16
 const testcase_ellint_3<double>
 data158[10] =
 {
-  { 0.0000000000000000, 0.60000000000000009, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17362996946312007, 0.60000000000000009, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34225353454870588, 0.60000000000000009, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.50259656397799524, 0.60000000000000009, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.65373184496628933, 0.60000000000000009, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.79658372884056439, 0.60000000000000009, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.93303240100245421, 0.60000000000000009, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.0651547944716557, 0.60000000000000009, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.1947676204853441, 0.60000000000000009, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.3232737468822813, 0.60000000000000009, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.60000000000000009, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17610453321631936, 0.60000000000000009, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.36193365056369764, 0.60000000000000009, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.56874098962268527, 0.60000000000000009, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.81106198671477181, 0.60000000000000009, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.1086886419010082, 0.60000000000000009, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.4879048567239257, 0.60000000000000009, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 1.9780310073615925, 0.60000000000000009, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.5941545586772712, 0.60000000000000009, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 3.3029735898397159, 0.60000000000000009, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler158 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2705175719241326e-16
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 7.3044933435043190e-16
+// mean(f - f_Boost): 2.6367796834847468e-16
+// variance(f - f_Boost): 8.5834655546147173e-33
+// stddev(f - f_Boost): 9.2646994309662939e-17
 const testcase_ellint_3<double>
 data159[10] =
 {
   { 0.0000000000000000, 0.60000000000000009, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17345794195390685, 0.60000000000000009, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.34098797854531027, 0.60000000000000009, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.49882569168826213, 0.60000000000000009, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.64603758566475511, 0.60000000000000009, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.78380365594769730, 0.60000000000000009, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.91430946255611190, 0.60000000000000009, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 1.0398955217270607, 0.60000000000000009, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.1625948314277679, 0.60000000000000009, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.2840021261752192, 0.60000000000000009, 0.80000000000000004, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17628618080795252, 0.60000000000000009, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36349976272521012, 0.60000000000000009, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.57474392342151914, 0.60000000000000009, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.82814493499158170, 0.60000000000000009, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1511281795998280, 0.60000000000000009, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.5864286332503075, 0.60000000000000009, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.1958944866494527, 0.60000000000000009, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 3.0398358172574604, 0.60000000000000009, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 4.0867036409261832, 0.60000000000000009, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler159 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009, nu=0.90000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.5585887739668036e-16
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.5952142720718732e-16
+// mean(f - f_Boost): 4.6351811278100284e-16
+// variance(f - f_Boost): 2.1278339779151204e-31
+// stddev(f - f_Boost): 4.6128450851021651e-16
 const testcase_ellint_3<double>
 data160[10] =
 {
   { 0.0000000000000000, 0.60000000000000009, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17328652344890030, 0.60000000000000009, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.33973880062929018, 0.60000000000000009, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.49515092233122743, 0.60000000000000009, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.63864042139737043, 0.60000000000000009, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.77167205646538850, 0.60000000000000009, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.89673202848034383, 0.60000000000000009, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 1.0163984492661304, 0.60000000000000009, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.1328845785162431, 0.60000000000000009, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.2479362973851873, 0.60000000000000009, 0.90000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17646850384035848, 0.60000000000000009, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36509041515134105, 0.60000000000000009, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.58097838596260631, 0.60000000000000009, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.84656453396163722, 0.60000000000000009, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1997828426963724, 0.60000000000000009, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.7112436789225605, 0.60000000000000009, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.5193168553672312, 0.60000000000000009, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.8656670488606690, 0.60000000000000009, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.8709993116265604, 0.60000000000000009, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler160 = 2.5000000000000020e-13;
 
-// Test data for k=0.69999999999999996, nu=0.0000000000000000.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.5930208052157665e-16
+// Test data for k=0.70000000000000018, nu=0.0000000000000000.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.1569224977685422e-16
+// mean(f - f_Boost): 7.7715611723760953e-17
+// variance(f - f_Boost): 1.6571557210371951e-32
+// stddev(f - f_Boost): 1.2873056051447903e-16
 const testcase_ellint_3<double>
 data161[10] =
 {
-  { 0.0000000000000000, 0.69999999999999996, 0.0000000000000000, 
-         0.0000000000000000 },
-  { 0.17496737466916723, 0.69999999999999996, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.35254687535677925, 0.69999999999999996, 0.0000000000000000, 
-         0.34906585039886590 },
-  { 0.53536740275997119, 0.69999999999999996, 0.0000000000000000, 
-         0.52359877559829882 },
-  { 0.72603797651684454, 0.69999999999999996, 0.0000000000000000, 
-         0.69813170079773179 },
-  { 0.92698296348313458, 0.69999999999999996, 0.0000000000000000, 
-         0.87266462599716477 },
-  { 1.1400447527693316, 0.69999999999999996, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.3657668117194073, 0.69999999999999996, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.6024686895959159, 0.69999999999999996, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 1.8456939983747236, 0.69999999999999996, 0.0000000000000000, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.70000000000000018, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17496737466916723, 0.70000000000000018, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35254687535677931, 0.70000000000000018, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.53536740275997130, 0.70000000000000018, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.72603797651684454, 0.70000000000000018, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.92698296348313447, 0.70000000000000018, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.1400447527693318, 0.70000000000000018, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.3657668117194073, 0.70000000000000018, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.6024686895959164, 0.70000000000000018, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.8456939983747236, 0.70000000000000018, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler161 = 2.5000000000000020e-13;
 
-// Test data for k=0.69999999999999996, nu=0.10000000000000001.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.6735282577377367e-16
+// Test data for k=0.70000000000000018, nu=0.10000000000000001.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.9552278747527691e-16
+// mean(f - f_Boost): 1.1102230246251565e-16
+// variance(f - f_Boost): 1.3695501826753678e-32
+// stddev(f - f_Boost): 1.1702778228589004e-16
 const testcase_ellint_3<double>
 data162[10] =
 {
-  { 0.0000000000000000, 0.69999999999999996, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17479076384884684, 0.69999999999999996, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.35114844900396364, 0.69999999999999996, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.53072776947527001, 0.69999999999999996, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.71530198262386235, 0.69999999999999996, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.90666760677828306, 0.69999999999999996, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.1063366517438080, 0.69999999999999996, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.3149477243092149, 0.69999999999999996, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.5314886725038925, 0.69999999999999996, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.7528050171757608, 0.69999999999999996, 0.10000000000000001, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.70000000000000018, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17514462737300920, 0.70000000000000018, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35396527997470451, 0.70000000000000018, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54015179589433981, 0.70000000000000018, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.73734430854477728, 0.70000000000000018, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.94888950796697047, 0.70000000000000018, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1772807959736322, 0.70000000000000018, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4231796401075834, 0.70000000000000018, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6841856799887471, 0.70000000000000018, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.9541347343119564, 0.70000000000000018, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler162 = 2.5000000000000020e-13;
 
-// Test data for k=0.69999999999999996, nu=0.20000000000000001.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.7517969287516802e-16
+// Test data for k=0.70000000000000018, nu=0.20000000000000001.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.7430437016285820e-16
+// mean(f - f_Boost): 3.3306690738754695e-17
+// variance(f - f_Boost): 1.3695501826753678e-34
+// stddev(f - f_Boost): 1.1702778228589003e-17
 const testcase_ellint_3<double>
 data163[10] =
 {
-  { 0.0000000000000000, 0.69999999999999996, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17461479077791475, 0.69999999999999996, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.34976950621407538, 0.69999999999999996, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.52622533231350177, 0.69999999999999996, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.70508774017895215, 0.69999999999999996, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.88775302531730294, 0.69999999999999996, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 1.0756195476149006, 0.69999999999999996, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.2695349716654374, 0.69999999999999996, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.4690814617070540, 0.69999999999999996, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.6721098780092145, 0.69999999999999996, 0.20000000000000001, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.70000000000000018, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17532252613350796, 0.70000000000000018, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35540417596807522, 0.70000000000000018, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54508913033361928, 0.70000000000000018, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.74927635777718415, 0.70000000000000018, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.97261706337936338, 0.70000000000000018, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2187303976209327, 0.70000000000000018, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4887796709222487, 0.70000000000000018, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.7796581281839214, 0.70000000000000018, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.0829290325820207, 0.70000000000000018, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler163 = 2.5000000000000020e-13;
 
-// Test data for k=0.69999999999999996, nu=0.29999999999999999.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8280039841080712e-16
+// Test data for k=0.70000000000000018, nu=0.30000000000000004.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.2570807706941696e-16
+// mean(f - f_Boost): 8.8817841970012528e-17
+// variance(f - f_Boost): 1.5582437633995295e-32
+// stddev(f - f_Boost): 1.2482963443828271e-16
 const testcase_ellint_3<double>
 data164[10] =
 {
-  { 0.0000000000000000, 0.69999999999999996, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17443945136076175, 0.69999999999999996, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34840956983535287, 0.69999999999999996, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.52185308551329168, 0.69999999999999996, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.69535240431168255, 0.69999999999999996, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.87007983473964923, 0.69999999999999996, 0.29999999999999999
-         0.87266462599716477 },
-  { 1.0474657975577066, 0.69999999999999996, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.2286225419931891, 0.69999999999999996, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.4136490671013271, 0.69999999999999996, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.6011813647733213, 0.69999999999999996, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.70000000000000018, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17550107516328570, 0.70000000000000018, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35686409576571965, 0.70000000000000018, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.55018827316513352, 0.70000000000000018, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.76189759494390275, 0.70000000000000018, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 0.99844623430885626, 0.70000000000000018, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.2652862989039833, 0.70000000000000018, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.5647666808691361, 0.70000000000000018, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 1.8932499694938165, 0.70000000000000018, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 2.2392290510988535, 0.70000000000000018, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler164 = 2.5000000000000020e-13;
 
-// Test data for k=0.69999999999999996, nu=0.40000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3472957053482092e-16
+// Test data for k=0.70000000000000018, nu=0.40000000000000002.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.3719045096496910e-16
+// mean(f - f_Boost): 1.3600232051658169e-16
+// variance(f - f_Boost): 1.1718213750516114e-32
+// stddev(f - f_Boost): 1.0825069861444829e-16
 const testcase_ellint_3<double>
 data165[10] =
 {
-  { 0.0000000000000000, 0.69999999999999996, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17426474153983229, 0.69999999999999996, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34706817945773732, 0.69999999999999996, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.51760452851738148, 0.69999999999999996, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.68605801534722755, 0.69999999999999996, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.85351339387296532, 0.69999999999999996, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 1.0215297967969539, 0.69999999999999996, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.1915051074460530, 0.69999999999999996, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.3639821911744707, 0.69999999999999996, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.5382162002954762, 0.69999999999999996, 0.40000000000000002, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.70000000000000018, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17568027871494424, 0.70000000000000018, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35834559208180261, 0.70000000000000018, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.55545885451190613, 0.70000000000000018, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.77528120402568113, 0.70000000000000018, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0267241287600322, 0.70000000000000018, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.3181380338980246, 0.70000000000000018, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.6542840785132087, 0.70000000000000018, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 2.0315595131131823, 0.70000000000000018, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.4342502915307880, 0.70000000000000018, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler165 = 2.5000000000000020e-13;
 
-// Test data for k=0.69999999999999996, nu=0.50000000000000000.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.9748346743390620e-16
+// Test data for k=0.70000000000000018, nu=0.50000000000000000.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.0277361210295499e-16
+// mean(f - f_Boost): 1.6930901125533636e-16
+// variance(f - f_Boost): 6.3799163752809956e-32
+// stddev(f - f_Boost): 2.5258496343371268e-16
 const testcase_ellint_3<double>
 data166[10] =
 {
-  { 0.0000000000000000, 0.69999999999999996, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17409065729516096, 0.69999999999999996, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34574489064986091, 0.69999999999999996, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.51347361925579782, 0.69999999999999996, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.67717079489579279, 0.69999999999999996, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.83793902055292280, 0.69999999999999996, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 0.99752863545289705, 0.69999999999999996, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.1576240080401501, 0.69999999999999996, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.3191464023923762, 0.69999999999999996, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.4818433192178544, 0.69999999999999996, 0.50000000000000000, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.70000000000000018, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17586014108156545, 0.70000000000000018, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35984923894341653, 0.70000000000000018, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.56091135606739995, 0.70000000000000018, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.78951212635197054, 0.70000000000000018, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0578865732938731, 0.70000000000000018, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.3789149005151722, 0.70000000000000018, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.7620212286086228, 0.70000000000000018, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.2051554347435589, 0.70000000000000018, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.6868019968236996, 0.70000000000000018, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler166 = 2.5000000000000020e-13;
 
-// Test data for k=0.69999999999999996, nu=0.59999999999999998.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 4.0457157538295173e-16
+// Test data for k=0.70000000000000018, nu=0.60000000000000009.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.8597454441867134e-16
+// mean(f - f_Boost): 2.5535129566378598e-16
+// variance(f - f_Boost): 2.8561208198482198e-31
+// stddev(f - f_Boost): 5.3442687243889785e-16
 const testcase_ellint_3<double>
 data167[10] =
 {
-  { 0.0000000000000000, 0.69999999999999996, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17391719464391614, 0.69999999999999996, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34443927423869031, 0.69999999999999996, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.50945473266486063, 0.69999999999999996, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.66866056326513812, 0.69999999999999996, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.82325830002337352, 0.69999999999999996, 0.59999999999999998
-         0.87266462599716477 },
-  { 0.97522808245669368, 0.69999999999999996, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.1265300613705285, 0.69999999999999996, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.2784066076152001, 0.69999999999999996, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.4309994736080540, 0.69999999999999996, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.70000000000000018, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17604066659721918, 0.70000000000000018, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.36137563278353424, 0.70000000000000018, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.56655721272747606, 0.70000000000000018, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.80468966552978305, 0.70000000000000018, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.0924902943683852, 0.70000000000000018, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.4499247992499800, 0.70000000000000018, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 1.8953714382113818, 0.70000000000000018, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.4323229949248670, 0.70000000000000018, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 3.0314573496746746, 0.70000000000000018, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler167 = 2.5000000000000020e-13;
 
-// Test data for k=0.69999999999999996, nu=0.69999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 5.4867405596732161e-16
+// Test data for k=0.70000000000000018, nu=0.70000000000000007.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.2316852368580916e-16
+// mean(f - f_Boost): 7.7715611723760953e-17
+// variance(f - f_Boost): 7.4564398834547797e-34
+// stddev(f - f_Boost): 2.7306482533374340e-17
 const testcase_ellint_3<double>
 data168[10] =
 {
-  { 0.0000000000000000, 0.69999999999999996, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17374434963995031, 0.69999999999999996, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34315091562900674, 0.69999999999999996, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.50554262375653347, 0.69999999999999996, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.66050025406305801, 0.69999999999999996, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.80938620118847404, 0.69999999999999996, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.95443223855852144, 0.69999999999999996, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.0978573207128304, 0.69999999999999996, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.2411754575007123, 0.69999999999999996, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.3848459188329196, 0.69999999999999996, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.70000000000000018, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17622185963747933, 0.70000000000000018, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.36292539360435261, 0.70000000000000018, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.57240892970150015, 0.70000000000000018, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.82093084713182629, 0.70000000000000018, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.1312609022179871, 0.70000000000000018, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.5345768067715795, 0.70000000000000018, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 2.0668847445934424, 0.70000000000000018, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.7483444537551245, 0.70000000000000018, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 3.5408408771788569, 0.70000000000000018, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler168 = 2.5000000000000020e-13;
 
-// Test data for k=0.69999999999999996, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1829502028913879e-16
+// Test data for k=0.70000000000000018, nu=0.80000000000000004.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.1198716111867353e-16
+// mean(f - f_Boost): 2.2482016248659419e-16
+// variance(f - f_Boost): 5.4326441655972001e-32
+// stddev(f - f_Boost): 2.3308033305273100e-16
 const testcase_ellint_3<double>
 data169[10] =
 {
-  { 0.0000000000000000, 0.69999999999999996, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17357211837335740, 0.69999999999999996, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.34187941416012108, 0.69999999999999996, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.50173239465478259, 0.69999999999999996, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.65266550725988315, 0.69999999999999996, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.79624879865249298, 0.69999999999999996, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.93497577043296920, 0.69999999999999996, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 1.0713041566930750, 0.69999999999999996, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.2069772023255654, 0.69999999999999996, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.3427110650397531, 0.69999999999999996, 0.80000000000000004, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.70000000000000018, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17640372461994805, 0.70000000000000018, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36449916621651091, 0.70000000000000018, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.57848021800372584, 0.70000000000000018, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.83837480968392586, 0.70000000000000018, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1751669030061143, 0.70000000000000018, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.6381851899173603, 0.70000000000000018, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.3002065924302197, 0.70000000000000018, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 3.2337600665337871, 0.70000000000000018, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 4.4042405729076970, 0.70000000000000018, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler169 = 2.5000000000000020e-13;
 
-// Test data for k=0.69999999999999996, nu=0.90000000000000002.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2494869624129105e-16
+// Test data for k=0.70000000000000018, nu=0.90000000000000002.
+// max(|f - f_Boost|): 3.5527136788005009e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 8.5869439826269878e-16
+// mean(f - f_Boost): 7.4384942649885490e-16
+// variance(f - f_Boost): 9.7403930714297352e-31
+// stddev(f - f_Boost): 9.8693429727767263e-16
 const testcase_ellint_3<double>
 data170[10] =
 {
-  { 0.0000000000000000, 0.69999999999999996, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17340049697003637, 0.69999999999999996, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.34062438249741556, 0.69999999999999996, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.49801946510076867, 0.69999999999999996, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.64513432604750476, 0.69999999999999996, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.78378145487573758, 0.69999999999999996, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.91671799500854623, 0.69999999999999996, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 1.0466193579463123, 0.69999999999999996, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.1754218079199146, 0.69999999999999996, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.3040500499695913, 0.69999999999999996, 0.90000000000000002, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.70000000000000018, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17658626600478800, 0.70000000000000018, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36609762156017206, 0.70000000000000018, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.58478615187842409, 0.70000000000000018, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.85718862878291846, 0.70000000000000018, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.2255385617397643, 0.70000000000000018, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.7696521899992941, 0.70000000000000018, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.6476314987883507, 0.70000000000000018, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 4.1373434902898083, 0.70000000000000018, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 6.3796094177887763, 0.70000000000000018, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler170 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004, nu=0.0000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1175183168766718e-16
+// max(|f - f_Boost|): 1.5543122344752192e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.7898565163847540e-16
+// mean(f - f_Boost): 2.3869795029440865e-16
+// variance(f - f_Boost): 2.1368406725192426e-31
+// stddev(f - f_Boost): 4.6225974002926564e-16
 const testcase_ellint_3<double>
 data171[10] =
 {
   { 0.0000000000000000, 0.80000000000000004, 0.0000000000000000, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 0.17510154241338899, 0.80000000000000004, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.35365068839779390, 0.80000000000000004, 0.0000000000000000, 
-         0.34906585039886590 },
+         0.17453292519943295, 0.0 },
+  { 0.35365068839779396, 0.80000000000000004, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
   { 0.53926804409084550, 0.80000000000000004, 0.0000000000000000, 
-         0.52359877559829882 },
-  { 0.73587926028070361, 0.80000000000000004, 0.0000000000000000, 
-         0.69813170079773179 },
+         0.52359877559829882, 0.0 },
+  { 0.73587926028070372, 0.80000000000000004, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
   { 0.94770942970071170, 0.80000000000000004, 0.0000000000000000, 
-         0.87266462599716477 },
+         0.87266462599716477, 0.0 },
   { 1.1789022995388236, 0.80000000000000004, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.4323027881876009, 0.80000000000000004, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.7069629739121674, 0.80000000000000004, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 1.9953027776647296, 0.80000000000000004, 0.0000000000000000, 
-         1.5707963267948966 },
+         1.0471975511965976, 0.0 },
+  { 1.4323027881876012, 0.80000000000000004, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.7069629739121677, 0.80000000000000004, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.9953027776647294, 0.80000000000000004, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler171 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004, nu=0.10000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1537164503193145e-16
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 8.3898786942190374e-16
+// mean(f - f_Boost): 2.3869795029440865e-16
+// variance(f - f_Boost): 2.9190059990693968e-31
+// stddev(f - f_Boost): 5.4027826155319237e-16
 const testcase_ellint_3<double>
 data172[10] =
 {
   { 0.0000000000000000, 0.80000000000000004, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17492468824017163, 0.80000000000000004, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.35224443521476911, 0.80000000000000004, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.53456851853226950, 0.80000000000000004, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.72488875602364922, 0.80000000000000004, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.92661354274638952, 0.80000000000000004, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.1432651144499075, 0.80000000000000004, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.3774479927211429, 0.80000000000000004, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.6287092337196041, 0.80000000000000004, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 1.8910755418379521, 0.80000000000000004, 0.10000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17527903952342144, 0.80000000000000004, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35507705313548549, 0.80000000000000004, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54411455987643553, 0.80000000000000004, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.74745625666804383, 0.80000000000000004, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.97046953684238557, 0.80000000000000004, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2183080025184605, 0.80000000000000004, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4943711151994405, 0.80000000000000004, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.7972401309544201, 0.80000000000000004, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.1172616484005085, 0.80000000000000004, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler172 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004, nu=0.20000000000000001.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1894552974436829e-16
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.8513740186068518e-16
+// mean(f - f_Boost): 2.8310687127941490e-16
+// variance(f - f_Boost): 2.7528339102381189e-31
+// stddev(f - f_Boost): 5.2467455724840699e-16
 const testcase_ellint_3<double>
 data173[10] =
 {
   { 0.0000000000000000, 0.80000000000000004, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17474847286224940, 0.80000000000000004, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.35085779529084682, 0.80000000000000004, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.53000829263059146, 0.80000000000000004, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.71443466027453384, 0.80000000000000004, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.90698196872715420, 0.80000000000000004, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 1.1108198200558579, 0.80000000000000004, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.3284988909963957, 0.80000000000000004, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.5600369318140328, 0.80000000000000004, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 1.8007226661734588, 0.80000000000000004, 0.20000000000000001, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17545718375086419, 0.80000000000000004, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35652404627248163, 0.80000000000000004, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54911638512920913, 0.80000000000000004, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.75967684282131176, 0.80000000000000004, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.99513526893543769, 0.80000000000000004, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2622192109995993, 0.80000000000000004, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.5654106676347741, 0.80000000000000004, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.9029531718534984, 0.80000000000000004, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.2624789434186798, 0.80000000000000004, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler173 = 2.5000000000000020e-13;
 
-// Test data for k=0.80000000000000004, nu=0.29999999999999999.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2247517409029886e-16
+// Test data for k=0.80000000000000004, nu=0.30000000000000004.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.2825261583337354e-16
+// mean(f - f_Boost): 2.6367796834847468e-16
+// variance(f - f_Boost): 2.8249350208968825e-31
+// stddev(f - f_Boost): 5.3150117788175054e-16
 const testcase_ellint_3<double>
 data174[10] =
 {
-  { 0.0000000000000000, 0.80000000000000004, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17457289217669889, 0.80000000000000004, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.34949028801501258, 0.80000000000000004, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.52558024362769307, 0.80000000000000004, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.70447281740094891, 0.80000000000000004, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.88864745641528986, 0.80000000000000004, 0.29999999999999999
-         0.87266462599716477 },
-  { 1.0811075819341462, 0.80000000000000004, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.2844589654082377, 0.80000000000000004, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.4991461361277847, 0.80000000000000004, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.7214611048717301, 0.80000000000000004, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.80000000000000004, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17563597931587369, 0.80000000000000004, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35799220412005128, 0.80000000000000004, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.55428253691111318, 0.80000000000000004, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.77260647376977365, 0.80000000000000004, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 1.0220015271210958, 0.80000000000000004, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.3115965312302671, 0.80000000000000004, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.6478518468813512, 0.80000000000000004, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 2.0290458414203481, 0.80000000000000004, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 2.4392042002725693, 0.80000000000000004, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler174 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004, nu=0.40000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2596216594752862e-16
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 8.3462748389836647e-16
+// mean(f - f_Boost): 3.3861802251067273e-16
+// variance(f - f_Boost): 4.3719465706454422e-31
+// stddev(f - f_Boost): 6.6120696991527871e-16
 const testcase_ellint_3<double>
 data175[10] =
 {
   { 0.0000000000000000, 0.80000000000000004, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17439794211872175, 0.80000000000000004, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34814144964568972, 0.80000000000000004, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.52127776285273064, 0.80000000000000004, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.69496411438966588, 0.80000000000000004, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.87146878427509589, 0.80000000000000004, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 1.0537579024937762, 0.80000000000000004, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.2445534387922637, 0.80000000000000004, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.4446769766361993, 0.80000000000000004, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.6512267838651289, 0.80000000000000004, 0.40000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17581543047866136, 0.80000000000000004, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35948208343061633, 0.80000000000000004, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.55962280893702021, 0.80000000000000004, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.78632063889234116, 0.80000000000000004, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0514333069550323, 0.80000000000000004, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.3677213138838757, 0.80000000000000004, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.7451736773665165, 0.80000000000000004, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 2.1830100424586831, 0.80000000000000004, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.6604037035529724, 0.80000000000000004, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler175 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004, nu=0.50000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2940800093915668e-16
+// max(|f - f_Boost|): 2.6645352591003757e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 9.0388243828581744e-16
+// mean(f - f_Boost): 3.8580250105724191e-16
+// variance(f - f_Boost): 6.4106456575047741e-31
+// stddev(f - f_Boost): 8.0066507713929764e-16
 const testcase_ellint_3<double>
 data176[10] =
 {
   { 0.0000000000000000, 0.80000000000000004, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17422361866118044, 0.80000000000000004, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34681083254170475, 0.80000000000000004, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.51709470815494440, 0.80000000000000004, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.68587375344080237, 0.80000000000000004, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.85532571852810624, 0.80000000000000004, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 1.0284677391874903, 0.80000000000000004, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.2081693942686225, 0.80000000000000004, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.3955803006426311, 0.80000000000000004, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.5884528947755532, 0.80000000000000004, 0.50000000000000000, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17599554153999472, 0.80000000000000004, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.36099426243351540, 0.80000000000000004, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.56514786174780673, 0.80000000000000004, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.80090697622371010, 0.80000000000000004, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0838891627679339, 0.80000000000000004, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.4323506654466280, 0.80000000000000004, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.8625761085390575, 0.80000000000000004, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.3768757305654766, 0.80000000000000004, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.9478781158239746, 0.80000000000000004, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler176 = 2.5000000000000020e-13;
 
-// Test data for k=0.80000000000000004, nu=0.59999999999999998.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3281408974056389e-16
+// Test data for k=0.80000000000000004, nu=0.60000000000000009.
+// max(|f - f_Boost|): 3.5527136788005009e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.0631099169042069e-15
+// mean(f - f_Boost): 4.8294701571194306e-16
+// variance(f - f_Boost): 1.1633910328160319e-30
+// stddev(f - f_Boost): 1.0786060600682865e-15
 const testcase_ellint_3<double>
 data177[10] =
 {
-  { 0.0000000000000000, 0.80000000000000004, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17404991781414089, 0.80000000000000004, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34549800443625167, 0.80000000000000004, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.51302536167001545, 0.80000000000000004, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.67717065003912236, 0.80000000000000004, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.84011512421134416, 0.80000000000000004, 0.59999999999999998
-         0.87266462599716477 },
-  { 1.0049863847088740, 0.80000000000000004, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.1748145941898920, 0.80000000000000004, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.3510319699755071, 0.80000000000000004, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.5319262547427865, 0.80000000000000004, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.80000000000000004, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17617631684170665, 0.80000000000000004, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.36252934193666231, 0.80000000000000004, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.57086932622945163, 0.80000000000000004, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.81646796740150973, 0.80000000000000004, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.1199552158519064, 0.80000000000000004, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.5079766673336394, 0.80000000000000004, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 2.0082747447038165, 0.80000000000000004, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.6315146066775523, 0.80000000000000004, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 3.3418121892288051, 0.80000000000000004, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler177 = 2.5000000000000020e-13;
 
-// Test data for k=0.80000000000000004, nu=0.69999999999999996.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3618176466061808e-16
+// Test data for k=0.80000000000000004, nu=0.70000000000000007.
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.6544679145741375e-16
+// mean(f - f_Boost): 3.2751579226442120e-16
+// variance(f - f_Boost): 4.4236851331020672e-31
+// stddev(f - f_Boost): 6.6510789599147505e-16
 const testcase_ellint_3<double>
 data178[10] =
 {
-  { 0.0000000000000000, 0.80000000000000004, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17387683562442199, 0.80000000000000004, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34420254775101611, 0.80000000000000004, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.50906439222143673, 0.80000000000000004, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.66882693152688422, 0.80000000000000004, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.82574792844091316, 0.80000000000000004, 0.69999999999999996
-         0.87266462599716477 },
-  { 0.98310431309490931, 0.80000000000000004, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.1440884535113258, 0.80000000000000004, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.3103743938952537, 0.80000000000000004, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.4806912324625332, 0.80000000000000004, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.80000000000000004, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17635776076721221, 0.80000000000000004, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.36408794649916976, 0.80000000000000004, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.57679992290624138, 0.80000000000000004, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.83312441418142813, 0.80000000000000004, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.1603958891464856, 0.80000000000000004, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.5982855143796213, 0.80000000000000004, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 2.1962484408371821, 0.80000000000000004, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 2.9873281786111869, 0.80000000000000004, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 3.9268876980046397, 0.80000000000000004, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler178 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3951228558314112e-16
+// max(|f - f_Boost|): 4.4408920985006262e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 9.0176949165011079e-16
+// mean(f - f_Boost): 7.0499162063697436e-16
+// variance(f - f_Boost): 1.7230805408026989e-30
+// stddev(f - f_Boost): 1.3126616246400665e-15
 const testcase_ellint_3<double>
 data179[10] =
 {
   { 0.0000000000000000, 0.80000000000000004, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17370436817515203, 0.80000000000000004, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.34292405894783395, 0.80000000000000004, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.50520682176250076, 0.80000000000000004, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.66081751679736178, 0.80000000000000004, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.81214672249355102, 0.80000000000000004, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 0.96264481387685552, 0.80000000000000004, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 1.1156611352656258, 0.80000000000000004, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.2730756225143889, 0.80000000000000004, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.4339837018309471, 0.80000000000000004, 0.80000000000000004, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17653987774203392, 0.80000000000000004, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36567072568046877, 0.80000000000000004, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.58295359996558616, 0.80000000000000004, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.85101998309176108, 0.80000000000000004, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.2062322059736537, 0.80000000000000004, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.7090321420917429, 0.80000000000000004, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.4529058049405066, 0.80000000000000004, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 3.5368893360106948, 0.80000000000000004, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 4.9246422058196062, 0.80000000000000004, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler179 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004, nu=0.90000000000000002.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 4.4280684534289690e-16
+// max(|f - f_Boost|): 4.4408920985006262e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.7782721357365268e-16
+// mean(f - f_Boost): 8.9928064994637676e-16
+// variance(f - f_Boost): 1.5485199571025344e-30
+// stddev(f - f_Boost): 1.2443954183066307e-15
 const testcase_ellint_3<double>
 data180[10] =
 {
   { 0.0000000000000000, 0.80000000000000004, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17353251158533151, 0.80000000000000004, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.34166214791545768, 0.80000000000000004, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.50144799535130569, 0.80000000000000004, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.65311976193814425, 0.80000000000000004, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.79924384892320866, 0.80000000000000004, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.94345762353365603, 0.80000000000000004, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 1.0892582069219161, 0.80000000000000004, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.2387000876610268, 0.80000000000000004, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.3911845406776222, 0.80000000000000004, 0.90000000000000002, 
-         1.5707963267948966 },
+         0.0000000000000000, 0.0 },
+  { 0.17672267223433513, 0.80000000000000004, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36727835537196063, 0.80000000000000004, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.58934569363716649, 0.80000000000000004, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.87032723471138851, 0.80000000000000004, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.2588676111323349, 0.80000000000000004, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.8498731900660019, 0.80000000000000004, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.8368381299300420, 0.80000000000000004, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 4.5674844191654058, 0.80000000000000004, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 7.2263259298637115, 0.80000000000000004, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler180 = 2.5000000000000020e-13;
 
-// Test data for k=0.89999999999999991, nu=0.0000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8945813740035884e-16
+// Test data for k=0.90000000000000013, nu=0.0000000000000000.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.3381508715713360e-16
+// mean(f - f_Boost): 5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
 const testcase_ellint_3<double>
 data181[10] =
 {
-  { 0.0000000000000000, 0.89999999999999991, 0.0000000000000000, 
-         0.0000000000000000 },
-  { 0.17525427376115024, 0.89999999999999991, 0.0000000000000000, 
-         0.17453292519943295 },
-  { 0.35492464591297446, 0.89999999999999991, 0.0000000000000000, 
-         0.34906585039886590 },
-  { 0.54388221416157112, 0.89999999999999991, 0.0000000000000000, 
-         0.52359877559829882 },
-  { 0.74797400423532490, 0.89999999999999991, 0.0000000000000000, 
-         0.69813170079773179 },
-  { 0.97463898451966458, 0.89999999999999991, 0.0000000000000000, 
-         0.87266462599716477 },
-  { 1.2334463254523440, 0.89999999999999991, 0.0000000000000000, 
-         1.0471975511965976 },
-  { 1.5355247765594910, 0.89999999999999991, 0.0000000000000000, 
-         1.2217304763960306 },
-  { 1.8882928567775117, 0.89999999999999991, 0.0000000000000000, 
-         1.3962634015954636 },
-  { 2.2805491384227703, 0.89999999999999991, 0.0000000000000000, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.90000000000000013, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17525427376115027, 0.90000000000000013, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35492464591297446, 0.90000000000000013, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.54388221416157123, 0.90000000000000013, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.74797400423532512, 0.90000000000000013, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.97463898451966446, 0.90000000000000013, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2334463254523440, 0.90000000000000013, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5355247765594915, 0.90000000000000013, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.8882928567775128, 0.90000000000000013, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2805491384227707, 0.90000000000000013, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler181 = 2.5000000000000020e-13;
 
-// Test data for k=0.89999999999999991, nu=0.10000000000000001.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1237990617685137e-16
+// Test data for k=0.90000000000000013, nu=0.10000000000000001.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.1500594295134815e-16
+// mean(f - f_Boost): 9.1593399531575410e-17
+// variance(f - f_Boost): 1.0357223256482469e-33
+// stddev(f - f_Boost): 3.2182640128619758e-17
 const testcase_ellint_3<double>
 data182[10] =
 {
-  { 0.0000000000000000, 0.89999999999999991, 0.10000000000000001, 
-         0.0000000000000000 },
-  { 0.17507714233254656, 0.89999999999999991, 0.10000000000000001, 
-         0.17453292519943295 },
-  { 0.35350932904326521, 0.89999999999999991, 0.10000000000000001, 
-         0.34906585039886590 },
-  { 0.53911129989870976, 0.89999999999999991, 0.10000000000000001, 
-         0.52359877559829882 },
-  { 0.73666644254508395, 0.89999999999999991, 0.10000000000000001, 
-         0.69813170079773179 },
-  { 0.95250736612100195, 0.89999999999999991, 0.10000000000000001, 
-         0.87266462599716477 },
-  { 1.1950199550905594, 0.89999999999999991, 0.10000000000000001, 
-         1.0471975511965976 },
-  { 1.4741687286340848, 0.89999999999999991, 0.10000000000000001, 
-         1.2217304763960306 },
-  { 1.7968678183506053, 0.89999999999999991, 0.10000000000000001, 
-         1.3962634015954636 },
-  { 2.1537868513875287, 0.89999999999999991, 0.10000000000000001, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.90000000000000013, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17543204932716244, 0.90000000000000013, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35636022898551184, 0.90000000000000013, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54880278898382595, 0.90000000000000013, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.75988834774529268, 0.90000000000000013, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.99853303003568117, 0.90000000000000013, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2759958823999022, 0.90000000000000013, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.6051187364639401, 0.90000000000000013, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.9941406879519474, 0.90000000000000013, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.4295011187834890, 0.90000000000000013, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler182 = 2.5000000000000020e-13;
 
-// Test data for k=0.89999999999999991, nu=0.20000000000000001.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3446165733924066e-16
+// Test data for k=0.90000000000000013, nu=0.20000000000000001.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.9533518431433547e-16
+// mean(f - f_Boost): 1.0269562977782698e-16
+// variance(f - f_Boost): 1.4388836606733082e-32
+// stddev(f - f_Boost): 1.1995347684303728e-16
 const testcase_ellint_3<double>
 data183[10] =
 {
-  { 0.0000000000000000, 0.89999999999999991, 0.20000000000000001, 
-         0.0000000000000000 },
-  { 0.17490065089140927, 0.89999999999999991, 0.20000000000000001, 
-         0.17453292519943295 },
-  { 0.35211377590661436, 0.89999999999999991, 0.20000000000000001, 
-         0.34906585039886590 },
-  { 0.53448220334204100, 0.89999999999999991, 0.20000000000000001, 
-         0.52359877559829882 },
-  { 0.72591368943179579, 0.89999999999999991, 0.20000000000000001, 
-         0.69813170079773179 },
-  { 0.93192539780038763, 0.89999999999999991, 0.20000000000000001, 
-         0.87266462599716477 },
-  { 1.1600809679692683, 0.89999999999999991, 0.20000000000000001, 
-         1.0471975511965976 },
-  { 1.4195407225882508, 0.89999999999999991, 0.20000000000000001, 
-         1.2217304763960306 },
-  { 1.7168966476424521, 0.89999999999999991, 0.20000000000000001, 
-         1.3962634015954636 },
-  { 2.0443194576468895, 0.89999999999999991, 0.20000000000000001, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.90000000000000013, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17561047321968409, 0.90000000000000013, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35781659944356109, 0.90000000000000013, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.55388150905215283, 0.90000000000000013, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.77246874123251441, 0.90000000000000013, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 1.0244466254771925, 0.90000000000000013, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.3234824077640801, 0.90000000000000013, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.6849848968804240, 0.90000000000000013, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 2.1185749045502278, 0.90000000000000013, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.6076835743348417, 0.90000000000000013, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
 };
 const double toler183 = 2.5000000000000020e-13;
 
-// Test data for k=0.89999999999999991, nu=0.29999999999999999.
-// max(|f - f_GSL|): 1.1102230246251565e-15
-// max(|f - f_GSL| / |f_GSL|): 5.6974600067013622e-16
+// Test data for k=0.90000000000000013, nu=0.30000000000000004.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.9712691025502371e-16
+// mean(f - f_Boost): 6.9388939039072284e-17
+// variance(f - f_Boost): 5.9442282234173945e-34
+// stddev(f - f_Boost): 2.4380787976227090e-17
 const testcase_ellint_3<double>
 data184[10] =
 {
-  { 0.0000000000000000, 0.89999999999999991, 0.29999999999999999
-         0.0000000000000000 },
-  { 0.17472479532647531, 0.89999999999999991, 0.29999999999999999
-         0.17453292519943295 },
-  { 0.35073750187374114, 0.89999999999999991, 0.29999999999999999
-         0.34906585039886590 },
-  { 0.52998766129466957, 0.89999999999999991, 0.29999999999999999
-         0.52359877559829882 },
-  { 0.71566993548699553, 0.89999999999999991, 0.29999999999999999
-         0.69813170079773179 },
-  { 0.91271517762560195, 0.89999999999999991, 0.29999999999999999
-         0.87266462599716477 },
-  { 1.1281241199843370, 0.89999999999999991, 0.29999999999999999
-         1.0471975511965976 },
-  { 1.3704929576917448, 0.89999999999999991, 0.29999999999999999
-         1.2217304763960306 },
-  { 1.6461981511487711, 0.89999999999999991, 0.29999999999999999
-         1.3962634015954636 },
-  { 1.9486280260314426, 0.89999999999999991, 0.29999999999999999
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.90000000000000013, 0.30000000000000004
+         0.0000000000000000, 0.0 },
+  { 0.17578954966746221, 0.90000000000000013, 0.30000000000000004
+         0.17453292519943295, 0.0 },
+  { 0.35929429810867447, 0.90000000000000013, 0.30000000000000004
+         0.34906585039886590, 0.0 },
+  { 0.55912757154240822, 0.90000000000000013, 0.30000000000000004
+         0.52359877559829882, 0.0 },
+  { 0.78578314722025389, 0.90000000000000013, 0.30000000000000004
+         0.69813170079773179, 0.0 },
+  { 1.0526941001131365, 0.90000000000000013, 0.30000000000000004
+         0.87266462599716477, 0.0 },
+  { 1.3769682234538601, 0.90000000000000013, 0.30000000000000004
+         1.0471975511965976, 0.0 },
+  { 1.7779437432911240, 0.90000000000000013, 0.30000000000000004
+         1.2217304763960306, 0.0 },
+  { 2.2676509341813635, 0.90000000000000013, 0.30000000000000004
+         1.3962634015954636, 0.0 },
+  { 2.8256506968858517, 0.90000000000000013, 0.30000000000000004
+         1.5707963267948966, 0.0 },
 };
 const double toler184 = 2.5000000000000020e-13;
 
-// Test data for k=0.89999999999999991, nu=0.40000000000000002.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 4.7646208744449464e-16
+// Test data for k=0.90000000000000013, nu=0.40000000000000002.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.7042235432234642e-16
+// mean(f - f_Boost): 1.8041124150158794e-16
+// variance(f - f_Boost): 8.5834655546147173e-33
+// stddev(f - f_Boost): 9.2646994309662939e-17
 const testcase_ellint_3<double>
 data185[10] =
 {
-  { 0.0000000000000000, 0.89999999999999991, 0.40000000000000002, 
-         0.0000000000000000 },
-  { 0.17454957156468837, 0.89999999999999991, 0.40000000000000002, 
-         0.17453292519943295 },
-  { 0.34938003933330430, 0.89999999999999991, 0.40000000000000002, 
-         0.34906585039886590 },
-  { 0.52562093533067433, 0.89999999999999991, 0.40000000000000002, 
-         0.52359877559829882 },
-  { 0.70589461324915670, 0.89999999999999991, 0.40000000000000002, 
-         0.69813170079773179 },
-  { 0.89472658511942849, 0.89999999999999991, 0.40000000000000002, 
-         0.87266462599716477 },
-  { 1.0987419542323440, 0.89999999999999991, 0.40000000000000002, 
-         1.0471975511965976 },
-  { 1.3261349565496301, 0.89999999999999991, 0.40000000000000002, 
-         1.2217304763960306 },
-  { 1.5831293909853763, 0.89999999999999991, 0.40000000000000002, 
-         1.3962634015954636 },
-  { 1.8641114227238351, 0.89999999999999991, 0.40000000000000002, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.90000000000000013, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17596928293938452, 0.90000000000000013, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36079388642472821, 0.90000000000000013, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.56455096667115612, 0.90000000000000013, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.79990996997869435, 0.90000000000000013, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0836647913872215, 0.90000000000000013, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.4378726836091849, 0.90000000000000013, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.8880446720682853, 0.90000000000000013, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 2.4505848932025232, 0.90000000000000013, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 3.1000689868578624, 0.90000000000000013, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler185 = 2.5000000000000020e-13;
 
-// Test data for k=0.89999999999999991, nu=0.50000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 4.9652155758573562e-16
+// Test data for k=0.90000000000000013, nu=0.50000000000000000.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.3939646155354115e-16
+// mean(f - f_Boost): 1.5820678100908481e-16
+// variance(f - f_Boost): 1.0089970755557622e-32
+// stddev(f - f_Boost): 1.0044884646205561e-16
 const testcase_ellint_3<double>
 data186[10] =
 {
-  { 0.0000000000000000, 0.89999999999999991, 0.50000000000000000, 
-         0.0000000000000000 },
-  { 0.17437497557073334, 0.89999999999999991, 0.50000000000000000, 
-         0.17453292519943295 },
-  { 0.34804093691586013, 0.89999999999999991, 0.50000000000000000, 
-         0.34906585039886590 },
-  { 0.52137576320372891, 0.89999999999999991, 0.50000000000000000, 
-         0.52359877559829882 },
-  { 0.69655163996912262, 0.89999999999999991, 0.50000000000000000, 
-         0.69813170079773179 },
-  { 0.87783188683054236, 0.89999999999999991, 0.50000000000000000, 
-         0.87266462599716477 },
-  { 1.0716015959755185, 0.89999999999999991, 0.50000000000000000, 
-         1.0471975511965976 },
-  { 1.2857636916026749, 0.89999999999999991, 0.50000000000000000, 
-         1.2217304763960306 },
-  { 1.5264263913252358, 0.89999999999999991, 0.50000000000000000, 
-         1.3962634015954636 },
-  { 1.7888013241937863, 0.89999999999999991, 0.50000000000000000, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.90000000000000013, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17614967734498183, 0.90000000000000013, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.36231594750319435, 0.90000000000000013, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.57016256984349567, 0.90000000000000013, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.81494025918293422, 0.90000000000000013, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.1178482279283477, 0.90000000000000013, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.5081455873012106, 0.90000000000000013, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 2.0213599730863998, 0.90000000000000013, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.6822467012926832, 0.90000000000000013, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 3.4591069002104686, 0.90000000000000013, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
 };
 const double toler186 = 2.5000000000000020e-13;
 
-// Test data for k=0.89999999999999991, nu=0.59999999999999998.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8702201113622378e-16
+// Test data for k=0.90000000000000013, nu=0.60000000000000009.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.4914274070443813e-16
+// mean(f - f_Boost): 3.4694469519536142e-16
+// variance(f - f_Boost): 2.5224926888894056e-31
+// stddev(f - f_Boost): 5.0224423231027804e-16
 const testcase_ellint_3<double>
 data187[10] =
 {
-  { 0.0000000000000000, 0.89999999999999991, 0.59999999999999998
-         0.0000000000000000 },
-  { 0.17420100334657812, 0.89999999999999991, 0.59999999999999998
-         0.17453292519943295 },
-  { 0.34671975876122157, 0.89999999999999991, 0.59999999999999998
-         0.34906585039886590 },
-  { 0.51724631570707946, 0.89999999999999991, 0.59999999999999998
-         0.52359877559829882 },
-  { 0.68760879113743023, 0.89999999999999991, 0.59999999999999998
-         0.69813170079773179 },
-  { 0.86192157779698364, 0.89999999999999991, 0.59999999999999998
-         0.87266462599716477 },
-  { 1.0464279696166354, 0.89999999999999991, 0.59999999999999998
-         1.0471975511965976 },
-  { 1.2488156247094004, 0.89999999999999991, 0.59999999999999998
-         1.2217304763960306 },
-  { 1.4750988777188470, 0.89999999999999991, 0.59999999999999998
-         1.3962634015954636 },
-  { 1.7211781128919525, 0.89999999999999991, 0.59999999999999998
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.90000000000000013, 0.60000000000000009
+         0.0000000000000000, 0.0 },
+  { 0.17633073723493825, 0.90000000000000013, 0.60000000000000009
+         0.17453292519943295, 0.0 },
+  { 0.36386108723492810, 0.90000000000000013, 0.60000000000000009
+         0.34906585039886590, 0.0 },
+  { 0.57597424744716241, 0.90000000000000013, 0.60000000000000009
+         0.52359877559829882, 0.0 },
+  { 0.83098051948501150, 0.90000000000000013, 0.60000000000000009
+         0.69813170079773179, 0.0 },
+  { 1.1558706545698916, 0.90000000000000013, 0.60000000000000009
+         0.87266462599716477, 0.0 },
+  { 1.5905576379415669, 0.90000000000000013, 0.60000000000000009
+         1.0471975511965976, 0.0 },
+  { 2.1875186010215084, 0.90000000000000013, 0.60000000000000009
+         1.2217304763960306, 0.0 },
+  { 2.9885767771316853, 0.90000000000000013, 0.60000000000000009
+         1.3962634015954636, 0.0 },
+  { 3.9549939883570238, 0.90000000000000013, 0.60000000000000009
+         1.5707963267948966, 0.0 },
 };
 const double toler187 = 2.5000000000000020e-13;
 
-// Test data for k=0.89999999999999991, nu=0.69999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3410843563834748e-16
+// Test data for k=0.90000000000000013, nu=0.70000000000000007.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.5442489886293633e-16
+// mean(f - f_Boost): 4.3576253716537392e-16
+// variance(f - f_Boost): 2.2187568928205130e-31
+// stddev(f - f_Boost): 4.7103682370070737e-16
 const testcase_ellint_3<double>
 data188[10] =
 {
-  { 0.0000000000000000, 0.89999999999999991, 0.69999999999999996
-         0.0000000000000000 },
-  { 0.17402765093102207, 0.89999999999999991, 0.69999999999999996
-         0.17453292519943295 },
-  { 0.34541608382635131, 0.89999999999999991, 0.69999999999999996
-         0.34906585039886590 },
-  { 0.51322715827061682, 0.89999999999999991, 0.69999999999999996
-         0.52359877559829882 },
-  { 0.67903717872440272, 0.89999999999999991, 0.69999999999999996
-         0.69813170079773179 },
-  { 0.84690113601682671, 0.89999999999999991, 0.69999999999999996
-         0.87266462599716477 },
-  { 1.0229914311548418, 0.89999999999999991, 0.69999999999999996
-         1.0471975511965976 },
-  { 1.2148329639709381, 0.89999999999999991, 0.69999999999999996
-         1.2217304763960306 },
-  { 1.4283586501307799, 0.89999999999999991, 0.69999999999999996
-         1.3962634015954636 },
-  { 1.6600480747670940, 0.89999999999999991, 0.69999999999999996
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.90000000000000013, 0.70000000000000007
+         0.0000000000000000, 0.0 },
+  { 0.17651246700160939, 0.90000000000000013, 0.70000000000000007
+         0.17453292519943295, 0.0 },
+  { 0.36542993547358982, 0.90000000000000013, 0.70000000000000007
+         0.34906585039886590, 0.0 },
+  { 0.58199897877674867, 0.90000000000000013, 0.70000000000000007
+         0.52359877559829882, 0.0 },
+  { 0.84815633587352857, 0.90000000000000013, 0.70000000000000007
+         0.69813170079773179, 0.0 },
+  { 1.1985495623872375, 0.90000000000000013, 0.70000000000000007
+         0.87266462599716477, 0.0 },
+  { 1.6892158134027691, 0.90000000000000013, 0.70000000000000007
+         1.0471975511965976, 0.0 },
+  { 2.4029722191094236, 0.90000000000000013, 0.70000000000000007
+         1.2217304763960306, 0.0 },
+  { 3.4201084941340061, 0.90000000000000013, 0.70000000000000007
+         1.3962634015954636, 0.0 },
+  { 4.6985482312992444, 0.90000000000000013, 0.70000000000000007
+         1.5707963267948966, 0.0 },
 };
 const double toler188 = 2.5000000000000020e-13;
 
-// Test data for k=0.89999999999999991, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3100928058463168e-16
+// Test data for k=0.90000000000000013, nu=0.80000000000000004.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.9362432595976420e-16
+// mean(f - f_Boost): 3.0531133177191805e-16
+// variance(f - f_Boost): 1.1508025840536076e-32
+// stddev(f - f_Boost): 1.0727546709539920e-16
 const testcase_ellint_3<double>
 data189[10] =
 {
-  { 0.0000000000000000, 0.89999999999999991, 0.80000000000000004, 
-         0.0000000000000000 },
-  { 0.17385491439925146, 0.89999999999999991, 0.80000000000000004, 
-         0.17453292519943295 },
-  { 0.34412950523113928, 0.89999999999999991, 0.80000000000000004, 
-         0.34906585039886590 },
-  { 0.50931321668729590, 0.89999999999999991, 0.80000000000000004, 
-         0.52359877559829882 },
-  { 0.67081081392296327, 0.89999999999999991, 0.80000000000000004, 
-         0.69813170079773179 },
-  { 0.83268846097293259, 0.89999999999999991, 0.80000000000000004, 
-         0.87266462599716477 },
-  { 1.0010985015814027, 0.89999999999999991, 0.80000000000000004, 
-         1.0471975511965976 },
-  { 1.1834394045489678, 0.89999999999999991, 0.80000000000000004, 
-         1.2217304763960306 },
-  { 1.3855695891683182, 0.89999999999999991, 0.80000000000000004, 
-         1.3962634015954636 },
-  { 1.6044591960982202, 0.89999999999999991, 0.80000000000000004, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.90000000000000013, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17669487107954862, 0.90000000000000013, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36702314729628421, 0.90000000000000013, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.58825099711365492, 0.90000000000000013, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.86661711422209031, 0.90000000000000013, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.2469779109884802, 0.90000000000000013, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.8105469760531578, 0.90000000000000013, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.6989505165893752, 0.90000000000000013, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 4.0935213267757433, 0.90000000000000013, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 5.9820740813645727, 0.90000000000000013, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
 };
 const double toler189 = 2.5000000000000020e-13;
 
-// Test data for k=0.89999999999999991, nu=0.90000000000000002.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 5.7167507456081732e-16
+// Test data for k=0.90000000000000013, nu=0.90000000000000002.
+// max(|f - f_Boost|): 2.6645352591003757e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.9577148062669782e-16
+// mean(f - f_Boost): 5.9119376061289588e-16
+// variance(f - f_Boost): 1.7340883003959522e-31
+// stddev(f - f_Boost): 4.1642385863395872e-16
 const testcase_ellint_3<double>
 data190[10] =
 {
-  { 0.0000000000000000, 0.89999999999999991, 0.90000000000000002, 
-         0.0000000000000000 },
-  { 0.17368278986240135, 0.89999999999999991, 0.90000000000000002, 
-         0.17453292519943295 },
-  { 0.34285962963961397, 0.89999999999999991, 0.90000000000000002, 
-         0.34906585039886590 },
-  { 0.50549974644993312, 0.89999999999999991, 0.90000000000000002, 
-         0.52359877559829882 },
-  { 0.66290623857720876, 0.89999999999999991, 0.90000000000000002, 
-         0.69813170079773179 },
-  { 0.81921183128847175, 0.89999999999999991, 0.90000000000000002, 
-         0.87266462599716477 },
-  { 0.98058481956066390, 0.89999999999999991, 0.90000000000000002, 
-         1.0471975511965976 },
-  { 1.1543223520473569, 0.89999999999999991, 0.90000000000000002, 
-         1.2217304763960306 },
-  { 1.3462119782292934, 0.89999999999999991, 0.90000000000000002, 
-         1.3962634015954636 },
-  { 1.5536420236310948, 0.89999999999999991, 0.90000000000000002, 
-         1.5707963267948966 },
+  { 0.0000000000000000, 0.90000000000000013, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17687795394604169, 0.90000000000000013, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36864140434751286, 0.90000000000000013, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.59474595366817051, 0.90000000000000013, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.88654237226056665, 0.90000000000000013, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.3026595810616726, 0.90000000000000013, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.9653635459278080, 0.90000000000000013, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 3.1451407527189468, 0.90000000000000013, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 5.3745230680316132, 0.90000000000000013, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 8.9942562031858717, 0.90000000000000013, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
 };
 const double toler190 = 2.5000000000000020e-13;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_ellint_3<Tp> (&data)[Num], Tp toler)
+  test(const testcase_ellint_3<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
         {
-       const Tp f = std::ellint_3(data[i].k, data[i].nu,
+       const Ret f = std::ellint_3(data[i].k, data[i].nu,
                     data[i].phi);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
diff --git a/libstdc++-v3/testsuite/special_functions/13_ellint_3/pr66689.cc b/libstdc++-v3/testsuite/special_functions/13_ellint_3/pr66689.cc
new file mode 100644 (file)
index 0000000..d1299b2
--- /dev/null
@@ -0,0 +1,26 @@
+// { dg-do run { target c++11 } }
+// { dg-require-c-std "" }
+// { dg-add-options ieee }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
+
+#include <cmath>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  const double pi = 3.141592654;
+
+  double Pi1 = std::ellint_3(0.75, 0.0, pi / 2.0);
+  VERIFY(std::abs(Pi1 - 1.91099) < 0.00001);
+
+  double Pi2 = std::ellint_3(0.75, 0.5, pi / 2.0);
+  VERIFY(std::abs(Pi2 - 2.80011) < 0.00001);
+}
+
+int
+main()
+{
+  test01();
+  return 0;
+}
index 6610790..d99a0fe 100644 (file)
 #include <specfun_testcase.h>
 
 // Test data.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 2.0242558374827411e-15
+// max(|f - f_GSL|): 4.9960036108132044e-16 at index 49
+// max(|f - f_GSL| / |f_GSL|): 2.2772878171680836e-15
+// mean(f - f_GSL): 1.1295166444684511e-17
+// variance(f - f_GSL): 4.9654719514602855e-33
+// stddev(f - f_GSL): 7.0466104982894328e-17
 const testcase_expint<double>
 data001[50] =
 {
-  { -3.7832640295504591e-24, -50.000000000000000 },
-  { -1.0489811642368024e-23, -49.000000000000000 },
-  { -2.9096641904058423e-23, -48.000000000000000 },
-  { -8.0741978427258127e-23, -47.000000000000000 },
-  { -2.2415317597442998e-22, -46.000000000000000 },
-  { -6.2256908094623848e-22, -45.000000000000000 },
-  { -1.7299598742816476e-21, -44.000000000000000 },
-  { -4.8094965569500181e-21, -43.000000000000000 },
-  { -1.3377908810011775e-20, -42.000000000000000 },
-  { -3.7231667764599780e-20, -41.000000000000000 },
-  { -1.0367732614516570e-19, -40.000000000000000 },
-  { -2.8887793015227007e-19, -39.000000000000000 },
-  { -8.0541069142907499e-19, -38.000000000000000 },
-  { -2.2470206975885714e-18, -37.000000000000000 },
-  { -6.2733390097622421e-18, -36.000000000000000 },
-  { -1.7527059389947371e-17, -35.000000000000000 },
-  { -4.9006761183927874e-17, -34.000000000000000 },
-  { -1.3713843484487468e-16, -33.000000000000000 },
-  { -3.8409618012250671e-16, -32.000000000000000 },
-  { -1.0767670386162383e-15, -31.000000000000000 },
-  { -3.0215520106888124e-15, -30.000000000000000 },
-  { -8.4877597783535634e-15, -29.000000000000000 },
-  { -2.3869415119337330e-14, -28.000000000000000 },
-  { -6.7206374352620390e-14, -27.000000000000000 },
-  { -1.8946858856749785e-13, -26.000000000000000 },
-  { -5.3488997553402167e-13, -25.000000000000000 },
-  { -1.5123058939997059e-12, -24.000000000000000 },
-  { -4.2826847956656722e-12, -23.000000000000000 },
-  { -1.2149378956204371e-11, -22.000000000000000 },
-  { -3.4532012671467559e-11, -21.000000000000000 },
-  { -9.8355252906498815e-11, -20.000000000000000 },
-  { -2.8078290970607954e-10, -19.000000000000000 },
-  { -8.0360903448286769e-10, -18.000000000000000 },
-  { -2.3064319898216547e-09, -17.000000000000000 },
-  { -6.6404872494410427e-09, -16.000000000000000 },
-  { -1.9186278921478670e-08, -15.000000000000000 },
-  { -5.5656311111451816e-08, -14.000000000000000 },
-  { -1.6218662188014328e-07, -13.000000000000000 },
-  { -4.7510818246724931e-07, -12.000000000000000 },
-  { -1.4003003042474418e-06, -11.000000000000000 },
-  { -4.1569689296853246e-06, -10.000000000000000 },
-  { -1.2447354178006272e-05, -9.0000000000000000 },
-  { -3.7665622843924906e-05, -8.0000000000000000 },
-  { -0.00011548173161033820, -7.0000000000000000 },
-  { -0.00036008245216265862, -6.0000000000000000 },
-  { -0.0011482955912753257, -5.0000000000000000 },
-  { -0.0037793524098489058, -4.0000000000000000 },
-  { -0.013048381094197037, -3.0000000000000000 },
-  { -0.048900510708061125, -2.0000000000000000 },
-  { -0.21938393439552029, -1.0000000000000000 },
+  { -3.7832640295504591e-24, -50.000000000000000, 0.0 },
+  { -1.0489811642368024e-23, -49.000000000000000, 0.0 },
+  { -2.9096641904058423e-23, -48.000000000000000, 0.0 },
+  { -8.0741978427258127e-23, -47.000000000000000, 0.0 },
+  { -2.2415317597442998e-22, -46.000000000000000, 0.0 },
+  { -6.2256908094623848e-22, -45.000000000000000, 0.0 },
+  { -1.7299598742816476e-21, -44.000000000000000, 0.0 },
+  { -4.8094965569500181e-21, -43.000000000000000, 0.0 },
+  { -1.3377908810011775e-20, -42.000000000000000, 0.0 },
+  { -3.7231667764599780e-20, -41.000000000000000, 0.0 },
+  { -1.0367732614516570e-19, -40.000000000000000, 0.0 },
+  { -2.8887793015227007e-19, -39.000000000000000, 0.0 },
+  { -8.0541069142907499e-19, -38.000000000000000, 0.0 },
+  { -2.2470206975885710e-18, -37.000000000000000, 0.0 },
+  { -6.2733390097622421e-18, -36.000000000000000, 0.0 },
+  { -1.7527059389947371e-17, -35.000000000000000, 0.0 },
+  { -4.9006761183927874e-17, -34.000000000000000, 0.0 },
+  { -1.3713843484487468e-16, -33.000000000000000, 0.0 },
+  { -3.8409618012250671e-16, -32.000000000000000, 0.0 },
+  { -1.0767670386162381e-15, -31.000000000000000, 0.0 },
+  { -3.0215520106888124e-15, -30.000000000000000, 0.0 },
+  { -8.4877597783535634e-15, -29.000000000000000, 0.0 },
+  { -2.3869415119337330e-14, -28.000000000000000, 0.0 },
+  { -6.7206374352620390e-14, -27.000000000000000, 0.0 },
+  { -1.8946858856749785e-13, -26.000000000000000, 0.0 },
+  { -5.3488997553402167e-13, -25.000000000000000, 0.0 },
+  { -1.5123058939997059e-12, -24.000000000000000, 0.0 },
+  { -4.2826847956656722e-12, -23.000000000000000, 0.0 },
+  { -1.2149378956204371e-11, -22.000000000000000, 0.0 },
+  { -3.4532012671467559e-11, -21.000000000000000, 0.0 },
+  { -9.8355252906498815e-11, -20.000000000000000, 0.0 },
+  { -2.8078290970607954e-10, -19.000000000000000, 0.0 },
+  { -8.0360903448286769e-10, -18.000000000000000, 0.0 },
+  { -2.3064319898216543e-09, -17.000000000000000, 0.0 },
+  { -6.6404872494410427e-09, -16.000000000000000, 0.0 },
+  { -1.9186278921478670e-08, -15.000000000000000, 0.0 },
+  { -5.5656311111451816e-08, -14.000000000000000, 0.0 },
+  { -1.6218662188014328e-07, -13.000000000000000, 0.0 },
+  { -4.7510818246724931e-07, -12.000000000000000, 0.0 },
+  { -1.4003003042474418e-06, -11.000000000000000, 0.0 },
+  { -4.1569689296853246e-06, -10.000000000000000, 0.0 },
+  { -1.2447354178006272e-05, -9.0000000000000000, 0.0 },
+  { -3.7665622843924906e-05, -8.0000000000000000, 0.0 },
+  { -0.00011548173161033820, -7.0000000000000000, 0.0 },
+  { -0.00036008245216265862, -6.0000000000000000, 0.0 },
+  { -0.0011482955912753257, -5.0000000000000000, 0.0 },
+  { -0.0037793524098489063, -4.0000000000000000, 0.0 },
+  { -0.013048381094197037, -3.0000000000000000, 0.0 },
+  { -0.048900510708061125, -2.0000000000000000, 0.0 },
+  { -0.21938393439552029, -1.0000000000000000, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 //  expint
 
 
 // Test data.
-// max(|f - f_GSL|): 2048.0000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.4993769017626171e-15
+// max(|f - f_GSL|): 16384.000000000000 at index 48
+// max(|f - f_GSL| / |f_GSL|): 1.2494807514688476e-15
+// mean(f - f_GSL): 371.15283351771996
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): 7.1444587641577012e+253
 const testcase_expint<double>
 data002[50] =
 {
-  { 1.8951178163559366, 1.0000000000000000 },
-  { 4.9542343560018907, 2.0000000000000000 },
-  { 9.9338325706254160, 3.0000000000000000 },
-  { 19.630874470056217, 4.0000000000000000 },
-  { 40.185275355803178, 5.0000000000000000 },
-  { 85.989762142439204, 6.0000000000000000 },
-  { 191.50474333550136, 7.0000000000000000 },
-  { 440.37989953483833, 8.0000000000000000 },
-  { 1037.8782907170896, 9.0000000000000000 },
-  { 2492.2289762418782, 10.000000000000000 },
-  { 6071.4063740986112, 11.000000000000000 },
-  { 14959.532666397528, 12.000000000000000 },
-  { 37197.688490689041, 13.000000000000000 },
-  { 93192.513633965369, 14.000000000000000 },
-  { 234955.85249076830, 15.000000000000000 },
-  { 595560.99867083691, 16.000000000000000 },
-  { 1516637.8940425171, 17.000000000000000 },
-  { 3877904.3305974435, 18.000000000000000 },
-  { 9950907.2510468438, 19.000000000000000 },
-  { 25615652.664056588, 20.000000000000000 },
-  { 66127186.355484925, 21.000000000000000 },
-  { 171144671.30036369, 22.000000000000000 },
-  { 443966369.83027124, 23.000000000000000 },
-  { 1154115391.8491828, 24.000000000000000 },
-  { 3005950906.5255494, 25.000000000000000 },
-  { 7842940991.8981876, 26.000000000000000 },
-  { 20496497119.880810, 27.000000000000000 },
-  { 53645118592.314682, 28.000000000000000 },
-  { 140599195758.40689, 29.000000000000000 },
-  { 368973209407.27417, 30.000000000000000 },
-  { 969455575968.39392, 31.000000000000000 },
-  { 2550043566357.7871, 32.000000000000000 },
-  { 6714640184076.4971, 33.000000000000000 },
-  { 17698037244116.266, 34.000000000000000 },
-  { 46690550144661.602, 35.000000000000000 },
-  { 123285207991209.75, 36.000000000000000 },
-  { 325798899867226.50, 37.000000000000000 },
-  { 861638819996578.75, 38.000000000000000 },
-  { 2280446200301902.5, 39.000000000000000 },
-  { 6039718263611242.0, 40.000000000000000 },
-  { 16006649143245042., 41.000000000000000 },
-  { 42447960921368504., 42.000000000000000 },
-  { 1.1263482901669666e+17, 43.000000000000000 },
-  { 2.9904447186323366e+17, 44.000000000000000 },
-  { 7.9439160357044531e+17, 45.000000000000000 },
-  { 2.1113423886478239e+18, 46.000000000000000 },
-  { 5.6143296808103424e+18, 47.000000000000000 },
-  { 1.4936302131129930e+19, 48.000000000000000 },
-  { 3.9754427479037444e+19, 49.000000000000000 },
-  { 1.0585636897131690e+20, 50.000000000000000 },
+  { 1.8951178163559366, 1.0000000000000000, 0.0 },
+  { 4.9542343560018907, 2.0000000000000000, 0.0 },
+  { 9.9338325706254160, 3.0000000000000000, 0.0 },
+  { 19.630874470056217, 4.0000000000000000, 0.0 },
+  { 40.185275355803178, 5.0000000000000000, 0.0 },
+  { 85.989762142439204, 6.0000000000000000, 0.0 },
+  { 191.50474333550136, 7.0000000000000000, 0.0 },
+  { 440.37989953483833, 8.0000000000000000, 0.0 },
+  { 1037.8782907170896, 9.0000000000000000, 0.0 },
+  { 2492.2289762418782, 10.000000000000000, 0.0 },
+  { 6071.4063740986112, 11.000000000000000, 0.0 },
+  { 14959.532666397528, 12.000000000000000, 0.0 },
+  { 37197.688490689041, 13.000000000000000, 0.0 },
+  { 93192.513633965369, 14.000000000000000, 0.0 },
+  { 234955.85249076830, 15.000000000000000, 0.0 },
+  { 595560.99867083691, 16.000000000000000, 0.0 },
+  { 1516637.8940425171, 17.000000000000000, 0.0 },
+  { 3877904.3305974435, 18.000000000000000, 0.0 },
+  { 9950907.2510468438, 19.000000000000000, 0.0 },
+  { 25615652.664056588, 20.000000000000000, 0.0 },
+  { 66127186.355484933, 21.000000000000000, 0.0 },
+  { 171144671.30036369, 22.000000000000000, 0.0 },
+  { 443966369.83027118, 23.000000000000000, 0.0 },
+  { 1154115391.8491828, 24.000000000000000, 0.0 },
+  { 3005950906.5255494, 25.000000000000000, 0.0 },
+  { 7842940991.8981876, 26.000000000000000, 0.0 },
+  { 20496497119.880810, 27.000000000000000, 0.0 },
+  { 53645118592.314682, 28.000000000000000, 0.0 },
+  { 140599195758.40689, 29.000000000000000, 0.0 },
+  { 368973209407.27417, 30.000000000000000, 0.0 },
+  { 969455575968.39392, 31.000000000000000, 0.0 },
+  { 2550043566357.7871, 32.000000000000000, 0.0 },
+  { 6714640184076.4971, 33.000000000000000, 0.0 },
+  { 17698037244116.266, 34.000000000000000, 0.0 },
+  { 46690550144661.602, 35.000000000000000, 0.0 },
+  { 123285207991209.75, 36.000000000000000, 0.0 },
+  { 325798899867226.50, 37.000000000000000, 0.0 },
+  { 861638819996578.75, 38.000000000000000, 0.0 },
+  { 2280446200301902.5, 39.000000000000000, 0.0 },
+  { 6039718263611242.0, 40.000000000000000, 0.0 },
+  { 16006649143245042., 41.000000000000000, 0.0 },
+  { 42447960921368512., 42.000000000000000, 0.0 },
+  { 1.1263482901669666e+17, 43.000000000000000, 0.0 },
+  { 2.9904447186323366e+17, 44.000000000000000, 0.0 },
+  { 7.9439160357044531e+17, 45.000000000000000, 0.0 },
+  { 2.1113423886478239e+18, 46.000000000000000, 0.0 },
+  { 5.6143296808103424e+18, 47.000000000000000, 0.0 },
+  { 1.4936302131129930e+19, 48.000000000000000, 0.0 },
+  { 3.9754427479037444e+19, 49.000000000000000, 0.0 },
+  { 1.0585636897131690e+20, 50.000000000000000, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_expint<Tp> (&data)[Num], Tp toler)
+  test(const testcase_expint<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::expint(data[i].x);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::expint(data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index adc8a38..92df7eb 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for n=0.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hermite<double>
 data001[201] =
 {
-  { 1.0000000000000000, 0, -10.000000000000000 },
-  { 1.0000000000000000, 0, -9.9000000000000004 },
-  { 1.0000000000000000, 0, -9.8000000000000007 },
-  { 1.0000000000000000, 0, -9.6999999999999993 },
-  { 1.0000000000000000, 0, -9.5999999999999996 },
-  { 1.0000000000000000, 0, -9.5000000000000000 },
-  { 1.0000000000000000, 0, -9.4000000000000004 },
-  { 1.0000000000000000, 0, -9.3000000000000007 },
-  { 1.0000000000000000, 0, -9.1999999999999993 },
-  { 1.0000000000000000, 0, -9.0999999999999996 },
-  { 1.0000000000000000, 0, -9.0000000000000000 },
-  { 1.0000000000000000, 0, -8.9000000000000004 },
-  { 1.0000000000000000, 0, -8.8000000000000007 },
-  { 1.0000000000000000, 0, -8.6999999999999993 },
-  { 1.0000000000000000, 0, -8.5999999999999996 },
-  { 1.0000000000000000, 0, -8.5000000000000000 },
-  { 1.0000000000000000, 0, -8.4000000000000004 },
-  { 1.0000000000000000, 0, -8.3000000000000007 },
-  { 1.0000000000000000, 0, -8.1999999999999993 },
-  { 1.0000000000000000, 0, -8.0999999999999996 },
-  { 1.0000000000000000, 0, -8.0000000000000000 },
-  { 1.0000000000000000, 0, -7.9000000000000004 },
-  { 1.0000000000000000, 0, -7.7999999999999998 },
-  { 1.0000000000000000, 0, -7.7000000000000002 },
-  { 1.0000000000000000, 0, -7.5999999999999996 },
-  { 1.0000000000000000, 0, -7.5000000000000000 },
-  { 1.0000000000000000, 0, -7.4000000000000004 },
-  { 1.0000000000000000, 0, -7.2999999999999998 },
-  { 1.0000000000000000, 0, -7.2000000000000002 },
-  { 1.0000000000000000, 0, -7.0999999999999996 },
-  { 1.0000000000000000, 0, -7.0000000000000000 },
-  { 1.0000000000000000, 0, -6.9000000000000004 },
-  { 1.0000000000000000, 0, -6.7999999999999998 },
-  { 1.0000000000000000, 0, -6.7000000000000002 },
-  { 1.0000000000000000, 0, -6.5999999999999996 },
-  { 1.0000000000000000, 0, -6.5000000000000000 },
-  { 1.0000000000000000, 0, -6.4000000000000004 },
-  { 1.0000000000000000, 0, -6.2999999999999998 },
-  { 1.0000000000000000, 0, -6.2000000000000002 },
-  { 1.0000000000000000, 0, -6.0999999999999996 },
-  { 1.0000000000000000, 0, -6.0000000000000000 },
-  { 1.0000000000000000, 0, -5.9000000000000004 },
-  { 1.0000000000000000, 0, -5.7999999999999998 },
-  { 1.0000000000000000, 0, -5.7000000000000002 },
-  { 1.0000000000000000, 0, -5.5999999999999996 },
-  { 1.0000000000000000, 0, -5.5000000000000000 },
-  { 1.0000000000000000, 0, -5.4000000000000004 },
-  { 1.0000000000000000, 0, -5.2999999999999998 },
-  { 1.0000000000000000, 0, -5.2000000000000002 },
-  { 1.0000000000000000, 0, -5.0999999999999996 },
-  { 1.0000000000000000, 0, -5.0000000000000000 },
-  { 1.0000000000000000, 0, -4.9000000000000004 },
-  { 1.0000000000000000, 0, -4.7999999999999998 },
-  { 1.0000000000000000, 0, -4.7000000000000002 },
-  { 1.0000000000000000, 0, -4.5999999999999996 },
-  { 1.0000000000000000, 0, -4.5000000000000000 },
-  { 1.0000000000000000, 0, -4.4000000000000004 },
-  { 1.0000000000000000, 0, -4.2999999999999998 },
-  { 1.0000000000000000, 0, -4.2000000000000002 },
-  { 1.0000000000000000, 0, -4.0999999999999996 },
-  { 1.0000000000000000, 0, -4.0000000000000000 },
-  { 1.0000000000000000, 0, -3.9000000000000004 },
-  { 1.0000000000000000, 0, -3.7999999999999998 },
-  { 1.0000000000000000, 0, -3.7000000000000002 },
-  { 1.0000000000000000, 0, -3.5999999999999996 },
-  { 1.0000000000000000, 0, -3.5000000000000000 },
-  { 1.0000000000000000, 0, -3.4000000000000004 },
-  { 1.0000000000000000, 0, -3.2999999999999998 },
-  { 1.0000000000000000, 0, -3.2000000000000002 },
-  { 1.0000000000000000, 0, -3.0999999999999996 },
-  { 1.0000000000000000, 0, -3.0000000000000000 },
-  { 1.0000000000000000, 0, -2.9000000000000004 },
-  { 1.0000000000000000, 0, -2.7999999999999998 },
-  { 1.0000000000000000, 0, -2.7000000000000002 },
-  { 1.0000000000000000, 0, -2.5999999999999996 },
-  { 1.0000000000000000, 0, -2.5000000000000000 },
-  { 1.0000000000000000, 0, -2.4000000000000004 },
-  { 1.0000000000000000, 0, -2.2999999999999998 },
-  { 1.0000000000000000, 0, -2.2000000000000002 },
-  { 1.0000000000000000, 0, -2.0999999999999996 },
-  { 1.0000000000000000, 0, -2.0000000000000000 },
-  { 1.0000000000000000, 0, -1.9000000000000004 },
-  { 1.0000000000000000, 0, -1.8000000000000007 },
-  { 1.0000000000000000, 0, -1.6999999999999993 },
-  { 1.0000000000000000, 0, -1.5999999999999996 },
-  { 1.0000000000000000, 0, -1.5000000000000000 },
-  { 1.0000000000000000, 0, -1.4000000000000004 },
-  { 1.0000000000000000, 0, -1.3000000000000007 },
-  { 1.0000000000000000, 0, -1.1999999999999993 },
-  { 1.0000000000000000, 0, -1.0999999999999996 },
-  { 1.0000000000000000, 0, -1.0000000000000000 },
-  { 1.0000000000000000, 0, -0.90000000000000036 },
-  { 1.0000000000000000, 0, -0.80000000000000071 },
-  { 1.0000000000000000, 0, -0.69999999999999929 },
-  { 1.0000000000000000, 0, -0.59999999999999964 },
-  { 1.0000000000000000, 0, -0.50000000000000000 },
-  { 1.0000000000000000, 0, -0.40000000000000036 },
-  { 1.0000000000000000, 0, -0.30000000000000071 },
-  { 1.0000000000000000, 0, -0.19999999999999929 },
-  { 1.0000000000000000, 0, -0.099999999999999645 },
-  { 1.0000000000000000, 0, 0.0000000000000000 },
-  { 1.0000000000000000, 0, 0.099999999999999645 },
-  { 1.0000000000000000, 0, 0.19999999999999929 },
-  { 1.0000000000000000, 0, 0.30000000000000071 },
-  { 1.0000000000000000, 0, 0.40000000000000036 },
-  { 1.0000000000000000, 0, 0.50000000000000000 },
-  { 1.0000000000000000, 0, 0.59999999999999964 },
-  { 1.0000000000000000, 0, 0.69999999999999929 },
-  { 1.0000000000000000, 0, 0.80000000000000071 },
-  { 1.0000000000000000, 0, 0.90000000000000036 },
-  { 1.0000000000000000, 0, 1.0000000000000000 },
-  { 1.0000000000000000, 0, 1.0999999999999996 },
-  { 1.0000000000000000, 0, 1.1999999999999993 },
-  { 1.0000000000000000, 0, 1.3000000000000007 },
-  { 1.0000000000000000, 0, 1.4000000000000004 },
-  { 1.0000000000000000, 0, 1.5000000000000000 },
-  { 1.0000000000000000, 0, 1.5999999999999996 },
-  { 1.0000000000000000, 0, 1.6999999999999993 },
-  { 1.0000000000000000, 0, 1.8000000000000007 },
-  { 1.0000000000000000, 0, 1.9000000000000004 },
-  { 1.0000000000000000, 0, 2.0000000000000000 },
-  { 1.0000000000000000, 0, 2.0999999999999996 },
-  { 1.0000000000000000, 0, 2.1999999999999993 },
-  { 1.0000000000000000, 0, 2.3000000000000007 },
-  { 1.0000000000000000, 0, 2.4000000000000004 },
-  { 1.0000000000000000, 0, 2.5000000000000000 },
-  { 1.0000000000000000, 0, 2.5999999999999996 },
-  { 1.0000000000000000, 0, 2.6999999999999993 },
-  { 1.0000000000000000, 0, 2.8000000000000007 },
-  { 1.0000000000000000, 0, 2.9000000000000004 },
-  { 1.0000000000000000, 0, 3.0000000000000000 },
-  { 1.0000000000000000, 0, 3.0999999999999996 },
-  { 1.0000000000000000, 0, 3.1999999999999993 },
-  { 1.0000000000000000, 0, 3.3000000000000007 },
-  { 1.0000000000000000, 0, 3.4000000000000004 },
-  { 1.0000000000000000, 0, 3.5000000000000000 },
-  { 1.0000000000000000, 0, 3.5999999999999996 },
-  { 1.0000000000000000, 0, 3.6999999999999993 },
-  { 1.0000000000000000, 0, 3.8000000000000007 },
-  { 1.0000000000000000, 0, 3.9000000000000004 },
-  { 1.0000000000000000, 0, 4.0000000000000000 },
-  { 1.0000000000000000, 0, 4.0999999999999996 },
-  { 1.0000000000000000, 0, 4.1999999999999993 },
-  { 1.0000000000000000, 0, 4.3000000000000007 },
-  { 1.0000000000000000, 0, 4.4000000000000004 },
-  { 1.0000000000000000, 0, 4.5000000000000000 },
-  { 1.0000000000000000, 0, 4.5999999999999996 },
-  { 1.0000000000000000, 0, 4.6999999999999993 },
-  { 1.0000000000000000, 0, 4.8000000000000007 },
-  { 1.0000000000000000, 0, 4.9000000000000004 },
-  { 1.0000000000000000, 0, 5.0000000000000000 },
-  { 1.0000000000000000, 0, 5.0999999999999996 },
-  { 1.0000000000000000, 0, 5.1999999999999993 },
-  { 1.0000000000000000, 0, 5.3000000000000007 },
-  { 1.0000000000000000, 0, 5.4000000000000004 },
-  { 1.0000000000000000, 0, 5.5000000000000000 },
-  { 1.0000000000000000, 0, 5.5999999999999996 },
-  { 1.0000000000000000, 0, 5.6999999999999993 },
-  { 1.0000000000000000, 0, 5.8000000000000007 },
-  { 1.0000000000000000, 0, 5.9000000000000004 },
-  { 1.0000000000000000, 0, 6.0000000000000000 },
-  { 1.0000000000000000, 0, 6.1000000000000014 },
-  { 1.0000000000000000, 0, 6.1999999999999993 },
-  { 1.0000000000000000, 0, 6.3000000000000007 },
-  { 1.0000000000000000, 0, 6.3999999999999986 },
-  { 1.0000000000000000, 0, 6.5000000000000000 },
-  { 1.0000000000000000, 0, 6.6000000000000014 },
-  { 1.0000000000000000, 0, 6.6999999999999993 },
-  { 1.0000000000000000, 0, 6.8000000000000007 },
-  { 1.0000000000000000, 0, 6.8999999999999986 },
-  { 1.0000000000000000, 0, 7.0000000000000000 },
-  { 1.0000000000000000, 0, 7.1000000000000014 },
-  { 1.0000000000000000, 0, 7.1999999999999993 },
-  { 1.0000000000000000, 0, 7.3000000000000007 },
-  { 1.0000000000000000, 0, 7.3999999999999986 },
-  { 1.0000000000000000, 0, 7.5000000000000000 },
-  { 1.0000000000000000, 0, 7.6000000000000014 },
-  { 1.0000000000000000, 0, 7.6999999999999993 },
-  { 1.0000000000000000, 0, 7.8000000000000007 },
-  { 1.0000000000000000, 0, 7.8999999999999986 },
-  { 1.0000000000000000, 0, 8.0000000000000000 },
-  { 1.0000000000000000, 0, 8.1000000000000014 },
-  { 1.0000000000000000, 0, 8.1999999999999993 },
-  { 1.0000000000000000, 0, 8.3000000000000007 },
-  { 1.0000000000000000, 0, 8.3999999999999986 },
-  { 1.0000000000000000, 0, 8.5000000000000000 },
-  { 1.0000000000000000, 0, 8.6000000000000014 },
-  { 1.0000000000000000, 0, 8.6999999999999993 },
-  { 1.0000000000000000, 0, 8.8000000000000007 },
-  { 1.0000000000000000, 0, 8.8999999999999986 },
-  { 1.0000000000000000, 0, 9.0000000000000000 },
-  { 1.0000000000000000, 0, 9.1000000000000014 },
-  { 1.0000000000000000, 0, 9.1999999999999993 },
-  { 1.0000000000000000, 0, 9.3000000000000007 },
-  { 1.0000000000000000, 0, 9.3999999999999986 },
-  { 1.0000000000000000, 0, 9.5000000000000000 },
-  { 1.0000000000000000, 0, 9.6000000000000014 },
-  { 1.0000000000000000, 0, 9.6999999999999993 },
-  { 1.0000000000000000, 0, 9.8000000000000007 },
-  { 1.0000000000000000, 0, 9.8999999999999986 },
-  { 1.0000000000000000, 0, 10.000000000000000 },
+  { 1.0000000000000000, 0, -10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -9.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -9.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, -9.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -9.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -9.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -9.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -9.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, -9.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -9.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -8.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -8.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, -8.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -8.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -8.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -8.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -8.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, -8.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -8.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -7.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -7.7999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -7.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -7.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -7.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -7.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -7.2999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -7.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -7.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -6.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -6.7999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -6.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -6.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -6.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -6.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -6.2999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -6.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -6.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -5.8999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -5.7999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -5.7000000000000002, 0.0 },
+  { 1.0000000000000000, 0, -5.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -5.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -5.3999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -5.2999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -5.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -5.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -4.8999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -4.7999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -4.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -4.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -4.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -4.3999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -4.2999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -4.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -4.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -3.8999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -3.7999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -3.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -3.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -3.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -3.3999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -3.2999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -3.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -3.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -2.8999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -2.7999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -2.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -2.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -2.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -2.3999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -2.2999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -2.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -2.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -1.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -1.7999999999999989, 0.0 },
+  { 1.0000000000000000, 0, -1.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -1.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -1.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -1.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -1.2999999999999989, 0.0 },
+  { 1.0000000000000000, 0, -1.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -1.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -0.90000000000000036, 0.0 },
+  { 1.0000000000000000, 0, -0.79999999999999893, 0.0 },
+  { 1.0000000000000000, 0, -0.69999999999999929, 0.0 },
+  { 1.0000000000000000, 0, -0.59999999999999964, 0.0 },
+  { 1.0000000000000000, 0, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -0.39999999999999858, 0.0 },
+  { 1.0000000000000000, 0, -0.29999999999999893, 0.0 },
+  { 1.0000000000000000, 0, -0.19999999999999929, 0.0 },
+  { 1.0000000000000000, 0, -0.099999999999999645, 0.0 },
+  { 1.0000000000000000, 0, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0.10000000000000142, 0.0 },
+  { 1.0000000000000000, 0, 0.20000000000000107, 0.0 },
+  { 1.0000000000000000, 0, 0.30000000000000071, 0.0 },
+  { 1.0000000000000000, 0, 0.40000000000000036, 0.0 },
+  { 1.0000000000000000, 0, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0.60000000000000142, 0.0 },
+  { 1.0000000000000000, 0, 0.70000000000000107, 0.0 },
+  { 1.0000000000000000, 0, 0.80000000000000071, 0.0 },
+  { 1.0000000000000000, 0, 0.90000000000000036, 0.0 },
+  { 1.0000000000000000, 0, 1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 1.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 1.2000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 1.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 1.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 1.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 1.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 1.7000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 1.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 1.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 2.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 2.2000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 2.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 2.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 2.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 2.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 2.7000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 2.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 2.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 3.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 3.2000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 3.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 3.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 3.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 3.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 3.7000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 3.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 3.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 4.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 4.2000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 4.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 4.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 4.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 4.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 4.7000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 4.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 4.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 5.2000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 5.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 5.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 5.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 5.7000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 5.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 5.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 6.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 6.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, 6.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 6.4000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 6.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 6.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 6.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, 6.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 6.9000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 7.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 7.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, 7.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 7.4000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 7.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 7.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 7.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, 7.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 7.9000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 8.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 8.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, 8.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 8.4000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 8.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 8.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 8.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, 8.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 8.9000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 9.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 9.2000000000000028, 0.0 },
+  { 1.0000000000000000, 0, 9.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 9.4000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 9.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 9.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 9.7000000000000028, 0.0 },
+  { 1.0000000000000000, 0, 9.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 9.9000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 10.000000000000000, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
 // Test data for n=1.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hermite<double>
 data002[201] =
 {
-  { -20.000000000000000, 1, -10.000000000000000 },
-  { -19.800000000000001, 1, -9.9000000000000004 },
-  { -19.600000000000001, 1, -9.8000000000000007 },
-  { -19.399999999999999, 1, -9.6999999999999993 },
-  { -19.199999999999999, 1, -9.5999999999999996 },
-  { -19.000000000000000, 1, -9.5000000000000000 },
-  { -18.800000000000001, 1, -9.4000000000000004 },
-  { -18.600000000000001, 1, -9.3000000000000007 },
-  { -18.399999999999999, 1, -9.1999999999999993 },
-  { -18.199999999999999, 1, -9.0999999999999996 },
-  { -18.000000000000000, 1, -9.0000000000000000 },
-  { -17.800000000000001, 1, -8.9000000000000004 },
-  { -17.600000000000001, 1, -8.8000000000000007 },
-  { -17.399999999999999, 1, -8.6999999999999993 },
-  { -17.199999999999999, 1, -8.5999999999999996 },
-  { -17.000000000000000, 1, -8.5000000000000000 },
-  { -16.800000000000001, 1, -8.4000000000000004 },
-  { -16.600000000000001, 1, -8.3000000000000007 },
-  { -16.399999999999999, 1, -8.1999999999999993 },
-  { -16.199999999999999, 1, -8.0999999999999996 },
-  { -16.000000000000000, 1, -8.0000000000000000 },
-  { -15.800000000000001, 1, -7.9000000000000004 },
-  { -15.600000000000000, 1, -7.7999999999999998 },
-  { -15.400000000000000, 1, -7.7000000000000002 },
-  { -15.199999999999999, 1, -7.5999999999999996 },
-  { -15.000000000000000, 1, -7.5000000000000000 },
-  { -14.800000000000001, 1, -7.4000000000000004 },
-  { -14.600000000000000, 1, -7.2999999999999998 },
-  { -14.400000000000000, 1, -7.2000000000000002 },
-  { -14.199999999999999, 1, -7.0999999999999996 },
-  { -14.000000000000000, 1, -7.0000000000000000 },
-  { -13.800000000000001, 1, -6.9000000000000004 },
-  { -13.600000000000000, 1, -6.7999999999999998 },
-  { -13.400000000000000, 1, -6.7000000000000002 },
-  { -13.199999999999999, 1, -6.5999999999999996 },
-  { -13.000000000000000, 1, -6.5000000000000000 },
-  { -12.800000000000001, 1, -6.4000000000000004 },
-  { -12.600000000000000, 1, -6.2999999999999998 },
-  { -12.400000000000000, 1, -6.2000000000000002 },
-  { -12.199999999999999, 1, -6.0999999999999996 },
-  { -12.000000000000000, 1, -6.0000000000000000 },
-  { -11.800000000000001, 1, -5.9000000000000004 },
-  { -11.600000000000000, 1, -5.7999999999999998 },
-  { -11.400000000000000, 1, -5.7000000000000002 },
-  { -11.199999999999999, 1, -5.5999999999999996 },
-  { -11.000000000000000, 1, -5.5000000000000000 },
-  { -10.800000000000001, 1, -5.4000000000000004 },
-  { -10.600000000000000, 1, -5.2999999999999998 },
-  { -10.400000000000000, 1, -5.2000000000000002 },
-  { -10.199999999999999, 1, -5.0999999999999996 },
-  { -10.000000000000000, 1, -5.0000000000000000 },
-  { -9.8000000000000007, 1, -4.9000000000000004 },
-  { -9.5999999999999996, 1, -4.7999999999999998 },
-  { -9.4000000000000004, 1, -4.7000000000000002 },
-  { -9.1999999999999993, 1, -4.5999999999999996 },
-  { -9.0000000000000000, 1, -4.5000000000000000 },
-  { -8.8000000000000007, 1, -4.4000000000000004 },
-  { -8.5999999999999996, 1, -4.2999999999999998 },
-  { -8.4000000000000004, 1, -4.2000000000000002 },
-  { -8.1999999999999993, 1, -4.0999999999999996 },
-  { -8.0000000000000000, 1, -4.0000000000000000 },
-  { -7.8000000000000007, 1, -3.9000000000000004 },
-  { -7.5999999999999996, 1, -3.7999999999999998 },
-  { -7.4000000000000004, 1, -3.7000000000000002 },
-  { -7.1999999999999993, 1, -3.5999999999999996 },
-  { -7.0000000000000000, 1, -3.5000000000000000 },
-  { -6.8000000000000007, 1, -3.4000000000000004 },
-  { -6.5999999999999996, 1, -3.2999999999999998 },
-  { -6.4000000000000004, 1, -3.2000000000000002 },
-  { -6.1999999999999993, 1, -3.0999999999999996 },
-  { -6.0000000000000000, 1, -3.0000000000000000 },
-  { -5.8000000000000007, 1, -2.9000000000000004 },
-  { -5.5999999999999996, 1, -2.7999999999999998 },
-  { -5.4000000000000004, 1, -2.7000000000000002 },
-  { -5.1999999999999993, 1, -2.5999999999999996 },
-  { -5.0000000000000000, 1, -2.5000000000000000 },
-  { -4.8000000000000007, 1, -2.4000000000000004 },
-  { -4.5999999999999996, 1, -2.2999999999999998 },
-  { -4.4000000000000004, 1, -2.2000000000000002 },
-  { -4.1999999999999993, 1, -2.0999999999999996 },
-  { -4.0000000000000000, 1, -2.0000000000000000 },
-  { -3.8000000000000007, 1, -1.9000000000000004 },
-  { -3.6000000000000014, 1, -1.8000000000000007 },
-  { -3.3999999999999986, 1, -1.6999999999999993 },
-  { -3.1999999999999993, 1, -1.5999999999999996 },
-  { -3.0000000000000000, 1, -1.5000000000000000 },
-  { -2.8000000000000007, 1, -1.4000000000000004 },
-  { -2.6000000000000014, 1, -1.3000000000000007 },
-  { -2.3999999999999986, 1, -1.1999999999999993 },
-  { -2.1999999999999993, 1, -1.0999999999999996 },
-  { -2.0000000000000000, 1, -1.0000000000000000 },
-  { -1.8000000000000007, 1, -0.90000000000000036 },
-  { -1.6000000000000014, 1, -0.80000000000000071 },
-  { -1.3999999999999986, 1, -0.69999999999999929 },
-  { -1.1999999999999993, 1, -0.59999999999999964 },
-  { -1.0000000000000000, 1, -0.50000000000000000 },
-  { -0.80000000000000071, 1, -0.40000000000000036 },
-  { -0.60000000000000142, 1, -0.30000000000000071 },
-  { -0.39999999999999858, 1, -0.19999999999999929 },
-  { -0.19999999999999929, 1, -0.099999999999999645 },
-  { 0.0000000000000000, 1, 0.0000000000000000 },
-  { 0.19999999999999929, 1, 0.099999999999999645 },
-  { 0.39999999999999858, 1, 0.19999999999999929 },
-  { 0.60000000000000142, 1, 0.30000000000000071 },
-  { 0.80000000000000071, 1, 0.40000000000000036 },
-  { 1.0000000000000000, 1, 0.50000000000000000 },
-  { 1.1999999999999993, 1, 0.59999999999999964 },
-  { 1.3999999999999986, 1, 0.69999999999999929 },
-  { 1.6000000000000014, 1, 0.80000000000000071 },
-  { 1.8000000000000007, 1, 0.90000000000000036 },
-  { 2.0000000000000000, 1, 1.0000000000000000 },
-  { 2.1999999999999993, 1, 1.0999999999999996 },
-  { 2.3999999999999986, 1, 1.1999999999999993 },
-  { 2.6000000000000014, 1, 1.3000000000000007 },
-  { 2.8000000000000007, 1, 1.4000000000000004 },
-  { 3.0000000000000000, 1, 1.5000000000000000 },
-  { 3.1999999999999993, 1, 1.5999999999999996 },
-  { 3.3999999999999986, 1, 1.6999999999999993 },
-  { 3.6000000000000014, 1, 1.8000000000000007 },
-  { 3.8000000000000007, 1, 1.9000000000000004 },
-  { 4.0000000000000000, 1, 2.0000000000000000 },
-  { 4.1999999999999993, 1, 2.0999999999999996 },
-  { 4.3999999999999986, 1, 2.1999999999999993 },
-  { 4.6000000000000014, 1, 2.3000000000000007 },
-  { 4.8000000000000007, 1, 2.4000000000000004 },
-  { 5.0000000000000000, 1, 2.5000000000000000 },
-  { 5.1999999999999993, 1, 2.5999999999999996 },
-  { 5.3999999999999986, 1, 2.6999999999999993 },
-  { 5.6000000000000014, 1, 2.8000000000000007 },
-  { 5.8000000000000007, 1, 2.9000000000000004 },
-  { 6.0000000000000000, 1, 3.0000000000000000 },
-  { 6.1999999999999993, 1, 3.0999999999999996 },
-  { 6.3999999999999986, 1, 3.1999999999999993 },
-  { 6.6000000000000014, 1, 3.3000000000000007 },
-  { 6.8000000000000007, 1, 3.4000000000000004 },
-  { 7.0000000000000000, 1, 3.5000000000000000 },
-  { 7.1999999999999993, 1, 3.5999999999999996 },
-  { 7.3999999999999986, 1, 3.6999999999999993 },
-  { 7.6000000000000014, 1, 3.8000000000000007 },
-  { 7.8000000000000007, 1, 3.9000000000000004 },
-  { 8.0000000000000000, 1, 4.0000000000000000 },
-  { 8.1999999999999993, 1, 4.0999999999999996 },
-  { 8.3999999999999986, 1, 4.1999999999999993 },
-  { 8.6000000000000014, 1, 4.3000000000000007 },
-  { 8.8000000000000007, 1, 4.4000000000000004 },
-  { 9.0000000000000000, 1, 4.5000000000000000 },
-  { 9.1999999999999993, 1, 4.5999999999999996 },
-  { 9.3999999999999986, 1, 4.6999999999999993 },
-  { 9.6000000000000014, 1, 4.8000000000000007 },
-  { 9.8000000000000007, 1, 4.9000000000000004 },
-  { 10.000000000000000, 1, 5.0000000000000000 },
-  { 10.199999999999999, 1, 5.0999999999999996 },
-  { 10.399999999999999, 1, 5.1999999999999993 },
-  { 10.600000000000001, 1, 5.3000000000000007 },
-  { 10.800000000000001, 1, 5.4000000000000004 },
-  { 11.000000000000000, 1, 5.5000000000000000 },
-  { 11.199999999999999, 1, 5.5999999999999996 },
-  { 11.399999999999999, 1, 5.6999999999999993 },
-  { 11.600000000000001, 1, 5.8000000000000007 },
-  { 11.800000000000001, 1, 5.9000000000000004 },
-  { 12.000000000000000, 1, 6.0000000000000000 },
-  { 12.200000000000003, 1, 6.1000000000000014 },
-  { 12.399999999999999, 1, 6.1999999999999993 },
-  { 12.600000000000001, 1, 6.3000000000000007 },
-  { 12.799999999999997, 1, 6.3999999999999986 },
-  { 13.000000000000000, 1, 6.5000000000000000 },
-  { 13.200000000000003, 1, 6.6000000000000014 },
-  { 13.399999999999999, 1, 6.6999999999999993 },
-  { 13.600000000000001, 1, 6.8000000000000007 },
-  { 13.799999999999997, 1, 6.8999999999999986 },
-  { 14.000000000000000, 1, 7.0000000000000000 },
-  { 14.200000000000003, 1, 7.1000000000000014 },
-  { 14.399999999999999, 1, 7.1999999999999993 },
-  { 14.600000000000001, 1, 7.3000000000000007 },
-  { 14.799999999999997, 1, 7.3999999999999986 },
-  { 15.000000000000000, 1, 7.5000000000000000 },
-  { 15.200000000000003, 1, 7.6000000000000014 },
-  { 15.399999999999999, 1, 7.6999999999999993 },
-  { 15.600000000000001, 1, 7.8000000000000007 },
-  { 15.799999999999997, 1, 7.8999999999999986 },
-  { 16.000000000000000, 1, 8.0000000000000000 },
-  { 16.200000000000003, 1, 8.1000000000000014 },
-  { 16.399999999999999, 1, 8.1999999999999993 },
-  { 16.600000000000001, 1, 8.3000000000000007 },
-  { 16.799999999999997, 1, 8.3999999999999986 },
-  { 17.000000000000000, 1, 8.5000000000000000 },
-  { 17.200000000000003, 1, 8.6000000000000014 },
-  { 17.399999999999999, 1, 8.6999999999999993 },
-  { 17.600000000000001, 1, 8.8000000000000007 },
-  { 17.799999999999997, 1, 8.8999999999999986 },
-  { 18.000000000000000, 1, 9.0000000000000000 },
-  { 18.200000000000003, 1, 9.1000000000000014 },
-  { 18.399999999999999, 1, 9.1999999999999993 },
-  { 18.600000000000001, 1, 9.3000000000000007 },
-  { 18.799999999999997, 1, 9.3999999999999986 },
-  { 19.000000000000000, 1, 9.5000000000000000 },
-  { 19.200000000000003, 1, 9.6000000000000014 },
-  { 19.399999999999999, 1, 9.6999999999999993 },
-  { 19.600000000000001, 1, 9.8000000000000007 },
-  { 19.799999999999997, 1, 9.8999999999999986 },
-  { 20.000000000000000, 1, 10.000000000000000 },
+  { -20.000000000000000, 1, -10.000000000000000, 0.0 },
+  { -19.800000000000001, 1, -9.9000000000000004, 0.0 },
+  { -19.600000000000001, 1, -9.8000000000000007, 0.0 },
+  { -19.399999999999999, 1, -9.6999999999999993, 0.0 },
+  { -19.199999999999999, 1, -9.5999999999999996, 0.0 },
+  { -19.000000000000000, 1, -9.5000000000000000, 0.0 },
+  { -18.800000000000001, 1, -9.4000000000000004, 0.0 },
+  { -18.600000000000001, 1, -9.3000000000000007, 0.0 },
+  { -18.399999999999999, 1, -9.1999999999999993, 0.0 },
+  { -18.199999999999999, 1, -9.0999999999999996, 0.0 },
+  { -18.000000000000000, 1, -9.0000000000000000, 0.0 },
+  { -17.800000000000001, 1, -8.9000000000000004, 0.0 },
+  { -17.600000000000001, 1, -8.8000000000000007, 0.0 },
+  { -17.399999999999999, 1, -8.6999999999999993, 0.0 },
+  { -17.199999999999999, 1, -8.5999999999999996, 0.0 },
+  { -17.000000000000000, 1, -8.5000000000000000, 0.0 },
+  { -16.800000000000001, 1, -8.4000000000000004, 0.0 },
+  { -16.600000000000001, 1, -8.3000000000000007, 0.0 },
+  { -16.399999999999999, 1, -8.1999999999999993, 0.0 },
+  { -16.199999999999999, 1, -8.0999999999999996, 0.0 },
+  { -16.000000000000000, 1, -8.0000000000000000, 0.0 },
+  { -15.800000000000001, 1, -7.9000000000000004, 0.0 },
+  { -15.600000000000000, 1, -7.7999999999999998, 0.0 },
+  { -15.399999999999999, 1, -7.6999999999999993, 0.0 },
+  { -15.199999999999999, 1, -7.5999999999999996, 0.0 },
+  { -15.000000000000000, 1, -7.5000000000000000, 0.0 },
+  { -14.800000000000001, 1, -7.4000000000000004, 0.0 },
+  { -14.600000000000000, 1, -7.2999999999999998, 0.0 },
+  { -14.399999999999999, 1, -7.1999999999999993, 0.0 },
+  { -14.199999999999999, 1, -7.0999999999999996, 0.0 },
+  { -14.000000000000000, 1, -7.0000000000000000, 0.0 },
+  { -13.800000000000001, 1, -6.9000000000000004, 0.0 },
+  { -13.600000000000000, 1, -6.7999999999999998, 0.0 },
+  { -13.399999999999999, 1, -6.6999999999999993, 0.0 },
+  { -13.199999999999999, 1, -6.5999999999999996, 0.0 },
+  { -13.000000000000000, 1, -6.5000000000000000, 0.0 },
+  { -12.800000000000001, 1, -6.4000000000000004, 0.0 },
+  { -12.600000000000000, 1, -6.2999999999999998, 0.0 },
+  { -12.399999999999999, 1, -6.1999999999999993, 0.0 },
+  { -12.199999999999999, 1, -6.0999999999999996, 0.0 },
+  { -12.000000000000000, 1, -6.0000000000000000, 0.0 },
+  { -11.799999999999999, 1, -5.8999999999999995, 0.0 },
+  { -11.600000000000000, 1, -5.7999999999999998, 0.0 },
+  { -11.400000000000000, 1, -5.7000000000000002, 0.0 },
+  { -11.199999999999999, 1, -5.5999999999999996, 0.0 },
+  { -11.000000000000000, 1, -5.5000000000000000, 0.0 },
+  { -10.799999999999999, 1, -5.3999999999999995, 0.0 },
+  { -10.600000000000000, 1, -5.2999999999999998, 0.0 },
+  { -10.399999999999999, 1, -5.1999999999999993, 0.0 },
+  { -10.199999999999999, 1, -5.0999999999999996, 0.0 },
+  { -10.000000000000000, 1, -5.0000000000000000, 0.0 },
+  { -9.7999999999999989, 1, -4.8999999999999995, 0.0 },
+  { -9.5999999999999996, 1, -4.7999999999999998, 0.0 },
+  { -9.3999999999999986, 1, -4.6999999999999993, 0.0 },
+  { -9.1999999999999993, 1, -4.5999999999999996, 0.0 },
+  { -9.0000000000000000, 1, -4.5000000000000000, 0.0 },
+  { -8.7999999999999989, 1, -4.3999999999999995, 0.0 },
+  { -8.5999999999999996, 1, -4.2999999999999998, 0.0 },
+  { -8.3999999999999986, 1, -4.1999999999999993, 0.0 },
+  { -8.1999999999999993, 1, -4.0999999999999996, 0.0 },
+  { -8.0000000000000000, 1, -4.0000000000000000, 0.0 },
+  { -7.7999999999999989, 1, -3.8999999999999995, 0.0 },
+  { -7.5999999999999996, 1, -3.7999999999999998, 0.0 },
+  { -7.3999999999999986, 1, -3.6999999999999993, 0.0 },
+  { -7.1999999999999993, 1, -3.5999999999999996, 0.0 },
+  { -7.0000000000000000, 1, -3.5000000000000000, 0.0 },
+  { -6.7999999999999989, 1, -3.3999999999999995, 0.0 },
+  { -6.5999999999999996, 1, -3.2999999999999998, 0.0 },
+  { -6.3999999999999986, 1, -3.1999999999999993, 0.0 },
+  { -6.1999999999999993, 1, -3.0999999999999996, 0.0 },
+  { -6.0000000000000000, 1, -3.0000000000000000, 0.0 },
+  { -5.7999999999999989, 1, -2.8999999999999995, 0.0 },
+  { -5.5999999999999996, 1, -2.7999999999999998, 0.0 },
+  { -5.3999999999999986, 1, -2.6999999999999993, 0.0 },
+  { -5.1999999999999993, 1, -2.5999999999999996, 0.0 },
+  { -5.0000000000000000, 1, -2.5000000000000000, 0.0 },
+  { -4.7999999999999989, 1, -2.3999999999999995, 0.0 },
+  { -4.5999999999999996, 1, -2.2999999999999998, 0.0 },
+  { -4.3999999999999986, 1, -2.1999999999999993, 0.0 },
+  { -4.1999999999999993, 1, -2.0999999999999996, 0.0 },
+  { -4.0000000000000000, 1, -2.0000000000000000, 0.0 },
+  { -3.8000000000000007, 1, -1.9000000000000004, 0.0 },
+  { -3.5999999999999979, 1, -1.7999999999999989, 0.0 },
+  { -3.3999999999999986, 1, -1.6999999999999993, 0.0 },
+  { -3.1999999999999993, 1, -1.5999999999999996, 0.0 },
+  { -3.0000000000000000, 1, -1.5000000000000000, 0.0 },
+  { -2.8000000000000007, 1, -1.4000000000000004, 0.0 },
+  { -2.5999999999999979, 1, -1.2999999999999989, 0.0 },
+  { -2.3999999999999986, 1, -1.1999999999999993, 0.0 },
+  { -2.1999999999999993, 1, -1.0999999999999996, 0.0 },
+  { -2.0000000000000000, 1, -1.0000000000000000, 0.0 },
+  { -1.8000000000000007, 1, -0.90000000000000036, 0.0 },
+  { -1.5999999999999979, 1, -0.79999999999999893, 0.0 },
+  { -1.3999999999999986, 1, -0.69999999999999929, 0.0 },
+  { -1.1999999999999993, 1, -0.59999999999999964, 0.0 },
+  { -1.0000000000000000, 1, -0.50000000000000000, 0.0 },
+  { -0.79999999999999716, 1, -0.39999999999999858, 0.0 },
+  { -0.59999999999999787, 1, -0.29999999999999893, 0.0 },
+  { -0.39999999999999858, 1, -0.19999999999999929, 0.0 },
+  { -0.19999999999999929, 1, -0.099999999999999645, 0.0 },
+  { 0.0000000000000000, 1, 0.0000000000000000, 0.0 },
+  { 0.20000000000000284, 1, 0.10000000000000142, 0.0 },
+  { 0.40000000000000213, 1, 0.20000000000000107, 0.0 },
+  { 0.60000000000000142, 1, 0.30000000000000071, 0.0 },
+  { 0.80000000000000071, 1, 0.40000000000000036, 0.0 },
+  { 1.0000000000000000, 1, 0.50000000000000000, 0.0 },
+  { 1.2000000000000028, 1, 0.60000000000000142, 0.0 },
+  { 1.4000000000000021, 1, 0.70000000000000107, 0.0 },
+  { 1.6000000000000014, 1, 0.80000000000000071, 0.0 },
+  { 1.8000000000000007, 1, 0.90000000000000036, 0.0 },
+  { 2.0000000000000000, 1, 1.0000000000000000, 0.0 },
+  { 2.2000000000000028, 1, 1.1000000000000014, 0.0 },
+  { 2.4000000000000021, 1, 1.2000000000000011, 0.0 },
+  { 2.6000000000000014, 1, 1.3000000000000007, 0.0 },
+  { 2.8000000000000007, 1, 1.4000000000000004, 0.0 },
+  { 3.0000000000000000, 1, 1.5000000000000000, 0.0 },
+  { 3.2000000000000028, 1, 1.6000000000000014, 0.0 },
+  { 3.4000000000000021, 1, 1.7000000000000011, 0.0 },
+  { 3.6000000000000014, 1, 1.8000000000000007, 0.0 },
+  { 3.8000000000000007, 1, 1.9000000000000004, 0.0 },
+  { 4.0000000000000000, 1, 2.0000000000000000, 0.0 },
+  { 4.2000000000000028, 1, 2.1000000000000014, 0.0 },
+  { 4.4000000000000021, 1, 2.2000000000000011, 0.0 },
+  { 4.6000000000000014, 1, 2.3000000000000007, 0.0 },
+  { 4.8000000000000007, 1, 2.4000000000000004, 0.0 },
+  { 5.0000000000000000, 1, 2.5000000000000000, 0.0 },
+  { 5.2000000000000028, 1, 2.6000000000000014, 0.0 },
+  { 5.4000000000000021, 1, 2.7000000000000011, 0.0 },
+  { 5.6000000000000014, 1, 2.8000000000000007, 0.0 },
+  { 5.8000000000000007, 1, 2.9000000000000004, 0.0 },
+  { 6.0000000000000000, 1, 3.0000000000000000, 0.0 },
+  { 6.2000000000000028, 1, 3.1000000000000014, 0.0 },
+  { 6.4000000000000021, 1, 3.2000000000000011, 0.0 },
+  { 6.6000000000000014, 1, 3.3000000000000007, 0.0 },
+  { 6.8000000000000007, 1, 3.4000000000000004, 0.0 },
+  { 7.0000000000000000, 1, 3.5000000000000000, 0.0 },
+  { 7.2000000000000028, 1, 3.6000000000000014, 0.0 },
+  { 7.4000000000000021, 1, 3.7000000000000011, 0.0 },
+  { 7.6000000000000014, 1, 3.8000000000000007, 0.0 },
+  { 7.8000000000000007, 1, 3.9000000000000004, 0.0 },
+  { 8.0000000000000000, 1, 4.0000000000000000, 0.0 },
+  { 8.2000000000000028, 1, 4.1000000000000014, 0.0 },
+  { 8.4000000000000021, 1, 4.2000000000000011, 0.0 },
+  { 8.6000000000000014, 1, 4.3000000000000007, 0.0 },
+  { 8.8000000000000007, 1, 4.4000000000000004, 0.0 },
+  { 9.0000000000000000, 1, 4.5000000000000000, 0.0 },
+  { 9.2000000000000028, 1, 4.6000000000000014, 0.0 },
+  { 9.4000000000000021, 1, 4.7000000000000011, 0.0 },
+  { 9.6000000000000014, 1, 4.8000000000000007, 0.0 },
+  { 9.8000000000000007, 1, 4.9000000000000004, 0.0 },
+  { 10.000000000000000, 1, 5.0000000000000000, 0.0 },
+  { 10.200000000000003, 1, 5.1000000000000014, 0.0 },
+  { 10.400000000000002, 1, 5.2000000000000011, 0.0 },
+  { 10.600000000000001, 1, 5.3000000000000007, 0.0 },
+  { 10.800000000000001, 1, 5.4000000000000004, 0.0 },
+  { 11.000000000000000, 1, 5.5000000000000000, 0.0 },
+  { 11.200000000000003, 1, 5.6000000000000014, 0.0 },
+  { 11.400000000000002, 1, 5.7000000000000011, 0.0 },
+  { 11.600000000000001, 1, 5.8000000000000007, 0.0 },
+  { 11.800000000000001, 1, 5.9000000000000004, 0.0 },
+  { 12.000000000000000, 1, 6.0000000000000000, 0.0 },
+  { 12.200000000000003, 1, 6.1000000000000014, 0.0 },
+  { 12.399999999999999, 1, 6.1999999999999993, 0.0 },
+  { 12.600000000000001, 1, 6.3000000000000007, 0.0 },
+  { 12.800000000000004, 1, 6.4000000000000021, 0.0 },
+  { 13.000000000000000, 1, 6.5000000000000000, 0.0 },
+  { 13.200000000000003, 1, 6.6000000000000014, 0.0 },
+  { 13.399999999999999, 1, 6.6999999999999993, 0.0 },
+  { 13.600000000000001, 1, 6.8000000000000007, 0.0 },
+  { 13.800000000000004, 1, 6.9000000000000021, 0.0 },
+  { 14.000000000000000, 1, 7.0000000000000000, 0.0 },
+  { 14.200000000000003, 1, 7.1000000000000014, 0.0 },
+  { 14.399999999999999, 1, 7.1999999999999993, 0.0 },
+  { 14.600000000000001, 1, 7.3000000000000007, 0.0 },
+  { 14.800000000000004, 1, 7.4000000000000021, 0.0 },
+  { 15.000000000000000, 1, 7.5000000000000000, 0.0 },
+  { 15.200000000000003, 1, 7.6000000000000014, 0.0 },
+  { 15.399999999999999, 1, 7.6999999999999993, 0.0 },
+  { 15.600000000000001, 1, 7.8000000000000007, 0.0 },
+  { 15.800000000000004, 1, 7.9000000000000021, 0.0 },
+  { 16.000000000000000, 1, 8.0000000000000000, 0.0 },
+  { 16.200000000000003, 1, 8.1000000000000014, 0.0 },
+  { 16.399999999999999, 1, 8.1999999999999993, 0.0 },
+  { 16.600000000000001, 1, 8.3000000000000007, 0.0 },
+  { 16.800000000000004, 1, 8.4000000000000021, 0.0 },
+  { 17.000000000000000, 1, 8.5000000000000000, 0.0 },
+  { 17.200000000000003, 1, 8.6000000000000014, 0.0 },
+  { 17.399999999999999, 1, 8.6999999999999993, 0.0 },
+  { 17.600000000000001, 1, 8.8000000000000007, 0.0 },
+  { 17.800000000000004, 1, 8.9000000000000021, 0.0 },
+  { 18.000000000000000, 1, 9.0000000000000000, 0.0 },
+  { 18.200000000000003, 1, 9.1000000000000014, 0.0 },
+  { 18.400000000000006, 1, 9.2000000000000028, 0.0 },
+  { 18.600000000000001, 1, 9.3000000000000007, 0.0 },
+  { 18.800000000000004, 1, 9.4000000000000021, 0.0 },
+  { 19.000000000000000, 1, 9.5000000000000000, 0.0 },
+  { 19.200000000000003, 1, 9.6000000000000014, 0.0 },
+  { 19.400000000000006, 1, 9.7000000000000028, 0.0 },
+  { 19.600000000000001, 1, 9.8000000000000007, 0.0 },
+  { 19.800000000000004, 1, 9.9000000000000021, 0.0 },
+  { 20.000000000000000, 1, 10.000000000000000, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
 // Test data for n=2.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hermite<double>
 data003[201] =
 {
-  { 398.00000000000000, 2, -10.000000000000000 },
-  { 390.04000000000002, 2, -9.9000000000000004 },
-  { 382.16000000000008, 2, -9.8000000000000007 },
-  { 374.35999999999996, 2, -9.6999999999999993 },
-  { 366.63999999999999, 2, -9.5999999999999996 },
-  { 359.00000000000000, 2, -9.5000000000000000 },
-  { 351.44000000000005, 2, -9.4000000000000004 },
-  { 343.96000000000004, 2, -9.3000000000000007 },
-  { 336.55999999999995, 2, -9.1999999999999993 },
-  { 329.23999999999995, 2, -9.0999999999999996 },
-  { 322.00000000000000, 2, -9.0000000000000000 },
-  { 314.84000000000003, 2, -8.9000000000000004 },
-  { 307.76000000000005, 2, -8.8000000000000007 },
-  { 300.75999999999993, 2, -8.6999999999999993 },
-  { 293.83999999999997, 2, -8.5999999999999996 },
-  { 287.00000000000000, 2, -8.5000000000000000 },
-  { 280.24000000000001, 2, -8.4000000000000004 },
-  { 273.56000000000006, 2, -8.3000000000000007 },
-  { 266.95999999999998, 2, -8.1999999999999993 },
-  { 260.44000000000000, 2, -8.0999999999999996 },
-  { 254.00000000000000, 2, -8.0000000000000000 },
-  { 247.64000000000001, 2, -7.9000000000000004 },
-  { 241.35999999999999, 2, -7.7999999999999998 },
-  { 235.16000000000003, 2, -7.7000000000000002 },
-  { 229.03999999999999, 2, -7.5999999999999996 },
-  { 223.00000000000000, 2, -7.5000000000000000 },
-  { 217.04000000000002, 2, -7.4000000000000004 },
-  { 211.16000000000000, 2, -7.2999999999999998 },
-  { 205.36000000000001, 2, -7.2000000000000002 },
-  { 199.63999999999999, 2, -7.0999999999999996 },
-  { 194.00000000000000, 2, -7.0000000000000000 },
-  { 188.44000000000003, 2, -6.9000000000000004 },
-  { 182.95999999999998, 2, -6.7999999999999998 },
-  { 177.56000000000000, 2, -6.7000000000000002 },
-  { 172.23999999999998, 2, -6.5999999999999996 },
-  { 167.00000000000000, 2, -6.5000000000000000 },
-  { 161.84000000000003, 2, -6.4000000000000004 },
-  { 156.75999999999999, 2, -6.2999999999999998 },
-  { 151.76000000000002, 2, -6.2000000000000002 },
-  { 146.83999999999997, 2, -6.0999999999999996 },
-  { 142.00000000000000, 2, -6.0000000000000000 },
-  { 137.24000000000001, 2, -5.9000000000000004 },
-  { 132.56000000000000, 2, -5.7999999999999998 },
-  { 127.96000000000001, 2, -5.7000000000000002 },
-  { 123.43999999999998, 2, -5.5999999999999996 },
-  { 119.00000000000000, 2, -5.5000000000000000 },
-  { 114.64000000000001, 2, -5.4000000000000004 },
-  { 110.36000000000000, 2, -5.2999999999999998 },
-  { 106.16000000000001, 2, -5.2000000000000002 },
-  { 102.03999999999999, 2, -5.0999999999999996 },
-  { 98.000000000000000, 2, -5.0000000000000000 },
-  { 94.040000000000020, 2, -4.9000000000000004 },
-  { 90.159999999999997, 2, -4.7999999999999998 },
-  { 86.360000000000014, 2, -4.7000000000000002 },
-  { 82.639999999999986, 2, -4.5999999999999996 },
-  { 79.000000000000000, 2, -4.5000000000000000 },
-  { 75.440000000000012, 2, -4.4000000000000004 },
-  { 71.959999999999994, 2, -4.2999999999999998 },
-  { 68.560000000000002, 2, -4.2000000000000002 },
-  { 65.239999999999995, 2, -4.0999999999999996 },
-  { 62.000000000000000, 2, -4.0000000000000000 },
-  { 58.840000000000011, 2, -3.9000000000000004 },
-  { 55.759999999999998, 2, -3.7999999999999998 },
-  { 52.760000000000005, 2, -3.7000000000000002 },
-  { 49.839999999999989, 2, -3.5999999999999996 },
-  { 47.000000000000000, 2, -3.5000000000000000 },
-  { 44.240000000000009, 2, -3.4000000000000004 },
-  { 41.559999999999995, 2, -3.2999999999999998 },
-  { 38.960000000000008, 2, -3.2000000000000002 },
-  { 36.439999999999991, 2, -3.0999999999999996 },
-  { 34.000000000000000, 2, -3.0000000000000000 },
-  { 31.640000000000008, 2, -2.9000000000000004 },
-  { 29.359999999999996, 2, -2.7999999999999998 },
-  { 27.160000000000004, 2, -2.7000000000000002 },
-  { 25.039999999999992, 2, -2.5999999999999996 },
-  { 23.000000000000000, 2, -2.5000000000000000 },
-  { 21.040000000000006, 2, -2.4000000000000004 },
-  { 19.159999999999997, 2, -2.2999999999999998 },
-  { 17.360000000000003, 2, -2.2000000000000002 },
-  { 15.639999999999993, 2, -2.0999999999999996 },
-  { 14.000000000000000, 2, -2.0000000000000000 },
-  { 12.440000000000005, 2, -1.9000000000000004 },
-  { 10.960000000000010, 2, -1.8000000000000007 },
-  { 9.5599999999999898, 2, -1.6999999999999993 },
-  { 8.2399999999999949, 2, -1.5999999999999996 },
-  { 7.0000000000000000, 2, -1.5000000000000000 },
-  { 5.8400000000000043, 2, -1.4000000000000004 },
-  { 4.7600000000000078, 2, -1.3000000000000007 },
-  { 3.7599999999999936, 2, -1.1999999999999993 },
-  { 2.8399999999999972, 2, -1.0999999999999996 },
-  { 2.0000000000000000, 2, -1.0000000000000000 },
-  { 1.2400000000000024, 2, -0.90000000000000036 },
-  { 0.56000000000000449, 2, -0.80000000000000071 },
-  { -0.040000000000004032, 2, -0.69999999999999929 },
-  { -0.56000000000000161, 2, -0.59999999999999964 },
-  { -1.0000000000000000, 2, -0.50000000000000000 },
-  { -1.3599999999999990, 2, -0.40000000000000036 },
-  { -1.6399999999999983, 2, -0.30000000000000071 },
-  { -1.8400000000000012, 2, -0.19999999999999929 },
-  { -1.9600000000000002, 2, -0.099999999999999645 },
-  { -2.0000000000000000, 2, 0.0000000000000000 },
-  { -1.9600000000000002, 2, 0.099999999999999645 },
-  { -1.8400000000000012, 2, 0.19999999999999929 },
-  { -1.6399999999999983, 2, 0.30000000000000071 },
-  { -1.3599999999999990, 2, 0.40000000000000036 },
-  { -1.0000000000000000, 2, 0.50000000000000000 },
-  { -0.56000000000000161, 2, 0.59999999999999964 },
-  { -0.040000000000004032, 2, 0.69999999999999929 },
-  { 0.56000000000000449, 2, 0.80000000000000071 },
-  { 1.2400000000000024, 2, 0.90000000000000036 },
-  { 2.0000000000000000, 2, 1.0000000000000000 },
-  { 2.8399999999999972, 2, 1.0999999999999996 },
-  { 3.7599999999999936, 2, 1.1999999999999993 },
-  { 4.7600000000000078, 2, 1.3000000000000007 },
-  { 5.8400000000000043, 2, 1.4000000000000004 },
-  { 7.0000000000000000, 2, 1.5000000000000000 },
-  { 8.2399999999999949, 2, 1.5999999999999996 },
-  { 9.5599999999999898, 2, 1.6999999999999993 },
-  { 10.960000000000010, 2, 1.8000000000000007 },
-  { 12.440000000000005, 2, 1.9000000000000004 },
-  { 14.000000000000000, 2, 2.0000000000000000 },
-  { 15.639999999999993, 2, 2.0999999999999996 },
-  { 17.359999999999989, 2, 2.1999999999999993 },
-  { 19.160000000000014, 2, 2.3000000000000007 },
-  { 21.040000000000006, 2, 2.4000000000000004 },
-  { 23.000000000000000, 2, 2.5000000000000000 },
-  { 25.039999999999992, 2, 2.5999999999999996 },
-  { 27.159999999999986, 2, 2.6999999999999993 },
-  { 29.360000000000017, 2, 2.8000000000000007 },
-  { 31.640000000000008, 2, 2.9000000000000004 },
-  { 34.000000000000000, 2, 3.0000000000000000 },
-  { 36.439999999999991, 2, 3.0999999999999996 },
-  { 38.959999999999980, 2, 3.1999999999999993 },
-  { 41.560000000000016, 2, 3.3000000000000007 },
-  { 44.240000000000009, 2, 3.4000000000000004 },
-  { 47.000000000000000, 2, 3.5000000000000000 },
-  { 49.839999999999989, 2, 3.5999999999999996 },
-  { 52.759999999999977, 2, 3.6999999999999993 },
-  { 55.760000000000019, 2, 3.8000000000000007 },
-  { 58.840000000000011, 2, 3.9000000000000004 },
-  { 62.000000000000000, 2, 4.0000000000000000 },
-  { 65.239999999999995, 2, 4.0999999999999996 },
-  { 68.559999999999974, 2, 4.1999999999999993 },
-  { 71.960000000000022, 2, 4.3000000000000007 },
-  { 75.440000000000012, 2, 4.4000000000000004 },
-  { 79.000000000000000, 2, 4.5000000000000000 },
-  { 82.639999999999986, 2, 4.5999999999999996 },
-  { 86.359999999999971, 2, 4.6999999999999993 },
-  { 90.160000000000025, 2, 4.8000000000000007 },
-  { 94.040000000000020, 2, 4.9000000000000004 },
-  { 98.000000000000000, 2, 5.0000000000000000 },
-  { 102.03999999999999, 2, 5.0999999999999996 },
-  { 106.15999999999997, 2, 5.1999999999999993 },
-  { 110.36000000000003, 2, 5.3000000000000007 },
-  { 114.64000000000001, 2, 5.4000000000000004 },
-  { 119.00000000000000, 2, 5.5000000000000000 },
-  { 123.43999999999998, 2, 5.5999999999999996 },
-  { 127.95999999999998, 2, 5.6999999999999993 },
-  { 132.56000000000003, 2, 5.8000000000000007 },
-  { 137.24000000000001, 2, 5.9000000000000004 },
-  { 142.00000000000000, 2, 6.0000000000000000 },
-  { 146.84000000000006, 2, 6.1000000000000014 },
-  { 151.75999999999996, 2, 6.1999999999999993 },
-  { 156.76000000000005, 2, 6.3000000000000007 },
-  { 161.83999999999992, 2, 6.3999999999999986 },
-  { 167.00000000000000, 2, 6.5000000000000000 },
-  { 172.24000000000007, 2, 6.6000000000000014 },
-  { 177.55999999999997, 2, 6.6999999999999993 },
-  { 182.96000000000004, 2, 6.8000000000000007 },
-  { 188.43999999999991, 2, 6.8999999999999986 },
-  { 194.00000000000000, 2, 7.0000000000000000 },
-  { 199.64000000000007, 2, 7.1000000000000014 },
-  { 205.35999999999996, 2, 7.1999999999999993 },
-  { 211.16000000000005, 2, 7.3000000000000007 },
-  { 217.03999999999991, 2, 7.3999999999999986 },
-  { 223.00000000000000, 2, 7.5000000000000000 },
-  { 229.04000000000008, 2, 7.6000000000000014 },
-  { 235.15999999999997, 2, 7.6999999999999993 },
-  { 241.36000000000004, 2, 7.8000000000000007 },
-  { 247.63999999999990, 2, 7.8999999999999986 },
-  { 254.00000000000000, 2, 8.0000000000000000 },
-  { 260.44000000000011, 2, 8.1000000000000014 },
-  { 266.95999999999998, 2, 8.1999999999999993 },
-  { 273.56000000000006, 2, 8.3000000000000007 },
-  { 280.23999999999990, 2, 8.3999999999999986 },
-  { 287.00000000000000, 2, 8.5000000000000000 },
-  { 293.84000000000009, 2, 8.6000000000000014 },
-  { 300.75999999999993, 2, 8.6999999999999993 },
-  { 307.76000000000005, 2, 8.8000000000000007 },
-  { 314.83999999999992, 2, 8.8999999999999986 },
-  { 322.00000000000000, 2, 9.0000000000000000 },
-  { 329.24000000000012, 2, 9.1000000000000014 },
-  { 336.55999999999995, 2, 9.1999999999999993 },
-  { 343.96000000000004, 2, 9.3000000000000007 },
-  { 351.43999999999988, 2, 9.3999999999999986 },
-  { 359.00000000000000, 2, 9.5000000000000000 },
-  { 366.64000000000010, 2, 9.6000000000000014 },
-  { 374.35999999999996, 2, 9.6999999999999993 },
-  { 382.16000000000008, 2, 9.8000000000000007 },
-  { 390.03999999999991, 2, 9.8999999999999986 },
-  { 398.00000000000000, 2, 10.000000000000000 },
+  { 398.00000000000000, 2, -10.000000000000000, 0.0 },
+  { 390.04000000000002, 2, -9.9000000000000004, 0.0 },
+  { 382.16000000000008, 2, -9.8000000000000007, 0.0 },
+  { 374.35999999999996, 2, -9.6999999999999993, 0.0 },
+  { 366.63999999999999, 2, -9.5999999999999996, 0.0 },
+  { 359.00000000000000, 2, -9.5000000000000000, 0.0 },
+  { 351.44000000000005, 2, -9.4000000000000004, 0.0 },
+  { 343.96000000000004, 2, -9.3000000000000007, 0.0 },
+  { 336.55999999999995, 2, -9.1999999999999993, 0.0 },
+  { 329.23999999999995, 2, -9.0999999999999996, 0.0 },
+  { 322.00000000000000, 2, -9.0000000000000000, 0.0 },
+  { 314.84000000000003, 2, -8.9000000000000004, 0.0 },
+  { 307.76000000000005, 2, -8.8000000000000007, 0.0 },
+  { 300.75999999999993, 2, -8.6999999999999993, 0.0 },
+  { 293.83999999999997, 2, -8.5999999999999996, 0.0 },
+  { 287.00000000000000, 2, -8.5000000000000000, 0.0 },
+  { 280.24000000000001, 2, -8.4000000000000004, 0.0 },
+  { 273.56000000000006, 2, -8.3000000000000007, 0.0 },
+  { 266.95999999999998, 2, -8.1999999999999993, 0.0 },
+  { 260.44000000000000, 2, -8.0999999999999996, 0.0 },
+  { 254.00000000000000, 2, -8.0000000000000000, 0.0 },
+  { 247.64000000000001, 2, -7.9000000000000004, 0.0 },
+  { 241.35999999999999, 2, -7.7999999999999998, 0.0 },
+  { 235.15999999999997, 2, -7.6999999999999993, 0.0 },
+  { 229.03999999999999, 2, -7.5999999999999996, 0.0 },
+  { 223.00000000000000, 2, -7.5000000000000000, 0.0 },
+  { 217.04000000000002, 2, -7.4000000000000004, 0.0 },
+  { 211.16000000000000, 2, -7.2999999999999998, 0.0 },
+  { 205.35999999999996, 2, -7.1999999999999993, 0.0 },
+  { 199.63999999999999, 2, -7.0999999999999996, 0.0 },
+  { 194.00000000000000, 2, -7.0000000000000000, 0.0 },
+  { 188.44000000000003, 2, -6.9000000000000004, 0.0 },
+  { 182.95999999999998, 2, -6.7999999999999998, 0.0 },
+  { 177.55999999999997, 2, -6.6999999999999993, 0.0 },
+  { 172.23999999999998, 2, -6.5999999999999996, 0.0 },
+  { 167.00000000000000, 2, -6.5000000000000000, 0.0 },
+  { 161.84000000000003, 2, -6.4000000000000004, 0.0 },
+  { 156.75999999999999, 2, -6.2999999999999998, 0.0 },
+  { 151.75999999999996, 2, -6.1999999999999993, 0.0 },
+  { 146.83999999999997, 2, -6.0999999999999996, 0.0 },
+  { 142.00000000000000, 2, -6.0000000000000000, 0.0 },
+  { 137.23999999999998, 2, -5.8999999999999995, 0.0 },
+  { 132.56000000000000, 2, -5.7999999999999998, 0.0 },
+  { 127.96000000000001, 2, -5.7000000000000002, 0.0 },
+  { 123.43999999999998, 2, -5.5999999999999996, 0.0 },
+  { 119.00000000000000, 2, -5.5000000000000000, 0.0 },
+  { 114.63999999999997, 2, -5.3999999999999995, 0.0 },
+  { 110.36000000000000, 2, -5.2999999999999998, 0.0 },
+  { 106.15999999999997, 2, -5.1999999999999993, 0.0 },
+  { 102.03999999999999, 2, -5.0999999999999996, 0.0 },
+  { 98.000000000000000, 2, -5.0000000000000000, 0.0 },
+  { 94.039999999999978, 2, -4.8999999999999995, 0.0 },
+  { 90.159999999999997, 2, -4.7999999999999998, 0.0 },
+  { 86.359999999999971, 2, -4.6999999999999993, 0.0 },
+  { 82.639999999999986, 2, -4.5999999999999996, 0.0 },
+  { 79.000000000000000, 2, -4.5000000000000000, 0.0 },
+  { 75.439999999999984, 2, -4.3999999999999995, 0.0 },
+  { 71.959999999999994, 2, -4.2999999999999998, 0.0 },
+  { 68.559999999999974, 2, -4.1999999999999993, 0.0 },
+  { 65.239999999999995, 2, -4.0999999999999996, 0.0 },
+  { 62.000000000000000, 2, -4.0000000000000000, 0.0 },
+  { 58.839999999999982, 2, -3.8999999999999995, 0.0 },
+  { 55.759999999999998, 2, -3.7999999999999998, 0.0 },
+  { 52.759999999999977, 2, -3.6999999999999993, 0.0 },
+  { 49.839999999999989, 2, -3.5999999999999996, 0.0 },
+  { 47.000000000000000, 2, -3.5000000000000000, 0.0 },
+  { 44.239999999999988, 2, -3.3999999999999995, 0.0 },
+  { 41.559999999999995, 2, -3.2999999999999998, 0.0 },
+  { 38.959999999999980, 2, -3.1999999999999993, 0.0 },
+  { 36.439999999999991, 2, -3.0999999999999996, 0.0 },
+  { 34.000000000000000, 2, -3.0000000000000000, 0.0 },
+  { 31.639999999999986, 2, -2.8999999999999995, 0.0 },
+  { 29.359999999999996, 2, -2.7999999999999998, 0.0 },
+  { 27.159999999999986, 2, -2.6999999999999993, 0.0 },
+  { 25.039999999999992, 2, -2.5999999999999996, 0.0 },
+  { 23.000000000000000, 2, -2.5000000000000000, 0.0 },
+  { 21.039999999999988, 2, -2.3999999999999995, 0.0 },
+  { 19.159999999999997, 2, -2.2999999999999998, 0.0 },
+  { 17.359999999999989, 2, -2.1999999999999993, 0.0 },
+  { 15.639999999999993, 2, -2.0999999999999996, 0.0 },
+  { 14.000000000000000, 2, -2.0000000000000000, 0.0 },
+  { 12.440000000000005, 2, -1.9000000000000004, 0.0 },
+  { 10.959999999999985, 2, -1.7999999999999989, 0.0 },
+  { 9.5599999999999898, 2, -1.6999999999999993, 0.0 },
+  { 8.2399999999999949, 2, -1.5999999999999996, 0.0 },
+  { 7.0000000000000000, 2, -1.5000000000000000, 0.0 },
+  { 5.8400000000000043, 2, -1.4000000000000004, 0.0 },
+  { 4.7599999999999891, 2, -1.2999999999999989, 0.0 },
+  { 3.7599999999999936, 2, -1.1999999999999993, 0.0 },
+  { 2.8399999999999972, 2, -1.0999999999999996, 0.0 },
+  { 2.0000000000000000, 2, -1.0000000000000000, 0.0 },
+  { 1.2400000000000024, 2, -0.90000000000000036, 0.0 },
+  { 0.55999999999999339, 2, -0.79999999999999893, 0.0 },
+  { -0.040000000000004032, 2, -0.69999999999999929, 0.0 },
+  { -0.56000000000000161, 2, -0.59999999999999964, 0.0 },
+  { -1.0000000000000000, 2, -0.50000000000000000, 0.0 },
+  { -1.3600000000000045, 2, -0.39999999999999858, 0.0 },
+  { -1.6400000000000026, 2, -0.29999999999999893, 0.0 },
+  { -1.8400000000000012, 2, -0.19999999999999929, 0.0 },
+  { -1.9600000000000002, 2, -0.099999999999999645, 0.0 },
+  { -2.0000000000000000, 2, 0.0000000000000000, 0.0 },
+  { -1.9599999999999989, 2, 0.10000000000000142, 0.0 },
+  { -1.8399999999999983, 2, 0.20000000000000107, 0.0 },
+  { -1.6399999999999983, 2, 0.30000000000000071, 0.0 },
+  { -1.3599999999999990, 2, 0.40000000000000036, 0.0 },
+  { -1.0000000000000000, 2, 0.50000000000000000, 0.0 },
+  { -0.55999999999999317, 2, 0.60000000000000142, 0.0 },
+  { -0.039999999999994040, 2, 0.70000000000000107, 0.0 },
+  { 0.56000000000000449, 2, 0.80000000000000071, 0.0 },
+  { 1.2400000000000024, 2, 0.90000000000000036, 0.0 },
+  { 2.0000000000000000, 2, 1.0000000000000000, 0.0 },
+  { 2.8400000000000123, 2, 1.1000000000000014, 0.0 },
+  { 3.7600000000000104, 2, 1.2000000000000011, 0.0 },
+  { 4.7600000000000078, 2, 1.3000000000000007, 0.0 },
+  { 5.8400000000000043, 2, 1.4000000000000004, 0.0 },
+  { 7.0000000000000000, 2, 1.5000000000000000, 0.0 },
+  { 8.2400000000000180, 2, 1.6000000000000014, 0.0 },
+  { 9.5600000000000147, 2, 1.7000000000000011, 0.0 },
+  { 10.960000000000010, 2, 1.8000000000000007, 0.0 },
+  { 12.440000000000005, 2, 1.9000000000000004, 0.0 },
+  { 14.000000000000000, 2, 2.0000000000000000, 0.0 },
+  { 15.640000000000025, 2, 2.1000000000000014, 0.0 },
+  { 17.360000000000017, 2, 2.2000000000000011, 0.0 },
+  { 19.160000000000014, 2, 2.3000000000000007, 0.0 },
+  { 21.040000000000006, 2, 2.4000000000000004, 0.0 },
+  { 23.000000000000000, 2, 2.5000000000000000, 0.0 },
+  { 25.040000000000031, 2, 2.6000000000000014, 0.0 },
+  { 27.160000000000021, 2, 2.7000000000000011, 0.0 },
+  { 29.360000000000017, 2, 2.8000000000000007, 0.0 },
+  { 31.640000000000008, 2, 2.9000000000000004, 0.0 },
+  { 34.000000000000000, 2, 3.0000000000000000, 0.0 },
+  { 36.440000000000033, 2, 3.1000000000000014, 0.0 },
+  { 38.960000000000029, 2, 3.2000000000000011, 0.0 },
+  { 41.560000000000016, 2, 3.3000000000000007, 0.0 },
+  { 44.240000000000009, 2, 3.4000000000000004, 0.0 },
+  { 47.000000000000000, 2, 3.5000000000000000, 0.0 },
+  { 49.840000000000039, 2, 3.6000000000000014, 0.0 },
+  { 52.760000000000034, 2, 3.7000000000000011, 0.0 },
+  { 55.760000000000019, 2, 3.8000000000000007, 0.0 },
+  { 58.840000000000011, 2, 3.9000000000000004, 0.0 },
+  { 62.000000000000000, 2, 4.0000000000000000, 0.0 },
+  { 65.240000000000052, 2, 4.1000000000000014, 0.0 },
+  { 68.560000000000031, 2, 4.2000000000000011, 0.0 },
+  { 71.960000000000022, 2, 4.3000000000000007, 0.0 },
+  { 75.440000000000012, 2, 4.4000000000000004, 0.0 },
+  { 79.000000000000000, 2, 4.5000000000000000, 0.0 },
+  { 82.640000000000057, 2, 4.6000000000000014, 0.0 },
+  { 86.360000000000042, 2, 4.7000000000000011, 0.0 },
+  { 90.160000000000025, 2, 4.8000000000000007, 0.0 },
+  { 94.040000000000020, 2, 4.9000000000000004, 0.0 },
+  { 98.000000000000000, 2, 5.0000000000000000, 0.0 },
+  { 102.04000000000006, 2, 5.1000000000000014, 0.0 },
+  { 106.16000000000004, 2, 5.2000000000000011, 0.0 },
+  { 110.36000000000003, 2, 5.3000000000000007, 0.0 },
+  { 114.64000000000001, 2, 5.4000000000000004, 0.0 },
+  { 119.00000000000000, 2, 5.5000000000000000, 0.0 },
+  { 123.44000000000007, 2, 5.6000000000000014, 0.0 },
+  { 127.96000000000004, 2, 5.7000000000000011, 0.0 },
+  { 132.56000000000003, 2, 5.8000000000000007, 0.0 },
+  { 137.24000000000001, 2, 5.9000000000000004, 0.0 },
+  { 142.00000000000000, 2, 6.0000000000000000, 0.0 },
+  { 146.84000000000006, 2, 6.1000000000000014, 0.0 },
+  { 151.75999999999996, 2, 6.1999999999999993, 0.0 },
+  { 156.76000000000005, 2, 6.3000000000000007, 0.0 },
+  { 161.84000000000012, 2, 6.4000000000000021, 0.0 },
+  { 167.00000000000000, 2, 6.5000000000000000, 0.0 },
+  { 172.24000000000007, 2, 6.6000000000000014, 0.0 },
+  { 177.55999999999997, 2, 6.6999999999999993, 0.0 },
+  { 182.96000000000004, 2, 6.8000000000000007, 0.0 },
+  { 188.44000000000011, 2, 6.9000000000000021, 0.0 },
+  { 194.00000000000000, 2, 7.0000000000000000, 0.0 },
+  { 199.64000000000007, 2, 7.1000000000000014, 0.0 },
+  { 205.35999999999996, 2, 7.1999999999999993, 0.0 },
+  { 211.16000000000005, 2, 7.3000000000000007, 0.0 },
+  { 217.04000000000013, 2, 7.4000000000000021, 0.0 },
+  { 223.00000000000000, 2, 7.5000000000000000, 0.0 },
+  { 229.04000000000008, 2, 7.6000000000000014, 0.0 },
+  { 235.15999999999997, 2, 7.6999999999999993, 0.0 },
+  { 241.36000000000004, 2, 7.8000000000000007, 0.0 },
+  { 247.64000000000013, 2, 7.9000000000000021, 0.0 },
+  { 254.00000000000000, 2, 8.0000000000000000, 0.0 },
+  { 260.44000000000011, 2, 8.1000000000000014, 0.0 },
+  { 266.95999999999998, 2, 8.1999999999999993, 0.0 },
+  { 273.56000000000006, 2, 8.3000000000000007, 0.0 },
+  { 280.24000000000012, 2, 8.4000000000000021, 0.0 },
+  { 287.00000000000000, 2, 8.5000000000000000, 0.0 },
+  { 293.84000000000009, 2, 8.6000000000000014, 0.0 },
+  { 300.75999999999993, 2, 8.6999999999999993, 0.0 },
+  { 307.76000000000005, 2, 8.8000000000000007, 0.0 },
+  { 314.84000000000015, 2, 8.9000000000000021, 0.0 },
+  { 322.00000000000000, 2, 9.0000000000000000, 0.0 },
+  { 329.24000000000012, 2, 9.1000000000000014, 0.0 },
+  { 336.56000000000023, 2, 9.2000000000000028, 0.0 },
+  { 343.96000000000004, 2, 9.3000000000000007, 0.0 },
+  { 351.44000000000017, 2, 9.4000000000000021, 0.0 },
+  { 359.00000000000000, 2, 9.5000000000000000, 0.0 },
+  { 366.64000000000010, 2, 9.6000000000000014, 0.0 },
+  { 374.36000000000024, 2, 9.7000000000000028, 0.0 },
+  { 382.16000000000008, 2, 9.8000000000000007, 0.0 },
+  { 390.04000000000019, 2, 9.9000000000000021, 0.0 },
+  { 398.00000000000000, 2, 10.000000000000000, 0.0 },
 };
 const double toler003 = 2.5000000000000020e-13;
 
 // Test data for n=5.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hermite<double>
 data004[201] =
 {
-  { -3041200.0000000000, 5, -10.000000000000000 },
-  { -2889108.3196800007, 5, -9.9000000000000004 },
-  { -2743131.8297600015, 5, -9.8000000000000007 },
-  { -2603085.2022399991, 5, -9.6999999999999993 },
-  { -2468786.8723199992, 5, -9.5999999999999996 },
-  { -2340059.0000000000, 5, -9.5000000000000000 },
-  { -2216727.4316800009, 5, -9.4000000000000004 },
-  { -2098621.6617600010, 5, -9.3000000000000007 },
-  { -1985574.7942399993, 5, -9.1999999999999993 },
-  { -1877423.5043199996, 5, -9.0999999999999996 },
-  { -1774008.0000000000, 5, -9.0000000000000000 },
-  { -1675171.9836800008, 5, -8.9000000000000004 },
-  { -1580762.6137600006, 5, -8.8000000000000007 },
-  { -1490630.4662399990, 5, -8.6999999999999993 },
-  { -1404629.4963199999, 5, -8.5999999999999996 },
-  { -1322617.0000000000, 5, -8.5000000000000000 },
-  { -1244453.5756800002, 5, -8.4000000000000004 },
-  { -1170003.0857600006, 5, -8.3000000000000007 },
-  { -1099132.6182399995, 5, -8.1999999999999993 },
-  { -1031712.4483199996, 5, -8.0999999999999996 },
-  { -967616.00000000000, 5, -8.0000000000000000 },
-  { -906719.80768000009, 5, -7.9000000000000004 },
-  { -848903.47775999992, 5, -7.7999999999999998 },
-  { -794049.65024000010, 5, -7.7000000000000002 },
-  { -742043.96031999995, 5, -7.5999999999999996 },
-  { -692775.00000000000, 5, -7.5000000000000000 },
-  { -646134.27968000027, 5, -7.4000000000000004 },
-  { -602016.18975999986, 5, -7.2999999999999998 },
-  { -560317.96224000002, 5, -7.2000000000000002 },
-  { -520939.63231999992, 5, -7.0999999999999996 },
-  { -483784.00000000000, 5, -7.0000000000000000 },
-  { -448756.59168000019, 5, -6.9000000000000004 },
-  { -415765.62176000001, 5, -6.7999999999999998 },
-  { -384721.95424000005, 5, -6.7000000000000002 },
-  { -355539.06431999995, 5, -6.5999999999999996 },
-  { -328133.00000000000, 5, -6.5000000000000000 },
-  { -302422.34368000011, 5, -6.4000000000000004 },
-  { -278328.17375999998, 5, -6.2999999999999998 },
-  { -255774.02624000004, 5, -6.2000000000000002 },
-  { -234685.85631999990, 5, -6.0999999999999996 },
-  { -214992.00000000000, 5, -6.0000000000000000 },
-  { -196623.13568000006, 5, -5.9000000000000004 },
-  { -179512.24575999999, 5, -5.7999999999999998 },
-  { -163594.57824000003, 5, -5.7000000000000002 },
-  { -148807.60831999997, 5, -5.5999999999999996 },
-  { -135091.00000000000, 5, -5.5000000000000000 },
-  { -122386.56768000004, 5, -5.4000000000000004 },
-  { -110638.23776000000, 5, -5.2999999999999998 },
-  { -99792.010240000047, 5, -5.2000000000000002 },
-  { -89795.920319999976, 5, -5.0999999999999996 },
-  { -80600.000000000000, 5, -5.0000000000000000 },
-  { -72156.239680000028, 5, -4.9000000000000004 },
-  { -64418.549759999994, 5, -4.7999999999999998 },
-  { -57342.722240000010, 5, -4.7000000000000002 },
-  { -50886.392319999970, 5, -4.5999999999999996 },
-  { -45009.000000000000, 5, -4.5000000000000000 },
-  { -39671.751680000008, 5, -4.4000000000000004 },
-  { -34837.581759999986, 5, -4.2999999999999998 },
-  { -30471.114240000010, 5, -4.2000000000000002 },
-  { -26538.624319999992, 5, -4.0999999999999996 },
-  { -23008.000000000000, 5, -4.0000000000000000 },
-  { -19848.703680000013, 5, -3.9000000000000004 },
-  { -17031.733759999996, 5, -3.7999999999999998 },
-  { -14529.586240000001, 5, -3.7000000000000002 },
-  { -12316.216319999992, 5, -3.5999999999999996 },
-  { -10367.000000000000, 5, -3.5000000000000000 },
-  { -8658.6956800000080, 5, -3.4000000000000004 },
-  { -7169.4057599999960, 5, -3.2999999999999998 },
-  { -5878.5382400000035, 5, -3.2000000000000002 },
-  { -4766.7683199999965, 5, -3.0999999999999996 },
-  { -3816.0000000000000, 5, -3.0000000000000000 },
-  { -3009.3276800000026, 5, -2.9000000000000004 },
-  { -2330.9977599999988, 5, -2.7999999999999998 },
-  { -1766.3702400000002, 5, -2.7000000000000002 },
-  { -1301.8803199999984, 5, -2.5999999999999996 },
-  { -925.00000000000000, 5, -2.5000000000000000 },
-  { -624.19968000000074, 5, -2.4000000000000004 },
-  { -388.90975999999978, 5, -2.2999999999999998 },
-  { -209.48224000000022, 5, -2.2000000000000002 },
-  { -77.152319999999520, 5, -2.0999999999999996 },
-  { 16.000000000000000, 5, -2.0000000000000000 },
-  { 77.088319999999840, 5, -1.9000000000000004 },
-  { 112.45823999999980, 5, -1.8000000000000007 },
-  { 127.72576000000002, 5, -1.6999999999999993 },
-  { 127.81567999999996, 5, -1.5999999999999996 },
-  { 117.00000000000000, 5, -1.5000000000000000 },
-  { 98.936320000000080, 5, -1.4000000000000004 },
-  { 76.706240000000179, 5, -1.3000000000000007 },
-  { 52.853759999999838, 5, -1.1999999999999993 },
-  { 29.423679999999933, 5, -1.0999999999999996 },
-  { 8.0000000000000000, 5, -1.0000000000000000 },
-  { -10.255679999999948, 5, -0.90000000000000036 },
-  { -24.565759999999916, 5, -0.80000000000000071 },
-  { -34.498240000000052, 5, -0.69999999999999929 },
-  { -39.928320000000006, 5, -0.59999999999999964 },
-  { -41.000000000000000, 5, -0.50000000000000000 },
-  { -38.087680000000020, 5, -0.40000000000000036 },
-  { -31.757760000000054, 5, -0.30000000000000071 },
-  { -22.730239999999931, 5, -0.19999999999999929 },
-  { -11.840319999999959, 5, -0.099999999999999645 },
-  { 0.0000000000000000, 5, 0.0000000000000000 },
-  { 11.840319999999959, 5, 0.099999999999999645 },
-  { 22.730239999999931, 5, 0.19999999999999929 },
-  { 31.757760000000054, 5, 0.30000000000000071 },
-  { 38.087680000000020, 5, 0.40000000000000036 },
-  { 41.000000000000000, 5, 0.50000000000000000 },
-  { 39.928320000000006, 5, 0.59999999999999964 },
-  { 34.498240000000052, 5, 0.69999999999999929 },
-  { 24.565759999999916, 5, 0.80000000000000071 },
-  { 10.255679999999948, 5, 0.90000000000000036 },
-  { -8.0000000000000000, 5, 1.0000000000000000 },
-  { -29.423679999999933, 5, 1.0999999999999996 },
-  { -52.853759999999838, 5, 1.1999999999999993 },
-  { -76.706240000000179, 5, 1.3000000000000007 },
-  { -98.936320000000080, 5, 1.4000000000000004 },
-  { -117.00000000000000, 5, 1.5000000000000000 },
-  { -127.81567999999996, 5, 1.5999999999999996 },
-  { -127.72576000000002, 5, 1.6999999999999993 },
-  { -112.45823999999980, 5, 1.8000000000000007 },
-  { -77.088319999999840, 5, 1.9000000000000004 },
-  { -16.000000000000000, 5, 2.0000000000000000 },
-  { 77.152319999999520, 5, 2.0999999999999996 },
-  { 209.48223999999891, 5, 2.1999999999999993 },
-  { 388.90976000000148, 5, 2.3000000000000007 },
-  { 624.19968000000074, 5, 2.4000000000000004 },
-  { 925.00000000000000, 5, 2.5000000000000000 },
-  { 1301.8803199999984, 5, 2.5999999999999996 },
-  { 1766.3702399999963, 5, 2.6999999999999993 },
-  { 2330.9977600000047, 5, 2.8000000000000007 },
-  { 3009.3276800000026, 5, 2.9000000000000004 },
-  { 3816.0000000000000, 5, 3.0000000000000000 },
-  { 4766.7683199999965, 5, 3.0999999999999996 },
-  { 5878.5382399999908, 5, 3.1999999999999993 },
-  { 7169.4057600000087, 5, 3.3000000000000007 },
-  { 8658.6956800000080, 5, 3.4000000000000004 },
-  { 10367.000000000000, 5, 3.5000000000000000 },
-  { 12316.216319999992, 5, 3.5999999999999996 },
-  { 14529.586239999979, 5, 3.6999999999999993 },
-  { 17031.733760000021, 5, 3.8000000000000007 },
-  { 19848.703680000013, 5, 3.9000000000000004 },
-  { 23008.000000000000, 5, 4.0000000000000000 },
-  { 26538.624319999992, 5, 4.0999999999999996 },
-  { 30471.114239999963, 5, 4.1999999999999993 },
-  { 34837.581760000037, 5, 4.3000000000000007 },
-  { 39671.751680000008, 5, 4.4000000000000004 },
-  { 45009.000000000000, 5, 4.5000000000000000 },
-  { 50886.392319999970, 5, 4.5999999999999996 },
-  { 57342.722239999952, 5, 4.6999999999999993 },
-  { 64418.549760000053, 5, 4.8000000000000007 },
-  { 72156.239680000028, 5, 4.9000000000000004 },
-  { 80600.000000000000, 5, 5.0000000000000000 },
-  { 89795.920319999976, 5, 5.0999999999999996 },
-  { 99792.010239999945, 5, 5.1999999999999993 },
-  { 110638.23776000006, 5, 5.3000000000000007 },
-  { 122386.56768000004, 5, 5.4000000000000004 },
-  { 135091.00000000000, 5, 5.5000000000000000 },
-  { 148807.60831999997, 5, 5.5999999999999996 },
-  { 163594.57823999992, 5, 5.6999999999999993 },
-  { 179512.24576000011, 5, 5.8000000000000007 },
-  { 196623.13568000006, 5, 5.9000000000000004 },
-  { 214992.00000000000, 5, 6.0000000000000000 },
-  { 234685.85632000031, 5, 6.1000000000000014 },
-  { 255774.02623999983, 5, 6.1999999999999993 },
-  { 278328.17376000021, 5, 6.3000000000000007 },
-  { 302422.34367999958, 5, 6.3999999999999986 },
-  { 328133.00000000000, 5, 6.5000000000000000 },
-  { 355539.06432000035, 5, 6.6000000000000014 },
-  { 384721.95423999976, 5, 6.6999999999999993 },
-  { 415765.62176000018, 5, 6.8000000000000007 },
-  { 448756.59167999960, 5, 6.8999999999999986 },
-  { 483784.00000000000, 5, 7.0000000000000000 },
-  { 520939.63232000044, 5, 7.1000000000000014 },
-  { 560317.96223999979, 5, 7.1999999999999993 },
-  { 602016.18976000033, 5, 7.3000000000000007 },
-  { 646134.27967999945, 5, 7.3999999999999986 },
-  { 692775.00000000000, 5, 7.5000000000000000 },
-  { 742043.96032000054, 5, 7.6000000000000014 },
-  { 794049.65023999964, 5, 7.6999999999999993 },
-  { 848903.47776000027, 5, 7.8000000000000007 },
-  { 906719.80767999915, 5, 7.8999999999999986 },
-  { 967616.00000000000, 5, 8.0000000000000000 },
-  { 1031712.4483200011, 5, 8.1000000000000014 },
-  { 1099132.6182399995, 5, 8.1999999999999993 },
-  { 1170003.0857600006, 5, 8.3000000000000007 },
-  { 1244453.5756799988, 5, 8.3999999999999986 },
-  { 1322617.0000000000, 5, 8.5000000000000000 },
-  { 1404629.4963200013, 5, 8.6000000000000014 },
-  { 1490630.4662399990, 5, 8.6999999999999993 },
-  { 1580762.6137600006, 5, 8.8000000000000007 },
-  { 1675171.9836799989, 5, 8.8999999999999986 },
-  { 1774008.0000000000, 5, 9.0000000000000000 },
-  { 1877423.5043200015, 5, 9.1000000000000014 },
-  { 1985574.7942399993, 5, 9.1999999999999993 },
-  { 2098621.6617600010, 5, 9.3000000000000007 },
-  { 2216727.4316799981, 5, 9.3999999999999986 },
-  { 2340059.0000000000, 5, 9.5000000000000000 },
-  { 2468786.8723200019, 5, 9.6000000000000014 },
-  { 2603085.2022399991, 5, 9.6999999999999993 },
-  { 2743131.8297600015, 5, 9.8000000000000007 },
-  { 2889108.3196799983, 5, 9.8999999999999986 },
-  { 3041200.0000000000, 5, 10.000000000000000 },
+  { -3041200.0000000000, 5, -10.000000000000000, 0.0 },
+  { -2889108.3196800007, 5, -9.9000000000000004, 0.0 },
+  { -2743131.8297600015, 5, -9.8000000000000007, 0.0 },
+  { -2603085.2022399991, 5, -9.6999999999999993, 0.0 },
+  { -2468786.8723199992, 5, -9.5999999999999996, 0.0 },
+  { -2340059.0000000000, 5, -9.5000000000000000, 0.0 },
+  { -2216727.4316800009, 5, -9.4000000000000004, 0.0 },
+  { -2098621.6617600010, 5, -9.3000000000000007, 0.0 },
+  { -1985574.7942399993, 5, -9.1999999999999993, 0.0 },
+  { -1877423.5043199996, 5, -9.0999999999999996, 0.0 },
+  { -1774008.0000000000, 5, -9.0000000000000000, 0.0 },
+  { -1675171.9836800008, 5, -8.9000000000000004, 0.0 },
+  { -1580762.6137600006, 5, -8.8000000000000007, 0.0 },
+  { -1490630.4662399990, 5, -8.6999999999999993, 0.0 },
+  { -1404629.4963199999, 5, -8.5999999999999996, 0.0 },
+  { -1322617.0000000000, 5, -8.5000000000000000, 0.0 },
+  { -1244453.5756800002, 5, -8.4000000000000004, 0.0 },
+  { -1170003.0857600006, 5, -8.3000000000000007, 0.0 },
+  { -1099132.6182399995, 5, -8.1999999999999993, 0.0 },
+  { -1031712.4483199996, 5, -8.0999999999999996, 0.0 },
+  { -967616.00000000000, 5, -8.0000000000000000, 0.0 },
+  { -906719.80768000009, 5, -7.9000000000000004, 0.0 },
+  { -848903.47775999992, 5, -7.7999999999999998, 0.0 },
+  { -794049.65023999964, 5, -7.6999999999999993, 0.0 },
+  { -742043.96031999995, 5, -7.5999999999999996, 0.0 },
+  { -692775.00000000000, 5, -7.5000000000000000, 0.0 },
+  { -646134.27968000027, 5, -7.4000000000000004, 0.0 },
+  { -602016.18975999986, 5, -7.2999999999999998, 0.0 },
+  { -560317.96223999979, 5, -7.1999999999999993, 0.0 },
+  { -520939.63231999992, 5, -7.0999999999999996, 0.0 },
+  { -483784.00000000000, 5, -7.0000000000000000, 0.0 },
+  { -448756.59168000019, 5, -6.9000000000000004, 0.0 },
+  { -415765.62176000001, 5, -6.7999999999999998, 0.0 },
+  { -384721.95423999976, 5, -6.6999999999999993, 0.0 },
+  { -355539.06431999995, 5, -6.5999999999999996, 0.0 },
+  { -328133.00000000000, 5, -6.5000000000000000, 0.0 },
+  { -302422.34368000011, 5, -6.4000000000000004, 0.0 },
+  { -278328.17375999998, 5, -6.2999999999999998, 0.0 },
+  { -255774.02623999983, 5, -6.1999999999999993, 0.0 },
+  { -234685.85631999990, 5, -6.0999999999999996, 0.0 },
+  { -214992.00000000000, 5, -6.0000000000000000, 0.0 },
+  { -196623.13567999989, 5, -5.8999999999999995, 0.0 },
+  { -179512.24575999999, 5, -5.7999999999999998, 0.0 },
+  { -163594.57824000003, 5, -5.7000000000000002, 0.0 },
+  { -148807.60831999997, 5, -5.5999999999999996, 0.0 },
+  { -135091.00000000000, 5, -5.5000000000000000, 0.0 },
+  { -122386.56767999992, 5, -5.3999999999999995, 0.0 },
+  { -110638.23776000000, 5, -5.2999999999999998, 0.0 },
+  { -99792.010239999945, 5, -5.1999999999999993, 0.0 },
+  { -89795.920319999976, 5, -5.0999999999999996, 0.0 },
+  { -80600.000000000000, 5, -5.0000000000000000, 0.0 },
+  { -72156.239679999941, 5, -4.8999999999999995, 0.0 },
+  { -64418.549759999994, 5, -4.7999999999999998, 0.0 },
+  { -57342.722239999952, 5, -4.6999999999999993, 0.0 },
+  { -50886.392319999970, 5, -4.5999999999999996, 0.0 },
+  { -45009.000000000000, 5, -4.5000000000000000, 0.0 },
+  { -39671.751679999965, 5, -4.3999999999999995, 0.0 },
+  { -34837.581759999986, 5, -4.2999999999999998, 0.0 },
+  { -30471.114239999963, 5, -4.1999999999999993, 0.0 },
+  { -26538.624319999992, 5, -4.0999999999999996, 0.0 },
+  { -23008.000000000000, 5, -4.0000000000000000, 0.0 },
+  { -19848.703679999981, 5, -3.8999999999999995, 0.0 },
+  { -17031.733759999996, 5, -3.7999999999999998, 0.0 },
+  { -14529.586239999979, 5, -3.6999999999999993, 0.0 },
+  { -12316.216319999992, 5, -3.5999999999999996, 0.0 },
+  { -10367.000000000000, 5, -3.5000000000000000, 0.0 },
+  { -8658.6956799999934, 5, -3.3999999999999995, 0.0 },
+  { -7169.4057599999960, 5, -3.2999999999999998, 0.0 },
+  { -5878.5382399999908, 5, -3.1999999999999993, 0.0 },
+  { -4766.7683199999965, 5, -3.0999999999999996, 0.0 },
+  { -3816.0000000000000, 5, -3.0000000000000000, 0.0 },
+  { -3009.3276799999958, 5, -2.8999999999999995, 0.0 },
+  { -2330.9977599999988, 5, -2.7999999999999998, 0.0 },
+  { -1766.3702399999963, 5, -2.6999999999999993, 0.0 },
+  { -1301.8803199999984, 5, -2.5999999999999996, 0.0 },
+  { -925.00000000000000, 5, -2.5000000000000000, 0.0 },
+  { -624.19967999999858, 5, -2.3999999999999995, 0.0 },
+  { -388.90975999999978, 5, -2.2999999999999998, 0.0 },
+  { -209.48223999999891, 5, -2.1999999999999993, 0.0 },
+  { -77.152319999999520, 5, -2.0999999999999996, 0.0 },
+  { 16.000000000000000, 5, -2.0000000000000000, 0.0 },
+  { 77.088319999999840, 5, -1.9000000000000004, 0.0 },
+  { 112.45824000000026, 5, -1.7999999999999989, 0.0 },
+  { 127.72576000000002, 5, -1.6999999999999993, 0.0 },
+  { 127.81567999999996, 5, -1.5999999999999996, 0.0 },
+  { 117.00000000000000, 5, -1.5000000000000000, 0.0 },
+  { 98.936320000000080, 5, -1.4000000000000004, 0.0 },
+  { 76.706239999999752, 5, -1.2999999999999989, 0.0 },
+  { 52.853759999999838, 5, -1.1999999999999993, 0.0 },
+  { 29.423679999999933, 5, -1.0999999999999996, 0.0 },
+  { 8.0000000000000000, 5, -1.0000000000000000, 0.0 },
+  { -10.255679999999948, 5, -0.90000000000000036, 0.0 },
+  { -24.565760000000125, 5, -0.79999999999999893, 0.0 },
+  { -34.498240000000052, 5, -0.69999999999999929, 0.0 },
+  { -39.928320000000006, 5, -0.59999999999999964, 0.0 },
+  { -41.000000000000000, 5, -0.50000000000000000, 0.0 },
+  { -38.087679999999935, 5, -0.39999999999999858, 0.0 },
+  { -31.757759999999919, 5, -0.29999999999999893, 0.0 },
+  { -22.730239999999931, 5, -0.19999999999999929, 0.0 },
+  { -11.840319999999959, 5, -0.099999999999999645, 0.0 },
+  { 0.0000000000000000, 5, 0.0000000000000000, 0.0 },
+  { 11.840320000000162, 5, 0.10000000000000142, 0.0 },
+  { 22.730240000000109, 5, 0.20000000000000107, 0.0 },
+  { 31.757760000000054, 5, 0.30000000000000071, 0.0 },
+  { 38.087680000000020, 5, 0.40000000000000036, 0.0 },
+  { 41.000000000000000, 5, 0.50000000000000000, 0.0 },
+  { 39.928319999999957, 5, 0.60000000000000142, 0.0 },
+  { 34.498239999999925, 5, 0.70000000000000107, 0.0 },
+  { 24.565759999999916, 5, 0.80000000000000071, 0.0 },
+  { 10.255679999999948, 5, 0.90000000000000036, 0.0 },
+  { -8.0000000000000000, 5, 1.0000000000000000, 0.0 },
+  { -29.423680000000317, 5, 1.1000000000000014, 0.0 },
+  { -52.853760000000264, 5, 1.2000000000000011, 0.0 },
+  { -76.706240000000179, 5, 1.3000000000000007, 0.0 },
+  { -98.936320000000080, 5, 1.4000000000000004, 0.0 },
+  { -117.00000000000000, 5, 1.5000000000000000, 0.0 },
+  { -127.81568000000010, 5, 1.6000000000000014, 0.0 },
+  { -127.72575999999992, 5, 1.7000000000000011, 0.0 },
+  { -112.45823999999980, 5, 1.8000000000000007, 0.0 },
+  { -77.088319999999840, 5, 1.9000000000000004, 0.0 },
+  { -16.000000000000000, 5, 2.0000000000000000, 0.0 },
+  { 77.152320000001623, 5, 2.1000000000000014, 0.0 },
+  { 209.48224000000164, 5, 2.2000000000000011, 0.0 },
+  { 388.90976000000148, 5, 2.3000000000000007, 0.0 },
+  { 624.19968000000074, 5, 2.4000000000000004, 0.0 },
+  { 925.00000000000000, 5, 2.5000000000000000, 0.0 },
+  { 1301.8803200000059, 5, 2.6000000000000014, 0.0 },
+  { 1766.3702400000057, 5, 2.7000000000000011, 0.0 },
+  { 2330.9977600000047, 5, 2.8000000000000007, 0.0 },
+  { 3009.3276800000026, 5, 2.9000000000000004, 0.0 },
+  { 3816.0000000000000, 5, 3.0000000000000000, 0.0 },
+  { 4766.7683200000147, 5, 3.1000000000000014, 0.0 },
+  { 5878.5382400000126, 5, 3.2000000000000011, 0.0 },
+  { 7169.4057600000087, 5, 3.3000000000000007, 0.0 },
+  { 8658.6956800000080, 5, 3.4000000000000004, 0.0 },
+  { 10367.000000000000, 5, 3.5000000000000000, 0.0 },
+  { 12316.216320000027, 5, 3.6000000000000014, 0.0 },
+  { 14529.586240000028, 5, 3.7000000000000011, 0.0 },
+  { 17031.733760000021, 5, 3.8000000000000007, 0.0 },
+  { 19848.703680000013, 5, 3.9000000000000004, 0.0 },
+  { 23008.000000000000, 5, 4.0000000000000000, 0.0 },
+  { 26538.624320000057, 5, 4.1000000000000014, 0.0 },
+  { 30471.114240000043, 5, 4.2000000000000011, 0.0 },
+  { 34837.581760000037, 5, 4.3000000000000007, 0.0 },
+  { 39671.751680000008, 5, 4.4000000000000004, 0.0 },
+  { 45009.000000000000, 5, 4.5000000000000000, 0.0 },
+  { 50886.392320000086, 5, 4.6000000000000014, 0.0 },
+  { 57342.722240000076, 5, 4.7000000000000011, 0.0 },
+  { 64418.549760000053, 5, 4.8000000000000007, 0.0 },
+  { 72156.239680000028, 5, 4.9000000000000004, 0.0 },
+  { 80600.000000000000, 5, 5.0000000000000000, 0.0 },
+  { 89795.920320000136, 5, 5.1000000000000014, 0.0 },
+  { 99792.010240000105, 5, 5.2000000000000011, 0.0 },
+  { 110638.23776000006, 5, 5.3000000000000007, 0.0 },
+  { 122386.56768000004, 5, 5.4000000000000004, 0.0 },
+  { 135091.00000000000, 5, 5.5000000000000000, 0.0 },
+  { 148807.60832000020, 5, 5.6000000000000014, 0.0 },
+  { 163594.57824000015, 5, 5.7000000000000011, 0.0 },
+  { 179512.24576000011, 5, 5.8000000000000007, 0.0 },
+  { 196623.13568000006, 5, 5.9000000000000004, 0.0 },
+  { 214992.00000000000, 5, 6.0000000000000000, 0.0 },
+  { 234685.85632000031, 5, 6.1000000000000014, 0.0 },
+  { 255774.02623999983, 5, 6.1999999999999993, 0.0 },
+  { 278328.17376000021, 5, 6.3000000000000007, 0.0 },
+  { 302422.34368000063, 5, 6.4000000000000021, 0.0 },
+  { 328133.00000000000, 5, 6.5000000000000000, 0.0 },
+  { 355539.06432000035, 5, 6.6000000000000014, 0.0 },
+  { 384721.95423999976, 5, 6.6999999999999993, 0.0 },
+  { 415765.62176000018, 5, 6.8000000000000007, 0.0 },
+  { 448756.59168000077, 5, 6.9000000000000021, 0.0 },
+  { 483784.00000000000, 5, 7.0000000000000000, 0.0 },
+  { 520939.63232000044, 5, 7.1000000000000014, 0.0 },
+  { 560317.96223999979, 5, 7.1999999999999993, 0.0 },
+  { 602016.18976000033, 5, 7.3000000000000007, 0.0 },
+  { 646134.27968000097, 5, 7.4000000000000021, 0.0 },
+  { 692775.00000000000, 5, 7.5000000000000000, 0.0 },
+  { 742043.96032000054, 5, 7.6000000000000014, 0.0 },
+  { 794049.65023999964, 5, 7.6999999999999993, 0.0 },
+  { 848903.47776000027, 5, 7.8000000000000007, 0.0 },
+  { 906719.80768000125, 5, 7.9000000000000021, 0.0 },
+  { 967616.00000000000, 5, 8.0000000000000000, 0.0 },
+  { 1031712.4483200011, 5, 8.1000000000000014, 0.0 },
+  { 1099132.6182399995, 5, 8.1999999999999993, 0.0 },
+  { 1170003.0857600006, 5, 8.3000000000000007, 0.0 },
+  { 1244453.5756800014, 5, 8.4000000000000021, 0.0 },
+  { 1322617.0000000000, 5, 8.5000000000000000, 0.0 },
+  { 1404629.4963200013, 5, 8.6000000000000014, 0.0 },
+  { 1490630.4662399990, 5, 8.6999999999999993, 0.0 },
+  { 1580762.6137600006, 5, 8.8000000000000007, 0.0 },
+  { 1675171.9836800022, 5, 8.9000000000000021, 0.0 },
+  { 1774008.0000000000, 5, 9.0000000000000000, 0.0 },
+  { 1877423.5043200015, 5, 9.1000000000000014, 0.0 },
+  { 1985574.7942400032, 5, 9.2000000000000028, 0.0 },
+  { 2098621.6617600010, 5, 9.3000000000000007, 0.0 },
+  { 2216727.4316800022, 5, 9.4000000000000021, 0.0 },
+  { 2340059.0000000000, 5, 9.5000000000000000, 0.0 },
+  { 2468786.8723200019, 5, 9.6000000000000014, 0.0 },
+  { 2603085.2022400037, 5, 9.7000000000000028, 0.0 },
+  { 2743131.8297600015, 5, 9.8000000000000007, 0.0 },
+  { 2889108.3196800039, 5, 9.9000000000000021, 0.0 },
+  { 3041200.0000000000, 5, 10.000000000000000, 0.0 },
 };
 const double toler004 = 2.5000000000000020e-13;
 
 // Test data for n=10.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hermite<double>
 data005[201] =
 {
-  { 8093278209760.0000, 10, -10.000000000000000 },
-  { 7282867075495.3066, 10, -9.9000000000000004 },
-  { 6545846221520.6768, 10, -9.8000000000000007 },
-  { 5876279006180.6377, 10, -9.6999999999999993 },
-  { 5268651052510.4668, 10, -9.5999999999999996 },
-  { 4717844376391.0000, 10, -9.5000000000000000 },
-  { 4219112842239.1147, 10, -9.4000000000000004 },
-  { 3768058891466.0469, 10, -9.3000000000000007 },
-  { 3360611490639.0889, 10, -9.1999999999999993 },
-  { 2993005247949.7607, 10, -9.0999999999999996 },
-  { 2661760648224.0000, 10, -9.0000000000000000 },
-  { 2363665358307.8496, 10, -8.9000000000000004 },
-  { 2095756556225.3428, 10, -8.8000000000000007 },
-  { 1855304239034.7983, 10, -8.6999999999999993 },
-  { 1639795465805.4746, 10, -8.5999999999999996 },
-  { 1446919493599.0000, 10, -8.5000000000000000 },
-  { 1274553765769.7463, 10, -8.4000000000000004 },
-  { 1120750713295.2778, 10, -8.3000000000000007 },
-  { 983725331213.07190, 10, -8.1999999999999993 },
-  { 861843493572.90051, 10, -8.0999999999999996 },
-  { 753610971616.00000, 10, -8.0000000000000000 },
-  { 657663121163.02454, 10, -7.9000000000000004 },
-  { 572755206432.81335, 10, -7.7999999999999998 },
-  { 497753328723.87518, 10, -7.7000000000000002 },
-  { 431625929570.40063, 10, -7.5999999999999996 },
-  { 373435839135.00000, 10, -7.5000000000000000 },
-  { 322332841721.55731, 10, -7.4000000000000004 },
-  { 277546731384.01782, 10, -7.2999999999999998 },
-  { 238380831670.89990, 10, -7.2000000000000002 },
-  { 204205954581.24731, 10, -7.0999999999999996 },
-  { 174454774816.00000, 10, -7.0000000000000000 },
-  { 148616596389.67230, 10, -6.9000000000000004 },
-  { 126232489621.23923, 10, -6.7999999999999998 },
-  { 106890777450.54663, 10, -6.7000000000000002 },
-  { 90222850927.787979, 10, -6.5999999999999996 },
-  { 75899294599.000000, 10, -6.5000000000000000 },
-  { 63626303360.468109, 10, -6.4000000000000004 },
-  { 53142373179.806053, 10, -6.2999999999999998 },
-  { 44215248881.625534, 10, -6.2000000000000002 },
-  { 36639112971.527679, 10, -6.0999999999999996 },
-  { 30232000224.000000, 10, -6.0000000000000000 },
-  { 24833423488.050617, 10, -5.9000000000000004 },
-  { 20302196869.444584, 10, -5.7999999999999998 },
-  { 16514443130.579359, 10, -5.7000000000000002 },
-  { 13361772808.732477, 10, -5.5999999999999996 },
-  { 10749623191.000000, 10, -5.5000000000000000 },
-  { 8595745900.0898170, 10, -5.4000000000000004 },
-  { 6828832439.6160822, 10, -5.2999999999999998 },
-  { 5387267621.0259018, 10, -5.2000000000000002 },
-  { 4218001347.1524582, 10, -5.0999999999999996 },
-  { 3275529760.0000000, 10, -5.0000000000000000 },
-  { 2520977273.0966806, 10, -4.9000000000000004 },
-  { 1921271501.9744270, 10, -4.7999999999999998 },
-  { 1448403580.4203825, 10, -4.7000000000000002 },
-  { 1078766805.4651456, 10, -4.5999999999999996 },
-  { 792566991.00000000, 10, -4.5000000000000000 },
-  { 573298328.81993556, 10, -4.4000000000000004 },
-  { 407278957.14375639, 10, -4.2999999999999998 },
-  { 283240820.63788313, 10, -4.2000000000000002 },
-  { 191968773.03860721, 10, -4.0999999999999996 },
-  { 125984224.00000000, 10, -4.0000000000000000 },
-  { 79268966.162877649, 10, -3.9000000000000004 },
-  { 47025137.016035721, 10, -3.7999999999999998 },
-  { 25467573.275709353, 10, -3.7000000000000002 },
-  { 11645103.614666298, 10, -3.5999999999999996 },
-  { 3287599.0000000000, 10, -3.5000000000000000 },
-  { -1324140.9798373245, 10, -3.4000000000000004 },
-  { -3468342.2313268245, 10, -3.2999999999999998 },
-  { -4074495.5241857050, 10, -3.2000000000000002 },
-  { -3800107.4878923763, 10, -3.0999999999999996 },
-  { -3093984.0000000000, 10, -3.0000000000000000 },
-  { -2247873.5653938209, 10, -2.9000000000000004 },
-  { -1438117.1978829810, 10, -2.7999999999999998 },
-  { -758781.93281034287, 10, -2.7000000000000002 },
-  { -247597.05012469599, 10, -2.5999999999999996 },
-  { 94135.000000000000, 10, -2.5000000000000000 },
-  { 286617.47398410190, 10, -2.4000000000000004 },
-  { 360718.79745525768, 10, -2.2999999999999998 },
-  { 350419.82826741762, 10, -2.2000000000000002 },
-  { 287863.09027338214, 10, -2.0999999999999996 },
-  { 200416.00000000000, 10, -2.0000000000000000 },
-  { 109249.22783242268, 10, -1.9000000000000004 },
-  { 29012.094015898125, 10, -1.8000000000000007 },
-  { -31740.330680422732, 10, -1.6999999999999993 },
-  { -69648.597834137676, 10, -1.5999999999999996 },
-  { -85401.000000000000, 10, -1.5000000000000000 },
-  { -82507.675752857642, 10, -1.4000000000000004 },
-  { -66123.413033062563, 10, -1.3000000000000007 },
-  { -42007.465141862223, 10, -1.1999999999999993 },
-  { -15676.055823257526, 10, -1.0999999999999996 },
-  { 8224.0000000000000, 10, -1.0000000000000000 },
-  { 26314.366684262357, 10, -0.90000000000000036 },
-  { 36668.344916377559, 10, -0.80000000000000071 },
-  { 38802.826035097583, 10, -0.69999999999999929 },
-  { 33513.167890022363, 10, -0.59999999999999964 },
-  { 22591.000000000000, 10, -0.50000000000000000 },
-  { 8467.6907597824556, 10, -0.40000000000000036 },
-  { -6173.8524877822965, 10, -0.30000000000000071 },
-  { -18778.856957542470, 10, -0.19999999999999929 },
-  { -27256.158950297624, 10, -0.099999999999999645 },
-  { -30240.000000000000, 10, 0.0000000000000000 },
-  { -27256.158950297624, 10, 0.099999999999999645 },
-  { -18778.856957542470, 10, 0.19999999999999929 },
-  { -6173.8524877822965, 10, 0.30000000000000071 },
-  { 8467.6907597824556, 10, 0.40000000000000036 },
-  { 22591.000000000000, 10, 0.50000000000000000 },
-  { 33513.167890022363, 10, 0.59999999999999964 },
-  { 38802.826035097583, 10, 0.69999999999999929 },
-  { 36668.344916377559, 10, 0.80000000000000071 },
-  { 26314.366684262357, 10, 0.90000000000000036 },
-  { 8224.0000000000000, 10, 1.0000000000000000 },
-  { -15676.055823257526, 10, 1.0999999999999996 },
-  { -42007.465141862223, 10, 1.1999999999999993 },
-  { -66123.413033062563, 10, 1.3000000000000007 },
-  { -82507.675752857642, 10, 1.4000000000000004 },
-  { -85401.000000000000, 10, 1.5000000000000000 },
-  { -69648.597834137676, 10, 1.5999999999999996 },
-  { -31740.330680422732, 10, 1.6999999999999993 },
-  { 29012.094015898125, 10, 1.8000000000000007 },
-  { 109249.22783242268, 10, 1.9000000000000004 },
-  { 200416.00000000000, 10, 2.0000000000000000 },
-  { 287863.09027338214, 10, 2.0999999999999996 },
-  { 350419.82826741732, 10, 2.1999999999999993 },
-  { 360718.79745525745, 10, 2.3000000000000007 },
-  { 286617.47398410190, 10, 2.4000000000000004 },
-  { 94135.000000000000, 10, 2.5000000000000000 },
-  { -247597.05012469599, 10, 2.5999999999999996 },
-  { -758781.93281033845, 10, 2.6999999999999993 },
-  { -1438117.1978829878, 10, 2.8000000000000007 },
-  { -2247873.5653938209, 10, 2.9000000000000004 },
-  { -3093984.0000000000, 10, 3.0000000000000000 },
-  { -3800107.4878923763, 10, 3.0999999999999996 },
-  { -4074495.5241857003, 10, 3.1999999999999993 },
-  { -3468342.2313268133, 10, 3.3000000000000007 },
-  { -1324140.9798373245, 10, 3.4000000000000004 },
-  { 3287599.0000000000, 10, 3.5000000000000000 },
-  { 11645103.614666298, 10, 3.5999999999999996 },
-  { 25467573.275709212, 10, 3.6999999999999993 },
-  { 47025137.016035900, 10, 3.8000000000000007 },
-  { 79268966.162877649, 10, 3.9000000000000004 },
-  { 125984224.00000000, 10, 4.0000000000000000 },
-  { 191968773.03860721, 10, 4.0999999999999996 },
-  { 283240820.63788199, 10, 4.1999999999999993 },
-  { 407278957.14375770, 10, 4.3000000000000007 },
-  { 573298328.81993556, 10, 4.4000000000000004 },
-  { 792566991.00000000, 10, 4.5000000000000000 },
-  { 1078766805.4651456, 10, 4.5999999999999996 },
-  { 1448403580.4203794, 10, 4.6999999999999993 },
-  { 1921271501.9744320, 10, 4.8000000000000007 },
-  { 2520977273.0966806, 10, 4.9000000000000004 },
-  { 3275529760.0000000, 10, 5.0000000000000000 },
-  { 4218001347.1524582, 10, 5.0999999999999996 },
-  { 5387267621.0258913, 10, 5.1999999999999993 },
-  { 6828832439.6160927, 10, 5.3000000000000007 },
-  { 8595745900.0898170, 10, 5.4000000000000004 },
-  { 10749623191.000000, 10, 5.5000000000000000 },
-  { 13361772808.732477, 10, 5.5999999999999996 },
-  { 16514443130.579332, 10, 5.6999999999999993 },
-  { 20302196869.444618, 10, 5.8000000000000007 },
-  { 24833423488.050617, 10, 5.9000000000000004 },
-  { 30232000224.000000, 10, 6.0000000000000000 },
-  { 36639112971.527824, 10, 6.1000000000000014 },
-  { 44215248881.625443, 10, 6.1999999999999993 },
-  { 53142373179.806152, 10, 6.3000000000000007 },
-  { 63626303360.467911, 10, 6.3999999999999986 },
-  { 75899294599.000000, 10, 6.5000000000000000 },
-  { 90222850927.788208, 10, 6.6000000000000014 },
-  { 106890777450.54652, 10, 6.6999999999999993 },
-  { 126232489621.23946, 10, 6.8000000000000007 },
-  { 148616596389.67184, 10, 6.8999999999999986 },
-  { 174454774816.00000, 10, 7.0000000000000000 },
-  { 204205954581.24780, 10, 7.1000000000000014 },
-  { 238380831670.89960, 10, 7.1999999999999993 },
-  { 277546731384.01831, 10, 7.3000000000000007 },
-  { 322332841721.55646, 10, 7.3999999999999986 },
-  { 373435839135.00000, 10, 7.5000000000000000 },
-  { 431625929570.40161, 10, 7.6000000000000014 },
-  { 497753328723.87476, 10, 7.6999999999999993 },
-  { 572755206432.81396, 10, 7.8000000000000007 },
-  { 657663121163.02307, 10, 7.8999999999999986 },
-  { 753610971616.00000, 10, 8.0000000000000000 },
-  { 861843493572.90283, 10, 8.1000000000000014 },
-  { 983725331213.07190, 10, 8.1999999999999993 },
-  { 1120750713295.2778, 10, 8.3000000000000007 },
-  { 1274553765769.7439, 10, 8.3999999999999986 },
-  { 1446919493599.0000, 10, 8.5000000000000000 },
-  { 1639795465805.4785, 10, 8.6000000000000014 },
-  { 1855304239034.7983, 10, 8.6999999999999993 },
-  { 2095756556225.3428, 10, 8.8000000000000007 },
-  { 2363665358307.8442, 10, 8.8999999999999986 },
-  { 2661760648224.0000, 10, 9.0000000000000000 },
-  { 2993005247949.7671, 10, 9.1000000000000014 },
-  { 3360611490639.0889, 10, 9.1999999999999993 },
-  { 3768058891466.0469, 10, 9.3000000000000007 },
-  { 4219112842239.1055, 10, 9.3999999999999986 },
-  { 4717844376391.0000, 10, 9.5000000000000000 },
-  { 5268651052510.4785, 10, 9.6000000000000014 },
-  { 5876279006180.6377, 10, 9.6999999999999993 },
-  { 6545846221520.6768, 10, 9.8000000000000007 },
-  { 7282867075495.2949, 10, 9.8999999999999986 },
-  { 8093278209760.0000, 10, 10.000000000000000 },
+  { 8093278209760.0000, 10, -10.000000000000000, 0.0 },
+  { 7282867075495.3066, 10, -9.9000000000000004, 0.0 },
+  { 6545846221520.6768, 10, -9.8000000000000007, 0.0 },
+  { 5876279006180.6377, 10, -9.6999999999999993, 0.0 },
+  { 5268651052510.4668, 10, -9.5999999999999996, 0.0 },
+  { 4717844376391.0000, 10, -9.5000000000000000, 0.0 },
+  { 4219112842239.1147, 10, -9.4000000000000004, 0.0 },
+  { 3768058891466.0469, 10, -9.3000000000000007, 0.0 },
+  { 3360611490639.0889, 10, -9.1999999999999993, 0.0 },
+  { 2993005247949.7607, 10, -9.0999999999999996, 0.0 },
+  { 2661760648224.0000, 10, -9.0000000000000000, 0.0 },
+  { 2363665358307.8496, 10, -8.9000000000000004, 0.0 },
+  { 2095756556225.3428, 10, -8.8000000000000007, 0.0 },
+  { 1855304239034.7983, 10, -8.6999999999999993, 0.0 },
+  { 1639795465805.4746, 10, -8.5999999999999996, 0.0 },
+  { 1446919493599.0000, 10, -8.5000000000000000, 0.0 },
+  { 1274553765769.7463, 10, -8.4000000000000004, 0.0 },
+  { 1120750713295.2778, 10, -8.3000000000000007, 0.0 },
+  { 983725331213.07190, 10, -8.1999999999999993, 0.0 },
+  { 861843493572.90051, 10, -8.0999999999999996, 0.0 },
+  { 753610971616.00000, 10, -8.0000000000000000, 0.0 },
+  { 657663121163.02454, 10, -7.9000000000000004, 0.0 },
+  { 572755206432.81335, 10, -7.7999999999999998, 0.0 },
+  { 497753328723.87476, 10, -7.6999999999999993, 0.0 },
+  { 431625929570.40063, 10, -7.5999999999999996, 0.0 },
+  { 373435839135.00000, 10, -7.5000000000000000, 0.0 },
+  { 322332841721.55731, 10, -7.4000000000000004, 0.0 },
+  { 277546731384.01782, 10, -7.2999999999999998, 0.0 },
+  { 238380831670.89960, 10, -7.1999999999999993, 0.0 },
+  { 204205954581.24731, 10, -7.0999999999999996, 0.0 },
+  { 174454774816.00000, 10, -7.0000000000000000, 0.0 },
+  { 148616596389.67230, 10, -6.9000000000000004, 0.0 },
+  { 126232489621.23923, 10, -6.7999999999999998, 0.0 },
+  { 106890777450.54652, 10, -6.6999999999999993, 0.0 },
+  { 90222850927.787979, 10, -6.5999999999999996, 0.0 },
+  { 75899294599.000000, 10, -6.5000000000000000, 0.0 },
+  { 63626303360.468109, 10, -6.4000000000000004, 0.0 },
+  { 53142373179.806053, 10, -6.2999999999999998, 0.0 },
+  { 44215248881.625443, 10, -6.1999999999999993, 0.0 },
+  { 36639112971.527679, 10, -6.0999999999999996, 0.0 },
+  { 30232000224.000000, 10, -6.0000000000000000, 0.0 },
+  { 24833423488.050575, 10, -5.8999999999999995, 0.0 },
+  { 20302196869.444584, 10, -5.7999999999999998, 0.0 },
+  { 16514443130.579359, 10, -5.7000000000000002, 0.0 },
+  { 13361772808.732477, 10, -5.5999999999999996, 0.0 },
+  { 10749623191.000000, 10, -5.5000000000000000, 0.0 },
+  { 8595745900.0898018, 10, -5.3999999999999995, 0.0 },
+  { 6828832439.6160822, 10, -5.2999999999999998, 0.0 },
+  { 5387267621.0258913, 10, -5.1999999999999993, 0.0 },
+  { 4218001347.1524582, 10, -5.0999999999999996, 0.0 },
+  { 3275529760.0000000, 10, -5.0000000000000000, 0.0 },
+  { 2520977273.0966735, 10, -4.8999999999999995, 0.0 },
+  { 1921271501.9744270, 10, -4.7999999999999998, 0.0 },
+  { 1448403580.4203794, 10, -4.6999999999999993, 0.0 },
+  { 1078766805.4651456, 10, -4.5999999999999996, 0.0 },
+  { 792566991.00000000, 10, -4.5000000000000000, 0.0 },
+  { 573298328.81993365, 10, -4.3999999999999995, 0.0 },
+  { 407278957.14375639, 10, -4.2999999999999998, 0.0 },
+  { 283240820.63788199, 10, -4.1999999999999993, 0.0 },
+  { 191968773.03860721, 10, -4.0999999999999996, 0.0 },
+  { 125984224.00000000, 10, -4.0000000000000000, 0.0 },
+  { 79268966.162877351, 10, -3.8999999999999995, 0.0 },
+  { 47025137.016035721, 10, -3.7999999999999998, 0.0 },
+  { 25467573.275709212, 10, -3.6999999999999993, 0.0 },
+  { 11645103.614666298, 10, -3.5999999999999996, 0.0 },
+  { 3287599.0000000000, 10, -3.5000000000000000, 0.0 },
+  { -1324140.9798373580, 10, -3.3999999999999995, 0.0 },
+  { -3468342.2313268245, 10, -3.2999999999999998, 0.0 },
+  { -4074495.5241857003, 10, -3.1999999999999993, 0.0 },
+  { -3800107.4878923763, 10, -3.0999999999999996, 0.0 },
+  { -3093984.0000000000, 10, -3.0000000000000000, 0.0 },
+  { -2247873.5653938125, 10, -2.8999999999999995, 0.0 },
+  { -1438117.1978829810, 10, -2.7999999999999998, 0.0 },
+  { -758781.93281033845, 10, -2.6999999999999993, 0.0 },
+  { -247597.05012469599, 10, -2.5999999999999996, 0.0 },
+  { 94135.000000000000, 10, -2.5000000000000000, 0.0 },
+  { 286617.47398410313, 10, -2.3999999999999995, 0.0 },
+  { 360718.79745525768, 10, -2.2999999999999998, 0.0 },
+  { 350419.82826741732, 10, -2.1999999999999993, 0.0 },
+  { 287863.09027338214, 10, -2.0999999999999996, 0.0 },
+  { 200416.00000000000, 10, -2.0000000000000000, 0.0 },
+  { 109249.22783242268, 10, -1.9000000000000004, 0.0 },
+  { 29012.094015896859, 10, -1.7999999999999989, 0.0 },
+  { -31740.330680422732, 10, -1.6999999999999993, 0.0 },
+  { -69648.597834137676, 10, -1.5999999999999996, 0.0 },
+  { -85401.000000000000, 10, -1.5000000000000000, 0.0 },
+  { -82507.675752857642, 10, -1.4000000000000004, 0.0 },
+  { -66123.413033062170, 10, -1.2999999999999989, 0.0 },
+  { -42007.465141862223, 10, -1.1999999999999993, 0.0 },
+  { -15676.055823257526, 10, -1.0999999999999996, 0.0 },
+  { 8224.0000000000000, 10, -1.0000000000000000, 0.0 },
+  { 26314.366684262357, 10, -0.90000000000000036, 0.0 },
+  { 36668.344916377660, 10, -0.79999999999999893, 0.0 },
+  { 38802.826035097583, 10, -0.69999999999999929, 0.0 },
+  { 33513.167890022363, 10, -0.59999999999999964, 0.0 },
+  { 22591.000000000000, 10, -0.50000000000000000, 0.0 },
+  { 8467.6907597821937, 10, -0.39999999999999858, 0.0 },
+  { -6173.8524877825521, 10, -0.29999999999999893, 0.0 },
+  { -18778.856957542470, 10, -0.19999999999999929, 0.0 },
+  { -27256.158950297624, 10, -0.099999999999999645, 0.0 },
+  { -30240.000000000000, 10, 0.0000000000000000, 0.0 },
+  { -27256.158950297515, 10, 0.10000000000000142, 0.0 },
+  { -18778.856957542288, 10, 0.20000000000000107, 0.0 },
+  { -6173.8524877822965, 10, 0.30000000000000071, 0.0 },
+  { 8467.6907597824556, 10, 0.40000000000000036, 0.0 },
+  { 22591.000000000000, 10, 0.50000000000000000, 0.0 },
+  { 33513.167890022516, 10, 0.60000000000000142, 0.0 },
+  { 38802.826035097620, 10, 0.70000000000000107, 0.0 },
+  { 36668.344916377559, 10, 0.80000000000000071, 0.0 },
+  { 26314.366684262357, 10, 0.90000000000000036, 0.0 },
+  { 8224.0000000000000, 10, 1.0000000000000000, 0.0 },
+  { -15676.055823257961, 10, 1.1000000000000014, 0.0 },
+  { -42007.465141862689, 10, 1.2000000000000011, 0.0 },
+  { -66123.413033062563, 10, 1.3000000000000007, 0.0 },
+  { -82507.675752857642, 10, 1.4000000000000004, 0.0 },
+  { -85401.000000000000, 10, 1.5000000000000000, 0.0 },
+  { -69648.597834137239, 10, 1.6000000000000014, 0.0 },
+  { -31740.330680421859, 10, 1.7000000000000011, 0.0 },
+  { 29012.094015898125, 10, 1.8000000000000007, 0.0 },
+  { 109249.22783242268, 10, 1.9000000000000004, 0.0 },
+  { 200416.00000000000, 10, 2.0000000000000000, 0.0 },
+  { 287863.09027338354, 10, 2.1000000000000014, 0.0 },
+  { 350419.82826741802, 10, 2.2000000000000011, 0.0 },
+  { 360718.79745525745, 10, 2.3000000000000007, 0.0 },
+  { 286617.47398410190, 10, 2.4000000000000004, 0.0 },
+  { 94135.000000000000, 10, 2.5000000000000000, 0.0 },
+  { -247597.05012470379, 10, 2.6000000000000014, 0.0 },
+  { -758781.93281034881, 10, 2.7000000000000011, 0.0 },
+  { -1438117.1978829878, 10, 2.8000000000000007, 0.0 },
+  { -2247873.5653938209, 10, 2.9000000000000004, 0.0 },
+  { -3093984.0000000000, 10, 3.0000000000000000, 0.0 },
+  { -3800107.4878923851, 10, 3.1000000000000014, 0.0 },
+  { -4074495.5241857045, 10, 3.2000000000000011, 0.0 },
+  { -3468342.2313268133, 10, 3.3000000000000007, 0.0 },
+  { -1324140.9798373245, 10, 3.4000000000000004, 0.0 },
+  { 3287599.0000000000, 10, 3.5000000000000000, 0.0 },
+  { 11645103.614666503, 10, 3.6000000000000014, 0.0 },
+  { 25467573.275709510, 10, 3.7000000000000011, 0.0 },
+  { 47025137.016035900, 10, 3.8000000000000007, 0.0 },
+  { 79268966.162877649, 10, 3.9000000000000004, 0.0 },
+  { 125984224.00000000, 10, 4.0000000000000000, 0.0 },
+  { 191968773.03860855, 10, 4.1000000000000014, 0.0 },
+  { 283240820.63788390, 10, 4.2000000000000011, 0.0 },
+  { 407278957.14375770, 10, 4.3000000000000007, 0.0 },
+  { 573298328.81993556, 10, 4.4000000000000004, 0.0 },
+  { 792566991.00000000, 10, 4.5000000000000000, 0.0 },
+  { 1078766805.4651513, 10, 4.6000000000000014, 0.0 },
+  { 1448403580.4203873, 10, 4.7000000000000011, 0.0 },
+  { 1921271501.9744320, 10, 4.8000000000000007, 0.0 },
+  { 2520977273.0966806, 10, 4.9000000000000004, 0.0 },
+  { 3275529760.0000000, 10, 5.0000000000000000, 0.0 },
+  { 4218001347.1524763, 10, 5.1000000000000014, 0.0 },
+  { 5387267621.0259113, 10, 5.2000000000000011, 0.0 },
+  { 6828832439.6160927, 10, 5.3000000000000007, 0.0 },
+  { 8595745900.0898170, 10, 5.4000000000000004, 0.0 },
+  { 10749623191.000000, 10, 5.5000000000000000, 0.0 },
+  { 13361772808.732529, 10, 5.6000000000000014, 0.0 },
+  { 16514443130.579391, 10, 5.7000000000000011, 0.0 },
+  { 20302196869.444618, 10, 5.8000000000000007, 0.0 },
+  { 24833423488.050617, 10, 5.9000000000000004, 0.0 },
+  { 30232000224.000000, 10, 6.0000000000000000, 0.0 },
+  { 36639112971.527824, 10, 6.1000000000000014, 0.0 },
+  { 44215248881.625443, 10, 6.1999999999999993, 0.0 },
+  { 53142373179.806152, 10, 6.3000000000000007, 0.0 },
+  { 63626303360.468330, 10, 6.4000000000000021, 0.0 },
+  { 75899294599.000000, 10, 6.5000000000000000, 0.0 },
+  { 90222850927.788208, 10, 6.6000000000000014, 0.0 },
+  { 106890777450.54652, 10, 6.6999999999999993, 0.0 },
+  { 126232489621.23946, 10, 6.8000000000000007, 0.0 },
+  { 148616596389.67273, 10, 6.9000000000000021, 0.0 },
+  { 174454774816.00000, 10, 7.0000000000000000, 0.0 },
+  { 204205954581.24780, 10, 7.1000000000000014, 0.0 },
+  { 238380831670.89960, 10, 7.1999999999999993, 0.0 },
+  { 277546731384.01831, 10, 7.3000000000000007, 0.0 },
+  { 322332841721.55811, 10, 7.4000000000000021, 0.0 },
+  { 373435839135.00000, 10, 7.5000000000000000, 0.0 },
+  { 431625929570.40161, 10, 7.6000000000000014, 0.0 },
+  { 497753328723.87476, 10, 7.6999999999999993, 0.0 },
+  { 572755206432.81396, 10, 7.8000000000000007, 0.0 },
+  { 657663121163.02625, 10, 7.9000000000000021, 0.0 },
+  { 753610971616.00000, 10, 8.0000000000000000, 0.0 },
+  { 861843493572.90283, 10, 8.1000000000000014, 0.0 },
+  { 983725331213.07190, 10, 8.1999999999999993, 0.0 },
+  { 1120750713295.2778, 10, 8.3000000000000007, 0.0 },
+  { 1274553765769.7490, 10, 8.4000000000000021, 0.0 },
+  { 1446919493599.0000, 10, 8.5000000000000000, 0.0 },
+  { 1639795465805.4785, 10, 8.6000000000000014, 0.0 },
+  { 1855304239034.7983, 10, 8.6999999999999993, 0.0 },
+  { 2095756556225.3428, 10, 8.8000000000000007, 0.0 },
+  { 2363665358307.8540, 10, 8.9000000000000021, 0.0 },
+  { 2661760648224.0000, 10, 9.0000000000000000, 0.0 },
+  { 2993005247949.7671, 10, 9.1000000000000014, 0.0 },
+  { 3360611490639.1025, 10, 9.2000000000000028, 0.0 },
+  { 3768058891466.0469, 10, 9.3000000000000007, 0.0 },
+  { 4219112842239.1221, 10, 9.4000000000000021, 0.0 },
+  { 4717844376391.0000, 10, 9.5000000000000000, 0.0 },
+  { 5268651052510.4785, 10, 9.6000000000000014, 0.0 },
+  { 5876279006180.6602, 10, 9.7000000000000028, 0.0 },
+  { 6545846221520.6768, 10, 9.8000000000000007, 0.0 },
+  { 7282867075495.3213, 10, 9.9000000000000021, 0.0 },
+  { 8093278209760.0000, 10, 10.000000000000000, 0.0 },
 };
 const double toler005 = 2.5000000000000020e-13;
 
 // Test data for n=20.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hermite<double>
 data006[201] =
 {
-  { 3.6536710970888030e+25, 20, -10.000000000000000 },
-  { 2.9174932703098834e+25, 20, -9.9000000000000004 },
-  { 2.3228769039548404e+25, 20, -9.8000000000000007 },
-  { 1.8439144509496016e+25, 20, -9.6999999999999993 },
-  { 1.4591971834545420e+25, 20, -9.5999999999999996 },
-  { 1.1510764882450827e+25, 20, -9.5000000000000000 },
-  { 9.0503941245991605e+24, 20, -9.4000000000000004 },
-  { 7.0918188910312152e+24, 20, -9.3000000000000007 },
-  { 5.5376531405202033e+24, 20, -9.1999999999999993 },
-  { 4.3084410724035914e+24, 20, -9.0999999999999996 },
-  { 3.3395360269524137e+24, 20, -9.0000000000000000 },
-  { 2.5784910430831484e+24, 20, -8.9000000000000004 },
-  { 1.9828824261062853e+24, 20, -8.8000000000000007 },
-  { 1.5184989558235974e+24, 20, -8.6999999999999993 },
-  { 1.1578391431515818e+24, 20, -8.5999999999999996 },
-  { 8.7886740525023878e+23, 20, -8.5000000000000000 },
-  { 6.6398733801206072e+23, 20, -8.4000000000000004 },
-  { 4.9919656538201190e+23, 20, -8.3000000000000007 },
-  { 3.7339306542317994e+23, 20, -8.1999999999999993 },
-  { 2.7780752653950559e+23, 20, -8.0999999999999996 },
-  { 2.0554027373991249e+23, 20, -8.0000000000000000 },
-  { 1.5118471231121695e+23, 20, -7.9000000000000004 },
-  { 1.1052214218386250e+23, 20, -7.7999999999999998 },
-  { 8.0275268594719504e+22, 20, -7.7000000000000002 },
-  { 5.7909832934009042e+22, 20, -7.5999999999999996 },
-  { 4.1475563998692745e+22, 20, -7.5000000000000000 },
-  { 2.9479149729249250e+22, 20, -7.4000000000000004 },
-  { 2.0783192485964573e+22, 20, -7.2999999999999998 },
-  { 1.4526171451238503e+22, 20, -7.2000000000000002 },
-  { 1.0059323685871305e+22, 20, -7.0999999999999996 },
-  { 6.8970965604502329e+21, 20, -7.0000000000000000 },
-  { 4.6784410379528280e+21, 20, -6.9000000000000004 },
-  { 3.1367268160419670e+21, 20, -6.7999999999999998 },
-  { 2.0764831558419748e+21, 20, -6.7000000000000002 },
-  { 1.3555174744148132e+21, 20, -6.5999999999999996 },
-  { 8.7124954970091579e+20, 20, -6.5000000000000000 },
-  { 5.5033278133788108e+20, 20, -6.4000000000000004 },
-  { 3.4082412197533739e+20, 20, -6.2999999999999998 },
-  { 2.0631845648712185e+20, 20, -6.2000000000000002 },
-  { 1.2158762212269028e+20, 20, -6.0999999999999996 },
-  { 6.9364200641629315e+19, 20, -6.0000000000000000 },
-  { 3.7990093270095905e+19, 20, -5.9000000000000004 },
-  { 1.9713403927925858e+19, 20, -5.7999999999999998 },
-  { 9.4673798488533340e+18, 20, -5.7000000000000002 },
-  { 4.0046403628787825e+18, 20, -5.5999999999999996 },
-  { 1.2907686705724293e+18, 20, -5.5000000000000000 },
-  { 85277679782823936., 20, -5.4000000000000004 },
-  { -3.4359547179069376e+17, 20, -5.2999999999999998 },
-  { -4.0970873501577555e+17, 20, -5.2000000000000002 },
-  { -3.3419585613348250e+17, 20, -5.0999999999999996 },
-  { -2.2571776716382720e+17, 20, -5.0000000000000000 },
-  { -1.3051120203565566e+17, 20, -4.9000000000000004 },
-  { -62555669197021992., 20, -4.7999999999999998 },
-  { -20974173561010048., 20, -4.7000000000000002 },
-  { 519073301695656.00, 20, -4.5999999999999996 },
-  { 8939556693761121.0, 20, -4.5000000000000000 },
-  { 10070625675125180., 20, -4.4000000000000004 },
-  { 7940371996960715.0, 20, -4.2999999999999998 },
-  { 4973623686173568.0, 20, -4.2000000000000002 },
-  { 2389023282480410.0, 20, -4.0999999999999996 },
-  { 619678016654336.00, 20, -4.0000000000000000 },
-  { -339773491011946.00, 20, -3.9000000000000004 },
-  { -687467334428204.38, 20, -3.7999999999999998 },
-  { -663019129550482.75, 20, -3.7000000000000002 },
-  { -469585152350670.25, 20, -3.5999999999999996 },
-  { -245659781875039.00, 20, -3.5000000000000000 },
-  { -66042773886778.938, 20, -3.4000000000000004 },
-  { 43442261337436.312, 20, -3.2999999999999998 },
-  { 87626632986465.375, 20, -3.2000000000000002 },
-  { 85786202388511.375, 20, -3.0999999999999996 },
-  { 59990281399296.000, 20, -3.0000000000000000 },
-  { 28343496696718.070, 20, -2.9000000000000004 },
-  { 2296898915036.0859, 20, -2.7999999999999998 },
-  { -13249381789941.502, 20, -2.7000000000000002 },
-  { -18328180426561.059, 20, -2.5999999999999996 },
-  { -15799429886575.000, 20, -2.5000000000000000 },
-  { -9442592050214.3027, 20, -2.4000000000000004 },
-  { -2602375356373.2393, 20, -2.2999999999999998 },
-  { 2521759315047.8428, 20, -2.2000000000000002 },
-  { 5027779307352.6660, 20, -2.0999999999999996 },
-  { 5080118660096.0000, 20, -2.0000000000000000 },
-  { 3490463276000.5425, 20, -1.9000000000000004 },
-  { 1277254793997.1128, 20, -1.8000000000000007 },
-  { -682119355279.28784, 20, -1.6999999999999993 },
-  { -1851544254412.3203, 20, -1.5999999999999996 },
-  { -2085387081039.0000, 20, -1.5000000000000000 },
-  { -1559402933581.5054, 20, -1.4000000000000004 },
-  { -634265763221.87231, 20, -1.3000000000000007 },
-  { 295481874887.33429, 20, -1.1999999999999993 },
-  { 924603483429.34241, 20, -1.0999999999999996 },
-  { 1107214478336.0000, 20, -1.0000000000000000 },
-  { 867235623835.12463, 20, -0.90000000000000036 },
-  { 358848462745.15466, 20, -0.80000000000000071 },
-  { -202944086511.71936, 20, -0.69999999999999929 },
-  { -617730863561.32617, 20, -0.59999999999999964 },
-  { -759627879679.00000, 20, -0.50000000000000000 },
-  { -607451728035.03271, 20, -0.40000000000000036 },
-  { -240424854484.42111, 20, -0.30000000000000071 },
-  { 195759209122.61337, 20, -0.19999999999999929 },
-  { 540334019322.52014, 20, -0.099999999999999645 },
-  { 670442572800.00000, 20, 0.0000000000000000 },
-  { 540334019322.52014, 20, 0.099999999999999645 },
-  { 195759209122.61337, 20, 0.19999999999999929 },
-  { -240424854484.42111, 20, 0.30000000000000071 },
-  { -607451728035.03271, 20, 0.40000000000000036 },
-  { -759627879679.00000, 20, 0.50000000000000000 },
-  { -617730863561.32617, 20, 0.59999999999999964 },
-  { -202944086511.71936, 20, 0.69999999999999929 },
-  { 358848462745.15466, 20, 0.80000000000000071 },
-  { 867235623835.12463, 20, 0.90000000000000036 },
-  { 1107214478336.0000, 20, 1.0000000000000000 },
-  { 924603483429.34241, 20, 1.0999999999999996 },
-  { 295481874887.33429, 20, 1.1999999999999993 },
-  { -634265763221.87231, 20, 1.3000000000000007 },
-  { -1559402933581.5054, 20, 1.4000000000000004 },
-  { -2085387081039.0000, 20, 1.5000000000000000 },
-  { -1851544254412.3203, 20, 1.5999999999999996 },
-  { -682119355279.28784, 20, 1.6999999999999993 },
-  { 1277254793997.1128, 20, 1.8000000000000007 },
-  { 3490463276000.5425, 20, 1.9000000000000004 },
-  { 5080118660096.0000, 20, 2.0000000000000000 },
-  { 5027779307352.6660, 20, 2.0999999999999996 },
-  { 2521759315047.8770, 20, 2.1999999999999993 },
-  { -2602375356373.2969, 20, 2.3000000000000007 },
-  { -9442592050214.3027, 20, 2.4000000000000004 },
-  { -15799429886575.000, 20, 2.5000000000000000 },
-  { -18328180426561.059, 20, 2.5999999999999996 },
-  { -13249381789941.586, 20, 2.6999999999999993 },
-  { 2296898915036.2812, 20, 2.8000000000000007 },
-  { 28343496696718.070, 20, 2.9000000000000004 },
-  { 59990281399296.000, 20, 3.0000000000000000 },
-  { 85786202388511.375, 20, 3.0999999999999996 },
-  { 87626632986465.438, 20, 3.1999999999999993 },
-  { 43442261337435.672, 20, 3.3000000000000007 },
-  { -66042773886778.938, 20, 3.4000000000000004 },
-  { -245659781875039.00, 20, 3.5000000000000000 },
-  { -469585152350670.25, 20, 3.5999999999999996 },
-  { -663019129550482.25, 20, 3.6999999999999993 },
-  { -687467334428203.38, 20, 3.8000000000000007 },
-  { -339773491011946.00, 20, 3.9000000000000004 },
-  { 619678016654336.00, 20, 4.0000000000000000 },
-  { 2389023282480410.0, 20, 4.0999999999999996 },
-  { 4973623686173539.0, 20, 4.1999999999999993 },
-  { 7940371996960741.0, 20, 4.3000000000000007 },
-  { 10070625675125180., 20, 4.4000000000000004 },
-  { 8939556693761121.0, 20, 4.5000000000000000 },
-  { 519073301695656.00, 20, 4.5999999999999996 },
-  { -20974173561009776., 20, 4.6999999999999993 },
-  { -62555669197022528., 20, 4.8000000000000007 },
-  { -1.3051120203565566e+17, 20, 4.9000000000000004 },
-  { -2.2571776716382720e+17, 20, 5.0000000000000000 },
-  { -3.3419585613348250e+17, 20, 5.0999999999999996 },
-  { -4.0970873501577562e+17, 20, 5.1999999999999993 },
-  { -3.4359547179069216e+17, 20, 5.3000000000000007 },
-  { 85277679782823936., 20, 5.4000000000000004 },
-  { 1.2907686705724293e+18, 20, 5.5000000000000000 },
-  { 4.0046403628787825e+18, 20, 5.5999999999999996 },
-  { 9.4673798488532767e+18, 20, 5.6999999999999993 },
-  { 1.9713403927925973e+19, 20, 5.8000000000000007 },
-  { 3.7990093270095905e+19, 20, 5.9000000000000004 },
-  { 6.9364200641629315e+19, 20, 6.0000000000000000 },
-  { 1.2158762212269156e+20, 20, 6.1000000000000014 },
-  { 2.0631845648712086e+20, 20, 6.1999999999999993 },
-  { 3.4082412197533902e+20, 20, 6.3000000000000007 },
-  { 5.5033278133787696e+20, 20, 6.3999999999999986 },
-  { 8.7124954970091579e+20, 20, 6.5000000000000000 },
-  { 1.3555174744148243e+21, 20, 6.6000000000000014 },
-  { 2.0764831558419680e+21, 20, 6.6999999999999993 },
-  { 3.1367268160419775e+21, 20, 6.8000000000000007 },
-  { 4.6784410379527966e+21, 20, 6.8999999999999986 },
-  { 6.8970965604502329e+21, 20, 7.0000000000000000 },
-  { 1.0059323685871368e+22, 20, 7.1000000000000014 },
-  { 1.4526171451238465e+22, 20, 7.1999999999999993 },
-  { 2.0783192485964666e+22, 20, 7.3000000000000007 },
-  { 2.9479149729249048e+22, 20, 7.3999999999999986 },
-  { 4.1475563998692745e+22, 20, 7.5000000000000000 },
-  { 5.7909832934009378e+22, 20, 7.6000000000000014 },
-  { 8.0275268594719286e+22, 20, 7.6999999999999993 },
-  { 1.1052214218386286e+23, 20, 7.8000000000000007 },
-  { 1.5118471231121604e+23, 20, 7.8999999999999986 },
-  { 2.0554027373991249e+23, 20, 8.0000000000000000 },
-  { 2.7780752653950703e+23, 20, 8.1000000000000014 },
-  { 3.7339306542317994e+23, 20, 8.1999999999999993 },
-  { 4.9919656538201190e+23, 20, 8.3000000000000007 },
-  { 6.6398733801205790e+23, 20, 8.3999999999999986 },
-  { 8.7886740525023878e+23, 20, 8.5000000000000000 },
-  { 1.1578391431515869e+24, 20, 8.6000000000000014 },
-  { 1.5184989558235974e+24, 20, 8.6999999999999993 },
-  { 1.9828824261062853e+24, 20, 8.8000000000000007 },
-  { 2.5784910430831355e+24, 20, 8.8999999999999986 },
-  { 3.3395360269524137e+24, 20, 9.0000000000000000 },
-  { 4.3084410724036123e+24, 20, 9.1000000000000014 },
-  { 5.5376531405202033e+24, 20, 9.1999999999999993 },
-  { 7.0918188910312152e+24, 20, 9.3000000000000007 },
-  { 9.0503941245991197e+24, 20, 9.3999999999999986 },
-  { 1.1510764882450827e+25, 20, 9.5000000000000000 },
-  { 1.4591971834545491e+25, 20, 9.6000000000000014 },
-  { 1.8439144509496016e+25, 20, 9.6999999999999993 },
-  { 2.3228769039548404e+25, 20, 9.8000000000000007 },
-  { 2.9174932703098731e+25, 20, 9.8999999999999986 },
-  { 3.6536710970888030e+25, 20, 10.000000000000000 },
+  { 3.6536710970888030e+25, 20, -10.000000000000000, 0.0 },
+  { 2.9174932703098834e+25, 20, -9.9000000000000004, 0.0 },
+  { 2.3228769039548404e+25, 20, -9.8000000000000007, 0.0 },
+  { 1.8439144509496016e+25, 20, -9.6999999999999993, 0.0 },
+  { 1.4591971834545420e+25, 20, -9.5999999999999996, 0.0 },
+  { 1.1510764882450827e+25, 20, -9.5000000000000000, 0.0 },
+  { 9.0503941245991605e+24, 20, -9.4000000000000004, 0.0 },
+  { 7.0918188910312152e+24, 20, -9.3000000000000007, 0.0 },
+  { 5.5376531405202033e+24, 20, -9.1999999999999993, 0.0 },
+  { 4.3084410724035914e+24, 20, -9.0999999999999996, 0.0 },
+  { 3.3395360269524137e+24, 20, -9.0000000000000000, 0.0 },
+  { 2.5784910430831484e+24, 20, -8.9000000000000004, 0.0 },
+  { 1.9828824261062853e+24, 20, -8.8000000000000007, 0.0 },
+  { 1.5184989558235974e+24, 20, -8.6999999999999993, 0.0 },
+  { 1.1578391431515818e+24, 20, -8.5999999999999996, 0.0 },
+  { 8.7886740525023878e+23, 20, -8.5000000000000000, 0.0 },
+  { 6.6398733801206072e+23, 20, -8.4000000000000004, 0.0 },
+  { 4.9919656538201190e+23, 20, -8.3000000000000007, 0.0 },
+  { 3.7339306542317994e+23, 20, -8.1999999999999993, 0.0 },
+  { 2.7780752653950559e+23, 20, -8.0999999999999996, 0.0 },
+  { 2.0554027373991249e+23, 20, -8.0000000000000000, 0.0 },
+  { 1.5118471231121695e+23, 20, -7.9000000000000004, 0.0 },
+  { 1.1052214218386250e+23, 20, -7.7999999999999998, 0.0 },
+  { 8.0275268594719286e+22, 20, -7.6999999999999993, 0.0 },
+  { 5.7909832934009042e+22, 20, -7.5999999999999996, 0.0 },
+  { 4.1475563998692745e+22, 20, -7.5000000000000000, 0.0 },
+  { 2.9479149729249250e+22, 20, -7.4000000000000004, 0.0 },
+  { 2.0783192485964573e+22, 20, -7.2999999999999998, 0.0 },
+  { 1.4526171451238465e+22, 20, -7.1999999999999993, 0.0 },
+  { 1.0059323685871305e+22, 20, -7.0999999999999996, 0.0 },
+  { 6.8970965604502329e+21, 20, -7.0000000000000000, 0.0 },
+  { 4.6784410379528280e+21, 20, -6.9000000000000004, 0.0 },
+  { 3.1367268160419670e+21, 20, -6.7999999999999998, 0.0 },
+  { 2.0764831558419680e+21, 20, -6.6999999999999993, 0.0 },
+  { 1.3555174744148132e+21, 20, -6.5999999999999996, 0.0 },
+  { 8.7124954970091579e+20, 20, -6.5000000000000000, 0.0 },
+  { 5.5033278133788108e+20, 20, -6.4000000000000004, 0.0 },
+  { 3.4082412197533739e+20, 20, -6.2999999999999998, 0.0 },
+  { 2.0631845648712086e+20, 20, -6.1999999999999993, 0.0 },
+  { 1.2158762212269028e+20, 20, -6.0999999999999996, 0.0 },
+  { 6.9364200641629315e+19, 20, -6.0000000000000000, 0.0 },
+  { 3.7990093270095700e+19, 20, -5.8999999999999995, 0.0 },
+  { 1.9713403927925858e+19, 20, -5.7999999999999998, 0.0 },
+  { 9.4673798488533340e+18, 20, -5.7000000000000002, 0.0 },
+  { 4.0046403628787825e+18, 20, -5.5999999999999996, 0.0 },
+  { 1.2907686705724293e+18, 20, -5.5000000000000000, 0.0 },
+  { 85277679782819584., 20, -5.3999999999999995, 0.0 },
+  { -3.4359547179069376e+17, 20, -5.2999999999999998, 0.0 },
+  { -4.0970873501577562e+17, 20, -5.1999999999999993, 0.0 },
+  { -3.3419585613348250e+17, 20, -5.0999999999999996, 0.0 },
+  { -2.2571776716382720e+17, 20, -5.0000000000000000, 0.0 },
+  { -1.3051120203565493e+17, 20, -4.8999999999999995, 0.0 },
+  { -62555669197021992., 20, -4.7999999999999998, 0.0 },
+  { -20974173561009776., 20, -4.6999999999999993, 0.0 },
+  { 519073301695656.00, 20, -4.5999999999999996, 0.0 },
+  { 8939556693761121.0, 20, -4.5000000000000000, 0.0 },
+  { 10070625675125174., 20, -4.3999999999999995, 0.0 },
+  { 7940371996960715.0, 20, -4.2999999999999998, 0.0 },
+  { 4973623686173539.0, 20, -4.1999999999999993, 0.0 },
+  { 2389023282480410.0, 20, -4.0999999999999996, 0.0 },
+  { 619678016654336.00, 20, -4.0000000000000000, 0.0 },
+  { -339773491011950.50, 20, -3.8999999999999995, 0.0 },
+  { -687467334428204.38, 20, -3.7999999999999998, 0.0 },
+  { -663019129550482.25, 20, -3.6999999999999993, 0.0 },
+  { -469585152350670.25, 20, -3.5999999999999996, 0.0 },
+  { -245659781875039.00, 20, -3.5000000000000000, 0.0 },
+  { -66042773886777.562, 20, -3.3999999999999995, 0.0 },
+  { 43442261337436.312, 20, -3.2999999999999998, 0.0 },
+  { 87626632986465.438, 20, -3.1999999999999993, 0.0 },
+  { 85786202388511.375, 20, -3.0999999999999996, 0.0 },
+  { 59990281399296.000, 20, -3.0000000000000000, 0.0 },
+  { 28343496696717.773, 20, -2.8999999999999995, 0.0 },
+  { 2296898915036.0859, 20, -2.7999999999999998, 0.0 },
+  { -13249381789941.586, 20, -2.6999999999999993, 0.0 },
+  { -18328180426561.059, 20, -2.5999999999999996, 0.0 },
+  { -15799429886575.000, 20, -2.5000000000000000, 0.0 },
+  { -9442592050214.2422, 20, -2.3999999999999995, 0.0 },
+  { -2602375356373.2393, 20, -2.2999999999999998, 0.0 },
+  { 2521759315047.8770, 20, -2.1999999999999993, 0.0 },
+  { 5027779307352.6660, 20, -2.0999999999999996, 0.0 },
+  { 5080118660096.0000, 20, -2.0000000000000000, 0.0 },
+  { 3490463276000.5425, 20, -1.9000000000000004, 0.0 },
+  { 1277254793997.0737, 20, -1.7999999999999989, 0.0 },
+  { -682119355279.28784, 20, -1.6999999999999993, 0.0 },
+  { -1851544254412.3203, 20, -1.5999999999999996, 0.0 },
+  { -2085387081039.0000, 20, -1.5000000000000000, 0.0 },
+  { -1559402933581.5054, 20, -1.4000000000000004, 0.0 },
+  { -634265763221.85437, 20, -1.2999999999999989, 0.0 },
+  { 295481874887.33429, 20, -1.1999999999999993, 0.0 },
+  { 924603483429.34241, 20, -1.0999999999999996, 0.0 },
+  { 1107214478336.0000, 20, -1.0000000000000000, 0.0 },
+  { 867235623835.12463, 20, -0.90000000000000036, 0.0 },
+  { 358848462745.14441, 20, -0.79999999999999893, 0.0 },
+  { -202944086511.71936, 20, -0.69999999999999929, 0.0 },
+  { -617730863561.32617, 20, -0.59999999999999964, 0.0 },
+  { -759627879679.00000, 20, -0.50000000000000000, 0.0 },
+  { -607451728035.02795, 20, -0.39999999999999858, 0.0 },
+  { -240424854484.41342, 20, -0.29999999999999893, 0.0 },
+  { 195759209122.61337, 20, -0.19999999999999929, 0.0 },
+  { 540334019322.52014, 20, -0.099999999999999645, 0.0 },
+  { 670442572800.00000, 20, 0.0000000000000000, 0.0 },
+  { 540334019322.51575, 20, 0.10000000000000142, 0.0 },
+  { 195759209122.60626, 20, 0.20000000000000107, 0.0 },
+  { -240424854484.42111, 20, 0.30000000000000071, 0.0 },
+  { -607451728035.03271, 20, 0.40000000000000036, 0.0 },
+  { -759627879679.00000, 20, 0.50000000000000000, 0.0 },
+  { -617730863561.32117, 20, 0.60000000000000142, 0.0 },
+  { -202944086511.71027, 20, 0.70000000000000107, 0.0 },
+  { 358848462745.15466, 20, 0.80000000000000071, 0.0 },
+  { 867235623835.12463, 20, 0.90000000000000036, 0.0 },
+  { 1107214478336.0000, 20, 1.0000000000000000, 0.0 },
+  { 924603483429.33521, 20, 1.1000000000000014, 0.0 },
+  { 295481874887.31995, 20, 1.2000000000000011, 0.0 },
+  { -634265763221.87231, 20, 1.3000000000000007, 0.0 },
+  { -1559402933581.5054, 20, 1.4000000000000004, 0.0 },
+  { -2085387081039.0000, 20, 1.5000000000000000, 0.0 },
+  { -1851544254412.3086, 20, 1.6000000000000014, 0.0 },
+  { -682119355279.25952, 20, 1.7000000000000011, 0.0 },
+  { 1277254793997.1128, 20, 1.8000000000000007, 0.0 },
+  { 3490463276000.5425, 20, 1.9000000000000004, 0.0 },
+  { 5080118660096.0000, 20, 2.0000000000000000, 0.0 },
+  { 5027779307352.6436, 20, 2.1000000000000014, 0.0 },
+  { 2521759315047.8071, 20, 2.2000000000000011, 0.0 },
+  { -2602375356373.2969, 20, 2.3000000000000007, 0.0 },
+  { -9442592050214.3027, 20, 2.4000000000000004, 0.0 },
+  { -15799429886575.000, 20, 2.5000000000000000, 0.0 },
+  { -18328180426561.039, 20, 2.6000000000000014, 0.0 },
+  { -13249381789941.420, 20, 2.7000000000000011, 0.0 },
+  { 2296898915036.2812, 20, 2.8000000000000007, 0.0 },
+  { 28343496696718.070, 20, 2.9000000000000004, 0.0 },
+  { 59990281399296.000, 20, 3.0000000000000000, 0.0 },
+  { 85786202388511.641, 20, 3.1000000000000014, 0.0 },
+  { 87626632986465.219, 20, 3.2000000000000011, 0.0 },
+  { 43442261337435.672, 20, 3.3000000000000007, 0.0 },
+  { -66042773886778.938, 20, 3.4000000000000004, 0.0 },
+  { -245659781875039.00, 20, 3.5000000000000000, 0.0 },
+  { -469585152350674.31, 20, 3.6000000000000014, 0.0 },
+  { -663019129550484.62, 20, 3.7000000000000011, 0.0 },
+  { -687467334428203.38, 20, 3.8000000000000007, 0.0 },
+  { -339773491011946.00, 20, 3.9000000000000004, 0.0 },
+  { 619678016654336.00, 20, 4.0000000000000000, 0.0 },
+  { 2389023282480449.0, 20, 4.1000000000000014, 0.0 },
+  { 4973623686173592.0, 20, 4.2000000000000011, 0.0 },
+  { 7940371996960741.0, 20, 4.3000000000000007, 0.0 },
+  { 10070625675125180., 20, 4.4000000000000004, 0.0 },
+  { 8939556693761121.0, 20, 4.5000000000000000, 0.0 },
+  { 519073301695404.00, 20, 4.6000000000000014, 0.0 },
+  { -20974173561010304., 20, 4.7000000000000011, 0.0 },
+  { -62555669197022528., 20, 4.8000000000000007, 0.0 },
+  { -1.3051120203565566e+17, 20, 4.9000000000000004, 0.0 },
+  { -2.2571776716382720e+17, 20, 5.0000000000000000, 0.0 },
+  { -3.3419585613348416e+17, 20, 5.1000000000000014, 0.0 },
+  { -4.0970873501577613e+17, 20, 5.2000000000000011, 0.0 },
+  { -3.4359547179069216e+17, 20, 5.3000000000000007, 0.0 },
+  { 85277679782823936., 20, 5.4000000000000004, 0.0 },
+  { 1.2907686705724293e+18, 20, 5.5000000000000000, 0.0 },
+  { 4.0046403628788460e+18, 20, 5.6000000000000014, 0.0 },
+  { 9.4673798488534159e+18, 20, 5.7000000000000011, 0.0 },
+  { 1.9713403927925973e+19, 20, 5.8000000000000007, 0.0 },
+  { 3.7990093270095905e+19, 20, 5.9000000000000004, 0.0 },
+  { 6.9364200641629315e+19, 20, 6.0000000000000000, 0.0 },
+  { 1.2158762212269156e+20, 20, 6.1000000000000014, 0.0 },
+  { 2.0631845648712086e+20, 20, 6.1999999999999993, 0.0 },
+  { 3.4082412197533902e+20, 20, 6.3000000000000007, 0.0 },
+  { 5.5033278133788620e+20, 20, 6.4000000000000021, 0.0 },
+  { 8.7124954970091579e+20, 20, 6.5000000000000000, 0.0 },
+  { 1.3555174744148243e+21, 20, 6.6000000000000014, 0.0 },
+  { 2.0764831558419680e+21, 20, 6.6999999999999993, 0.0 },
+  { 3.1367268160419775e+21, 20, 6.8000000000000007, 0.0 },
+  { 4.6784410379528606e+21, 20, 6.9000000000000021, 0.0 },
+  { 6.8970965604502329e+21, 20, 7.0000000000000000, 0.0 },
+  { 1.0059323685871368e+22, 20, 7.1000000000000014, 0.0 },
+  { 1.4526171451238465e+22, 20, 7.1999999999999993, 0.0 },
+  { 2.0783192485964666e+22, 20, 7.3000000000000007, 0.0 },
+  { 2.9479149729249434e+22, 20, 7.4000000000000021, 0.0 },
+  { 4.1475563998692745e+22, 20, 7.5000000000000000, 0.0 },
+  { 5.7909832934009378e+22, 20, 7.6000000000000014, 0.0 },
+  { 8.0275268594719286e+22, 20, 7.6999999999999993, 0.0 },
+  { 1.1052214218386286e+23, 20, 7.8000000000000007, 0.0 },
+  { 1.5118471231121759e+23, 20, 7.9000000000000021, 0.0 },
+  { 2.0554027373991249e+23, 20, 8.0000000000000000, 0.0 },
+  { 2.7780752653950703e+23, 20, 8.1000000000000014, 0.0 },
+  { 3.7339306542317994e+23, 20, 8.1999999999999993, 0.0 },
+  { 4.9919656538201190e+23, 20, 8.3000000000000007, 0.0 },
+  { 6.6398733801206421e+23, 20, 8.4000000000000021, 0.0 },
+  { 8.7886740525023878e+23, 20, 8.5000000000000000, 0.0 },
+  { 1.1578391431515869e+24, 20, 8.6000000000000014, 0.0 },
+  { 1.5184989558235974e+24, 20, 8.6999999999999993, 0.0 },
+  { 1.9828824261062853e+24, 20, 8.8000000000000007, 0.0 },
+  { 2.5784910430831597e+24, 20, 8.9000000000000021, 0.0 },
+  { 3.3395360269524137e+24, 20, 9.0000000000000000, 0.0 },
+  { 4.3084410724036123e+24, 20, 9.1000000000000014, 0.0 },
+  { 5.5376531405202538e+24, 20, 9.2000000000000028, 0.0 },
+  { 7.0918188910312152e+24, 20, 9.3000000000000007, 0.0 },
+  { 9.0503941245991948e+24, 20, 9.4000000000000021, 0.0 },
+  { 1.1510764882450827e+25, 20, 9.5000000000000000, 0.0 },
+  { 1.4591971834545491e+25, 20, 9.6000000000000014, 0.0 },
+  { 1.8439144509496166e+25, 20, 9.7000000000000028, 0.0 },
+  { 2.3228769039548404e+25, 20, 9.8000000000000007, 0.0 },
+  { 2.9174932703098967e+25, 20, 9.9000000000000021, 0.0 },
+  { 3.6536710970888030e+25, 20, 10.000000000000000, 0.0 },
 };
 const double toler006 = 2.5000000000000020e-13;
 
 // Test data for n=50.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hermite<double>
 data007[201] =
 {
-  { 1.3516643049819314e+61, 50, -10.000000000000000 },
-  { 5.8466703062266110e+60, 50, -9.9000000000000004 },
-  { 2.4344814863741168e+60, 50, -9.8000000000000007 },
-  { 9.6739828066585787e+59, 50, -9.6999999999999993 },
-  { 3.6194312967780128e+59, 50, -9.5999999999999996 },
-  { 1.2454022521696361e+59, 50, -9.5000000000000000 },
-  { 3.7546881918013145e+58, 50, -9.4000000000000004 },
-  { 8.6500158470917270e+57, 50, -9.3000000000000007 },
-  { 5.3163209769527426e+56, 50, -9.1999999999999993 },
-  { -9.7863165370930473e+56, 50, -9.0999999999999996 },
-  { -8.0563930902368911e+56, 50, -9.0000000000000000 },
-  { -4.3145937406321933e+56, 50, -8.9000000000000004 },
-  { -1.8210771577645630e+56, 50, -8.8000000000000007 },
-  { -6.0082225302289557e+55, 50, -8.6999999999999993 },
-  { -1.2392013720948442e+55, 50, -8.5999999999999996 },
-  { 1.5935887905806307e+54, 50, -8.5000000000000000 },
-  { 3.4325365049909381e+54, 50, -8.4000000000000004 },
-  { 2.2368641272300899e+54, 50, -8.3000000000000007 },
-  { 1.0009712198862341e+54, 50, -8.1999999999999993 },
-  { 3.0699480272357337e+53, 50, -8.0999999999999996 },
-  { 2.9492797132685063e+52, 50, -8.0000000000000000 },
-  { -3.9982544106300062e+52, 50, -7.9000000000000004 },
-  { -3.5678031330023779e+52, 50, -7.7999999999999998 },
-  { -1.8076371748762468e+52, 50, -7.7000000000000002 },
-  { -5.7887622198708925e+51, 50, -7.5999999999999996 },
-  { -3.5808467693113330e+50, 50, -7.5000000000000000 },
-  { 1.0219511166806405e+51, 50, -7.4000000000000004 },
-  { 8.4241263694549560e+50, 50, -7.2999999999999998 },
-  { 3.9143899315095369e+50, 50, -7.2000000000000002 },
-  { 9.3178966245756654e+49, 50, -7.0999999999999996 },
-  { -2.4714855983436561e+49, 50, -7.0000000000000000 },
-  { -4.1428217272044600e+49, 50, -6.9000000000000004 },
-  { -2.4864980414057334e+49, 50, -6.7999999999999998 },
-  { -8.0684355476447979e+48, 50, -6.7000000000000002 },
-  { 4.2529238530179841e+47, 50, -6.5999999999999996 },
-  { 2.4709663739849681e+48, 50, -6.5000000000000000 },
-  { 1.7500305481204125e+48, 50, -6.4000000000000004 },
-  { 6.3834558285146007e+47, 50, -6.2999999999999998 },
-  { -1.1477672402381055e+46, 50, -6.2000000000000002 },
-  { -1.9304630401841983e+47, 50, -6.0999999999999996 },
-  { -1.4355266959903589e+47, 50, -6.0000000000000000 },
-  { -5.1482200905566146e+46, 50, -5.9000000000000004 },
-  { 4.6577356827463283e+45, 50, -5.7999999999999998 },
-  { 1.9676012349652066e+46, 50, -5.7000000000000002 },
-  { 1.3630554018675846e+46, 50, -5.5999999999999996 },
-  { 4.0920495328093750e+45, 50, -5.5000000000000000 },
-  { -1.3680638882145392e+45, 50, -5.4000000000000004 },
-  { -2.4465265559935436e+45, 50, -5.2999999999999998 },
-  { -1.4270495629649456e+45, 50, -5.2000000000000002 },
-  { -2.4845518743338381e+44, 50, -5.0999999999999996 },
-  { 3.1953926721271990e+44, 50, -5.0000000000000000 },
-  { 3.4169399444879600e+44, 50, -4.9000000000000004 },
-  { 1.4896819114978755e+44, 50, -4.7999999999999998 },
-  { -1.3078430866968493e+43, 50, -4.7000000000000002 },
-  { -6.8449168639700716e+43, 50, -4.5999999999999996 },
-  { -4.9181639709997461e+43, 50, -4.5000000000000000 },
-  { -1.1434943490345182e+43, 50, -4.4000000000000004 },
-  { 1.1214652543461432e+43, 50, -4.2999999999999998 },
-  { 1.3843548994480608e+43, 50, -4.2000000000000002 },
-  { 6.3349790205303262e+42, 50, -4.0999999999999996 },
-  { -9.5599640670553907e+41, 50, -4.0000000000000000 },
-  { -3.6202558158287927e+42, 50, -3.9000000000000004 },
-  { -2.5206461734624493e+42, 50, -3.7999999999999998 },
-  { -3.7818051510732439e+41, 50, -3.7000000000000002 },
-  { 8.8921371165335050e+41, 50, -3.5999999999999996 },
-  { 9.2055485763852770e+41, 50, -3.5000000000000000 },
-  { 3.2535765707283020e+41, 50, -3.4000000000000004 },
-  { -1.9358941418244578e+41, 50, -3.2999999999999998 },
-  { -3.3076282847915670e+41, 50, -3.2000000000000002 },
-  { -1.7764977066639160e+41, 50, -3.0999999999999996 },
-  { 2.6751882008697154e+40, 50, -3.0000000000000000 },
-  { 1.2025382369996052e+41, 50, -2.9000000000000004 },
-  { 8.8383035103557973e+40, 50, -2.7999999999999998 },
-  { 7.7733606479641769e+39, 50, -2.7000000000000002 },
-  { -4.4696811758713757e+40, 50, -2.5999999999999996 },
-  { -4.3715062488963453e+40, 50, -2.5000000000000000 },
-  { -1.1390080390575289e+40, 50, -2.4000000000000004 },
-  { 1.6938519751181342e+40, 50, -2.2999999999999998 },
-  { 2.2284509952956210e+40, 50, -2.2000000000000002 },
-  { 9.0967994280570531e+39, 50, -2.0999999999999996 },
-  { -6.4126677997472978e+39, 50, -2.0000000000000000 },
-  { -1.1926839454034341e+40, 50, -1.9000000000000004 },
-  { -6.5436654274699114e+39, 50, -1.8000000000000007 },
-  { 2.2779499542550411e+39, 50, -1.6999999999999993 },
-  { 6.7720530889699639e+39, 50, -1.5999999999999996 },
-  { 4.6884851188034300e+39, 50, -1.5000000000000000 },
-  { -5.9005001052557463e+38, 50, -1.4000000000000004 },
-  { -4.1028320210430589e+39, 50, -1.3000000000000007 },
-  { -3.4780049977083965e+39, 50, -1.1999999999999993 },
-  { -1.3484918476373692e+38, 50, -1.0999999999999996 },
-  { 2.6586815431645456e+39, 50, -1.0000000000000000 },
-  { 2.7225429473661429e+39, 50, -0.90000000000000036 },
-  { 4.7785441024951729e+38, 50, -0.80000000000000071 },
-  { -1.8416784378790159e+39, 50, -0.69999999999999929 },
-  { -2.2725918816693132e+39, 50, -0.59999999999999964 },
-  { -6.7948375014926916e+38, 50, -0.50000000000000000 },
-  { 1.3581645858905750e+39, 50, -0.40000000000000036 },
-  { 2.0349661043040497e+39, 50, -0.30000000000000071 },
-  { 8.5049248815817037e+38, 50, -0.19999999999999929 },
-  { -1.0564542132990048e+39, 50, -0.099999999999999645 },
-  { -1.9607814681608194e+39, 50, 0.0000000000000000 },
-  { -1.0564542132990048e+39, 50, 0.099999999999999645 },
-  { 8.5049248815817037e+38, 50, 0.19999999999999929 },
-  { 2.0349661043040497e+39, 50, 0.30000000000000071 },
-  { 1.3581645858905750e+39, 50, 0.40000000000000036 },
-  { -6.7948375014926916e+38, 50, 0.50000000000000000 },
-  { -2.2725918816693132e+39, 50, 0.59999999999999964 },
-  { -1.8416784378790159e+39, 50, 0.69999999999999929 },
-  { 4.7785441024951729e+38, 50, 0.80000000000000071 },
-  { 2.7225429473661429e+39, 50, 0.90000000000000036 },
-  { 2.6586815431645456e+39, 50, 1.0000000000000000 },
-  { -1.3484918476373692e+38, 50, 1.0999999999999996 },
-  { -3.4780049977083965e+39, 50, 1.1999999999999993 },
-  { -4.1028320210430589e+39, 50, 1.3000000000000007 },
-  { -5.9005001052557463e+38, 50, 1.4000000000000004 },
-  { 4.6884851188034300e+39, 50, 1.5000000000000000 },
-  { 6.7720530889699639e+39, 50, 1.5999999999999996 },
-  { 2.2779499542550411e+39, 50, 1.6999999999999993 },
-  { -6.5436654274699114e+39, 50, 1.8000000000000007 },
-  { -1.1926839454034341e+40, 50, 1.9000000000000004 },
-  { -6.4126677997472978e+39, 50, 2.0000000000000000 },
-  { 9.0967994280570531e+39, 50, 2.0999999999999996 },
-  { 2.2284509952956162e+40, 50, 2.1999999999999993 },
-  { 1.6938519751181172e+40, 50, 2.3000000000000007 },
-  { -1.1390080390575289e+40, 50, 2.4000000000000004 },
-  { -4.3715062488963453e+40, 50, 2.5000000000000000 },
-  { -4.4696811758713757e+40, 50, 2.5999999999999996 },
-  { 7.7733606479635628e+39, 50, 2.6999999999999993 },
-  { 8.8383035103558611e+40, 50, 2.8000000000000007 },
-  { 1.2025382369996052e+41, 50, 2.9000000000000004 },
-  { 2.6751882008697154e+40, 50, 3.0000000000000000 },
-  { -1.7764977066639160e+41, 50, 3.0999999999999996 },
-  { -3.3076282847915616e+41, 50, 3.1999999999999993 },
-  { -1.9358941418244260e+41, 50, 3.3000000000000007 },
-  { 3.2535765707283020e+41, 50, 3.4000000000000004 },
-  { 9.2055485763852770e+41, 50, 3.5000000000000000 },
-  { 8.8921371165335050e+41, 50, 3.5999999999999996 },
-  { -3.7818051510730675e+41, 50, 3.6999999999999993 },
-  { -2.5206461734624660e+42, 50, 3.8000000000000007 },
-  { -3.6202558158287927e+42, 50, 3.9000000000000004 },
-  { -9.5599640670553907e+41, 50, 4.0000000000000000 },
-  { 6.3349790205303262e+42, 50, 4.0999999999999996 },
-  { 1.3843548994480566e+43, 50, 4.1999999999999993 },
-  { 1.1214652543461340e+43, 50, 4.3000000000000007 },
-  { -1.1434943490345182e+43, 50, 4.4000000000000004 },
-  { -4.9181639709997461e+43, 50, 4.5000000000000000 },
-  { -6.8449168639700716e+43, 50, 4.5999999999999996 },
-  { -1.3078430866969463e+43, 50, 4.6999999999999993 },
-  { 1.4896819114978953e+44, 50, 4.8000000000000007 },
-  { 3.4169399444879600e+44, 50, 4.9000000000000004 },
-  { 3.1953926721271990e+44, 50, 5.0000000000000000 },
-  { -2.4845518743338381e+44, 50, 5.0999999999999996 },
-  { -1.4270495629649337e+45, 50, 5.1999999999999993 },
-  { -2.4465265559935458e+45, 50, 5.3000000000000007 },
-  { -1.3680638882145392e+45, 50, 5.4000000000000004 },
-  { 4.0920495328093750e+45, 50, 5.5000000000000000 },
-  { 1.3630554018675846e+46, 50, 5.5999999999999996 },
-  { 1.9676012349652081e+46, 50, 5.6999999999999993 },
-  { 4.6577356827460393e+45, 50, 5.8000000000000007 },
-  { -5.1482200905566146e+46, 50, 5.9000000000000004 },
-  { -1.4355266959903589e+47, 50, 6.0000000000000000 },
-  { -1.9304630401841966e+47, 50, 6.1000000000000014 },
-  { -1.1477672402384868e+46, 50, 6.1999999999999993 },
-  { 6.3834558285146981e+47, 50, 6.3000000000000007 },
-  { 1.7500305481203924e+48, 50, 6.3999999999999986 },
-  { 2.4709663739849681e+48, 50, 6.5000000000000000 },
-  { 4.2529238530171793e+47, 50, 6.6000000000000014 },
-  { -8.0684355476446876e+48, 50, 6.6999999999999993 },
-  { -2.4864980414057495e+49, 50, 6.8000000000000007 },
-  { -4.1428217272044496e+49, 50, 6.8999999999999986 },
-  { -2.4714855983436561e+49, 50, 7.0000000000000000 },
-  { 9.3178966245760310e+49, 50, 7.1000000000000014 },
-  { 3.9143899315095070e+50, 50, 7.1999999999999993 },
-  { 8.4241263694549925e+50, 50, 7.3000000000000007 },
-  { 1.0219511166806458e+51, 50, 7.3999999999999986 },
-  { -3.5808467693113330e+50, 50, 7.5000000000000000 },
-  { -5.7887622198710268e+51, 50, 7.6000000000000014 },
-  { -1.8076371748762319e+52, 50, 7.6999999999999993 },
-  { -3.5678031330023971e+52, 50, 7.8000000000000007 },
-  { -3.9982544106300530e+52, 50, 7.8999999999999986 },
-  { 2.9492797132685063e+52, 50, 8.0000000000000000 },
-  { 3.0699480272358086e+53, 50, 8.1000000000000014 },
-  { 1.0009712198862341e+54, 50, 8.1999999999999993 },
-  { 2.2368641272300899e+54, 50, 8.3000000000000007 },
-  { 3.4325365049909340e+54, 50, 8.3999999999999986 },
-  { 1.5935887905806307e+54, 50, 8.5000000000000000 },
-  { -1.2392013720948937e+55, 50, 8.6000000000000014 },
-  { -6.0082225302289557e+55, 50, 8.6999999999999993 },
-  { -1.8210771577645630e+56, 50, 8.8000000000000007 },
-  { -4.3145937406321376e+56, 50, 8.8999999999999986 },
-  { -8.0563930902368911e+56, 50, 9.0000000000000000 },
-  { -9.7863165370930194e+56, 50, 9.1000000000000014 },
-  { 5.3163209769527426e+56, 50, 9.1999999999999993 },
-  { 8.6500158470917270e+57, 50, 9.3000000000000007 },
-  { 3.7546881918012164e+58, 50, 9.3999999999999986 },
-  { 1.2454022521696361e+59, 50, 9.5000000000000000 },
-  { 3.6194312967780793e+59, 50, 9.6000000000000014 },
-  { 9.6739828066585787e+59, 50, 9.6999999999999993 },
-  { 2.4344814863741168e+60, 50, 9.8000000000000007 },
-  { 5.8466703062265247e+60, 50, 9.8999999999999986 },
-  { 1.3516643049819314e+61, 50, 10.000000000000000 },
+  { 1.3516643049819314e+61, 50, -10.000000000000000, 0.0 },
+  { 5.8466703062266110e+60, 50, -9.9000000000000004, 0.0 },
+  { 2.4344814863741168e+60, 50, -9.8000000000000007, 0.0 },
+  { 9.6739828066585787e+59, 50, -9.6999999999999993, 0.0 },
+  { 3.6194312967780128e+59, 50, -9.5999999999999996, 0.0 },
+  { 1.2454022521696361e+59, 50, -9.5000000000000000, 0.0 },
+  { 3.7546881918013145e+58, 50, -9.4000000000000004, 0.0 },
+  { 8.6500158470917270e+57, 50, -9.3000000000000007, 0.0 },
+  { 5.3163209769527426e+56, 50, -9.1999999999999993, 0.0 },
+  { -9.7863165370930473e+56, 50, -9.0999999999999996, 0.0 },
+  { -8.0563930902368911e+56, 50, -9.0000000000000000, 0.0 },
+  { -4.3145937406321933e+56, 50, -8.9000000000000004, 0.0 },
+  { -1.8210771577645630e+56, 50, -8.8000000000000007, 0.0 },
+  { -6.0082225302289557e+55, 50, -8.6999999999999993, 0.0 },
+  { -1.2392013720948442e+55, 50, -8.5999999999999996, 0.0 },
+  { 1.5935887905806307e+54, 50, -8.5000000000000000, 0.0 },
+  { 3.4325365049909381e+54, 50, -8.4000000000000004, 0.0 },
+  { 2.2368641272300899e+54, 50, -8.3000000000000007, 0.0 },
+  { 1.0009712198862341e+54, 50, -8.1999999999999993, 0.0 },
+  { 3.0699480272357337e+53, 50, -8.0999999999999996, 0.0 },
+  { 2.9492797132685063e+52, 50, -8.0000000000000000, 0.0 },
+  { -3.9982544106300062e+52, 50, -7.9000000000000004, 0.0 },
+  { -3.5678031330023779e+52, 50, -7.7999999999999998, 0.0 },
+  { -1.8076371748762319e+52, 50, -7.6999999999999993, 0.0 },
+  { -5.7887622198708925e+51, 50, -7.5999999999999996, 0.0 },
+  { -3.5808467693113330e+50, 50, -7.5000000000000000, 0.0 },
+  { 1.0219511166806405e+51, 50, -7.4000000000000004, 0.0 },
+  { 8.4241263694549560e+50, 50, -7.2999999999999998, 0.0 },
+  { 3.9143899315095070e+50, 50, -7.1999999999999993, 0.0 },
+  { 9.3178966245756654e+49, 50, -7.0999999999999996, 0.0 },
+  { -2.4714855983436561e+49, 50, -7.0000000000000000, 0.0 },
+  { -4.1428217272044600e+49, 50, -6.9000000000000004, 0.0 },
+  { -2.4864980414057334e+49, 50, -6.7999999999999998, 0.0 },
+  { -8.0684355476446876e+48, 50, -6.6999999999999993, 0.0 },
+  { 4.2529238530179841e+47, 50, -6.5999999999999996, 0.0 },
+  { 2.4709663739849681e+48, 50, -6.5000000000000000, 0.0 },
+  { 1.7500305481204125e+48, 50, -6.4000000000000004, 0.0 },
+  { 6.3834558285146007e+47, 50, -6.2999999999999998, 0.0 },
+  { -1.1477672402384868e+46, 50, -6.1999999999999993, 0.0 },
+  { -1.9304630401841983e+47, 50, -6.0999999999999996, 0.0 },
+  { -1.4355266959903589e+47, 50, -6.0000000000000000, 0.0 },
+  { -5.1482200905565497e+46, 50, -5.8999999999999995, 0.0 },
+  { 4.6577356827463283e+45, 50, -5.7999999999999998, 0.0 },
+  { 1.9676012349652066e+46, 50, -5.7000000000000002, 0.0 },
+  { 1.3630554018675846e+46, 50, -5.5999999999999996, 0.0 },
+  { 4.0920495328093750e+45, 50, -5.5000000000000000, 0.0 },
+  { -1.3680638882145570e+45, 50, -5.3999999999999995, 0.0 },
+  { -2.4465265559935436e+45, 50, -5.2999999999999998, 0.0 },
+  { -1.4270495629649337e+45, 50, -5.1999999999999993, 0.0 },
+  { -2.4845518743338381e+44, 50, -5.0999999999999996, 0.0 },
+  { 3.1953926721271990e+44, 50, -5.0000000000000000, 0.0 },
+  { 3.4169399444879477e+44, 50, -4.8999999999999995, 0.0 },
+  { 1.4896819114978755e+44, 50, -4.7999999999999998, 0.0 },
+  { -1.3078430866969463e+43, 50, -4.6999999999999993, 0.0 },
+  { -6.8449168639700716e+43, 50, -4.5999999999999996, 0.0 },
+  { -4.9181639709997461e+43, 50, -4.5000000000000000, 0.0 },
+  { -1.1434943490344838e+43, 50, -4.3999999999999995, 0.0 },
+  { 1.1214652543461432e+43, 50, -4.2999999999999998, 0.0 },
+  { 1.3843548994480566e+43, 50, -4.1999999999999993, 0.0 },
+  { 6.3349790205303262e+42, 50, -4.0999999999999996, 0.0 },
+  { -9.5599640670553907e+41, 50, -4.0000000000000000, 0.0 },
+  { -3.6202558158287989e+42, 50, -3.8999999999999995, 0.0 },
+  { -2.5206461734624493e+42, 50, -3.7999999999999998, 0.0 },
+  { -3.7818051510730675e+41, 50, -3.6999999999999993, 0.0 },
+  { 8.8921371165335050e+41, 50, -3.5999999999999996, 0.0 },
+  { 9.2055485763852770e+41, 50, -3.5000000000000000, 0.0 },
+  { 3.2535765707282432e+41, 50, -3.3999999999999995, 0.0 },
+  { -1.9358941418244578e+41, 50, -3.2999999999999998, 0.0 },
+  { -3.3076282847915616e+41, 50, -3.1999999999999993, 0.0 },
+  { -1.7764977066639160e+41, 50, -3.0999999999999996, 0.0 },
+  { 2.6751882008697154e+40, 50, -3.0000000000000000, 0.0 },
+  { 1.2025382369996071e+41, 50, -2.8999999999999995, 0.0 },
+  { 8.8383035103557973e+40, 50, -2.7999999999999998, 0.0 },
+  { 7.7733606479635628e+39, 50, -2.6999999999999993, 0.0 },
+  { -4.4696811758713757e+40, 50, -2.5999999999999996, 0.0 },
+  { -4.3715062488963453e+40, 50, -2.5000000000000000, 0.0 },
+  { -1.1390080390574979e+40, 50, -2.3999999999999995, 0.0 },
+  { 1.6938519751181342e+40, 50, -2.2999999999999998, 0.0 },
+  { 2.2284509952956162e+40, 50, -2.1999999999999993, 0.0 },
+  { 9.0967994280570531e+39, 50, -2.0999999999999996, 0.0 },
+  { -6.4126677997472978e+39, 50, -2.0000000000000000, 0.0 },
+  { -1.1926839454034341e+40, 50, -1.9000000000000004, 0.0 },
+  { -6.5436654274697603e+39, 50, -1.7999999999999989, 0.0 },
+  { 2.2779499542550411e+39, 50, -1.6999999999999993, 0.0 },
+  { 6.7720530889699639e+39, 50, -1.5999999999999996, 0.0 },
+  { 4.6884851188034300e+39, 50, -1.5000000000000000, 0.0 },
+  { -5.9005001052557463e+38, 50, -1.4000000000000004, 0.0 },
+  { -4.1028320210430837e+39, 50, -1.2999999999999989, 0.0 },
+  { -3.4780049977083965e+39, 50, -1.1999999999999993, 0.0 },
+  { -1.3484918476373692e+38, 50, -1.0999999999999996, 0.0 },
+  { 2.6586815431645456e+39, 50, -1.0000000000000000, 0.0 },
+  { 2.7225429473661429e+39, 50, -0.90000000000000036, 0.0 },
+  { 4.7785441024946841e+38, 50, -0.79999999999999893, 0.0 },
+  { -1.8416784378790159e+39, 50, -0.69999999999999929, 0.0 },
+  { -2.2725918816693132e+39, 50, -0.59999999999999964, 0.0 },
+  { -6.7948375014926916e+38, 50, -0.50000000000000000, 0.0 },
+  { 1.3581645858906036e+39, 50, -0.39999999999999858, 0.0 },
+  { 2.0349661043040443e+39, 50, -0.29999999999999893, 0.0 },
+  { 8.5049248815817037e+38, 50, -0.19999999999999929, 0.0 },
+  { -1.0564542132990048e+39, 50, -0.099999999999999645, 0.0 },
+  { -1.9607814681608194e+39, 50, 0.0000000000000000, 0.0 },
+  { -1.0564542132989758e+39, 50, 0.10000000000000142, 0.0 },
+  { 8.5049248815820240e+38, 50, 0.20000000000000107, 0.0 },
+  { 2.0349661043040497e+39, 50, 0.30000000000000071, 0.0 },
+  { 1.3581645858905750e+39, 50, 0.40000000000000036, 0.0 },
+  { -6.7948375014926916e+38, 50, 0.50000000000000000, 0.0 },
+  { -2.2725918816693268e+39, 50, 0.60000000000000142, 0.0 },
+  { -1.8416784378789875e+39, 50, 0.70000000000000107, 0.0 },
+  { 4.7785441024951729e+38, 50, 0.80000000000000071, 0.0 },
+  { 2.7225429473661429e+39, 50, 0.90000000000000036, 0.0 },
+  { 2.6586815431645456e+39, 50, 1.0000000000000000, 0.0 },
+  { -1.3484918476380069e+38, 50, 1.1000000000000014, 0.0 },
+  { -3.4780049977084394e+39, 50, 1.2000000000000011, 0.0 },
+  { -4.1028320210430589e+39, 50, 1.3000000000000007, 0.0 },
+  { -5.9005001052557463e+38, 50, 1.4000000000000004, 0.0 },
+  { 4.6884851188034300e+39, 50, 1.5000000000000000, 0.0 },
+  { 6.7720530889699470e+39, 50, 1.6000000000000014, 0.0 },
+  { 2.2779499542549072e+39, 50, 1.7000000000000011, 0.0 },
+  { -6.5436654274699114e+39, 50, 1.8000000000000007, 0.0 },
+  { -1.1926839454034341e+40, 50, 1.9000000000000004, 0.0 },
+  { -6.4126677997472978e+39, 50, 2.0000000000000000, 0.0 },
+  { 9.0967994280573626e+39, 50, 2.1000000000000014, 0.0 },
+  { 2.2284509952956273e+40, 50, 2.2000000000000011, 0.0 },
+  { 1.6938519751181172e+40, 50, 2.3000000000000007, 0.0 },
+  { -1.1390080390575289e+40, 50, 2.4000000000000004, 0.0 },
+  { -4.3715062488963453e+40, 50, 2.5000000000000000, 0.0 },
+  { -4.4696811758713303e+40, 50, 2.6000000000000014, 0.0 },
+  { 7.7733606479648733e+39, 50, 2.7000000000000011, 0.0 },
+  { 8.8383035103558611e+40, 50, 2.8000000000000007, 0.0 },
+  { 1.2025382369996052e+41, 50, 2.9000000000000004, 0.0 },
+  { 2.6751882008697154e+40, 50, 3.0000000000000000, 0.0 },
+  { -1.7764977066639554e+41, 50, 3.1000000000000014, 0.0 },
+  { -3.3076282847915716e+41, 50, 3.2000000000000011, 0.0 },
+  { -1.9358941418244260e+41, 50, 3.3000000000000007, 0.0 },
+  { 3.2535765707283020e+41, 50, 3.4000000000000004, 0.0 },
+  { 9.2055485763852770e+41, 50, 3.5000000000000000, 0.0 },
+  { 8.8921371165333905e+41, 50, 3.6000000000000014, 0.0 },
+  { -3.7818051510734018e+41, 50, 3.7000000000000011, 0.0 },
+  { -2.5206461734624660e+42, 50, 3.8000000000000007, 0.0 },
+  { -3.6202558158287927e+42, 50, 3.9000000000000004, 0.0 },
+  { -9.5599640670553907e+41, 50, 4.0000000000000000, 0.0 },
+  { 6.3349790205304773e+42, 50, 4.1000000000000014, 0.0 },
+  { 1.3843548994480653e+43, 50, 4.2000000000000011, 0.0 },
+  { 1.1214652543461340e+43, 50, 4.3000000000000007, 0.0 },
+  { -1.1434943490345182e+43, 50, 4.4000000000000004, 0.0 },
+  { -4.9181639709997461e+43, 50, 4.5000000000000000, 0.0 },
+  { -6.8449168639700617e+43, 50, 4.6000000000000014, 0.0 },
+  { -1.3078430866967542e+43, 50, 4.7000000000000011, 0.0 },
+  { 1.4896819114978953e+44, 50, 4.8000000000000007, 0.0 },
+  { 3.4169399444879600e+44, 50, 4.9000000000000004, 0.0 },
+  { 3.1953926721271990e+44, 50, 5.0000000000000000, 0.0 },
+  { -2.4845518743340037e+44, 50, 5.1000000000000014, 0.0 },
+  { -1.4270495629649556e+45, 50, 5.2000000000000011, 0.0 },
+  { -2.4465265559935458e+45, 50, 5.3000000000000007, 0.0 },
+  { -1.3680638882145392e+45, 50, 5.4000000000000004, 0.0 },
+  { 4.0920495328093750e+45, 50, 5.5000000000000000, 0.0 },
+  { 1.3630554018676023e+46, 50, 5.6000000000000014, 0.0 },
+  { 1.9676012349652035e+46, 50, 5.7000000000000011, 0.0 },
+  { 4.6577356827460393e+45, 50, 5.8000000000000007, 0.0 },
+  { -5.1482200905566146e+46, 50, 5.9000000000000004, 0.0 },
+  { -1.4355266959903589e+47, 50, 6.0000000000000000, 0.0 },
+  { -1.9304630401841966e+47, 50, 6.1000000000000014, 0.0 },
+  { -1.1477672402384868e+46, 50, 6.1999999999999993, 0.0 },
+  { 6.3834558285146981e+47, 50, 6.3000000000000007, 0.0 },
+  { 1.7500305481204346e+48, 50, 6.4000000000000021, 0.0 },
+  { 2.4709663739849681e+48, 50, 6.5000000000000000, 0.0 },
+  { 4.2529238530171793e+47, 50, 6.6000000000000014, 0.0 },
+  { -8.0684355476446876e+48, 50, 6.6999999999999993, 0.0 },
+  { -2.4864980414057495e+49, 50, 6.8000000000000007, 0.0 },
+  { -4.1428217272044745e+49, 50, 6.9000000000000021, 0.0 },
+  { -2.4714855983436561e+49, 50, 7.0000000000000000, 0.0 },
+  { 9.3178966245760310e+49, 50, 7.1000000000000014, 0.0 },
+  { 3.9143899315095070e+50, 50, 7.1999999999999993, 0.0 },
+  { 8.4241263694549925e+50, 50, 7.3000000000000007, 0.0 },
+  { 1.0219511166806373e+51, 50, 7.4000000000000021, 0.0 },
+  { -3.5808467693113330e+50, 50, 7.5000000000000000, 0.0 },
+  { -5.7887622198710268e+51, 50, 7.6000000000000014, 0.0 },
+  { -1.8076371748762319e+52, 50, 7.6999999999999993, 0.0 },
+  { -3.5678031330023971e+52, 50, 7.8000000000000007, 0.0 },
+  { -3.9982544106299987e+52, 50, 7.9000000000000021, 0.0 },
+  { 2.9492797132685063e+52, 50, 8.0000000000000000, 0.0 },
+  { 3.0699480272358086e+53, 50, 8.1000000000000014, 0.0 },
+  { 1.0009712198862341e+54, 50, 8.1999999999999993, 0.0 },
+  { 2.2368641272300899e+54, 50, 8.3000000000000007, 0.0 },
+  { 3.4325365049909476e+54, 50, 8.4000000000000021, 0.0 },
+  { 1.5935887905806307e+54, 50, 8.5000000000000000, 0.0 },
+  { -1.2392013720948937e+55, 50, 8.6000000000000014, 0.0 },
+  { -6.0082225302289557e+55, 50, 8.6999999999999993, 0.0 },
+  { -1.8210771577645630e+56, 50, 8.8000000000000007, 0.0 },
+  { -4.3145937406322482e+56, 50, 8.9000000000000021, 0.0 },
+  { -8.0563930902368911e+56, 50, 9.0000000000000000, 0.0 },
+  { -9.7863165370930194e+56, 50, 9.1000000000000014, 0.0 },
+  { 5.3163209769540389e+56, 50, 9.2000000000000028, 0.0 },
+  { 8.6500158470917270e+57, 50, 9.3000000000000007, 0.0 },
+  { 3.7546881918013903e+58, 50, 9.4000000000000021, 0.0 },
+  { 1.2454022521696361e+59, 50, 9.5000000000000000, 0.0 },
+  { 3.6194312967780793e+59, 50, 9.6000000000000014, 0.0 },
+  { 9.6739828066589016e+59, 50, 9.7000000000000028, 0.0 },
+  { 2.4344814863741168e+60, 50, 9.8000000000000007, 0.0 },
+  { 5.8466703062266974e+60, 50, 9.9000000000000021, 0.0 },
+  { 1.3516643049819314e+61, 50, 10.000000000000000, 0.0 },
 };
 const double toler007 = 2.5000000000000020e-13;
 
 // Test data for n=100.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_hermite<double>
 data008[201] =
 {
-  { -1.8738689223256612e+115, 100, -10.000000000000000 },
-  { -4.4232904120311186e+114, 100, -9.9000000000000004 },
-  { 8.3761676654305186e+113, 100, -9.8000000000000007 },
-  { 9.4857435427570856e+113, 100, -9.6999999999999993 },
-  { 2.4904626130429828e+113, 100, -9.5999999999999996 },
-  { -4.2265051766934789e+112, 100, -9.5000000000000000 },
-  { -5.3374224541142079e+112, 100, -9.4000000000000004 },
-  { -1.3977488190034162e+112, 100, -9.3000000000000007 },
-  { 2.9686037583393142e+111, 100, -9.1999999999999993 },
-  { 3.3341330166544008e+111, 100, -9.0999999999999996 },
-  { 7.7294136683043515e+110, 100, -9.0000000000000000 },
-  { -2.6071876743328352e+110, 100, -8.9000000000000004 },
-  { -2.2669773300293168e+110, 100, -8.8000000000000007 },
-  { -3.8930624477368766e+109, 100, -8.6999999999999993 },
-  { 2.5386102824684956e+109, 100, -8.5999999999999996 },
-  { 1.6203702280499544e+109, 100, -8.5000000000000000 },
-  { 1.2481735250539652e+108, 100, -8.4000000000000004 },
-  { -2.5611278359589723e+108, 100, -8.3000000000000007 },
-  { -1.1534178973583771e+108, 100, -8.1999999999999993 },
-  { 8.4932594446954126e+106, 100, -8.0999999999999996 },
-  { 2.5761505535443451e+107, 100, -8.0000000000000000 },
-  { 7.3445622927437730e+106, 100, -7.9000000000000004 },
-  { -2.7252309851017323e+106, 100, -7.7999999999999998 },
-  { -2.4850432648124068e+106, 100, -7.7000000000000002 },
-  { -2.7486638813238851e+105, 100, -7.5999999999999996 },
-  { 4.4772364475394960e+105, 100, -7.5000000000000000 },
-  { 2.1375121759800508e+105, 100, -7.4000000000000004 },
-  { -2.9237691057265876e+104, 100, -7.2999999999999998 },
-  { -5.9348804074874781e+104, 100, -7.2000000000000002 },
-  { -1.2947583568692734e+104, 100, -7.0999999999999996 },
-  { 1.0002273523275075e+104, 100, -7.0000000000000000 },
-  { 6.4900499886057735e+103, 100, -6.9000000000000004 },
-  { -3.7817730019124298e+102, 100, -6.7999999999999998 },
-  { -1.7849709684883137e+103, 100, -6.7000000000000002 },
-  { -4.8039047085580619e+102, 100, -6.5999999999999996 },
-  { 3.2072472002047670e+102, 100, -6.5000000000000000 },
-  { 2.3341289432999226e+102, 100, -6.4000000000000004 },
-  { -1.4587350659146165e+101, 100, -6.2999999999999998 },
-  { -7.0672139150705532e+101, 100, -6.2000000000000002 },
-  { -1.8039133351601998e+101, 100, -6.0999999999999996 },
-  { 1.5170693933260738e+101, 100, -6.0000000000000000 },
-  { 1.0141407690966954e+101, 100, -5.9000000000000004 },
-  { -1.5140717605507886e+100, 100, -5.7999999999999998 },
-  { -3.6379102593330533e+100, 100, -5.7000000000000002 },
-  { -6.2933057672779134e+99, 100, -5.5999999999999996 },
-  { 9.9309186425970402e+99, 100, -5.5000000000000000 },
-  { 5.0935670879056567e+99, 100, -5.4000000000000004 },
-  { -1.8337906983006129e+99, 100, -5.2999999999999998 },
-  { -2.3096466887887402e+99, 100, -5.2000000000000002 },
-  { -4.0259235416602546e+97, 100, -5.0999999999999996 },
-  { 8.1931937130591466e+98, 100, -5.0000000000000000 },
-  { 2.5601172475776894e+98, 100, -4.9000000000000004 },
-  { -2.3193021196802698e+98, 100, -4.7999999999999998 },
-  { -1.6545238014142802e+98, 100, -4.7000000000000002 },
-  { 4.2440218943299170e+97, 100, -4.5999999999999996 },
-  { 7.8073853756187101e+97, 100, -4.5000000000000000 },
-  { 5.2136163919277588e+96, 100, -4.4000000000000004 },
-  { -3.0837503404959950e+97, 100, -4.2999999999999998 },
-  { -1.0988290456447777e+97, 100, -4.2000000000000002 },
-  { 1.0173847230741884e+97, 100, -4.0999999999999996 },
-  { 7.7070682747643550e+96, 100, -4.0000000000000000 },
-  { -2.3947326745293331e+96, 100, -3.9000000000000004 },
-  { -4.1993887070961596e+96, 100, -3.7999999999999998 },
-  { -5.5521768050542138e+94, 100, -3.7000000000000002 },
-  { 1.9852724296241180e+96, 100, -3.5999999999999996 },
-  { 5.7841213444838915e+95, 100, -3.5000000000000000 },
-  { -8.2433116644948570e+95, 100, -3.4000000000000004 },
-  { -5.2035951331058195e+95, 100, -3.2999999999999998 },
-  { 2.8212012454566057e+95, 100, -3.2000000000000002 },
-  { 3.5161870090563867e+95, 100, -3.0999999999999996 },
-  { -5.5084542871196523e+94, 100, -3.0000000000000000 },
-  { -2.0784160746797610e+95, 100, -2.9000000000000004 },
-  { -2.6058116248679496e+94, 100, -2.7999999999999998 },
-  { 1.1147132226581844e+95, 100, -2.7000000000000002 },
-  { 4.5607706742532875e+94, 100, -2.5999999999999996 },
-  { -5.3758761713337664e+94, 100, -2.5000000000000000 },
-  { -4.2303228932575769e+94, 100, -2.4000000000000004 },
-  { 2.1691501564685499e+94, 100, -2.2999999999999998 },
-  { 3.2602488340116974e+94, 100, -2.2000000000000002 },
-  { -5.0527155039787607e+93, 100, -2.0999999999999996 },
-  { -2.2785574311661325e+94, 100, -2.0000000000000000 },
-  { -2.8549527653152903e+93, 100, -1.9000000000000004 },
-  { 1.4787573463714363e+94, 100, -1.8000000000000007 },
-  { 6.0554070654771248e+93, 100, -1.6999999999999993 },
-  { -8.8496828346970978e+93, 100, -1.5999999999999996 },
-  { -6.8402151897169509e+93, 100, -1.5000000000000000 },
-  { 4.6555468819923166e+93, 100, -1.4000000000000004 },
-  { 6.4625437128323579e+93, 100, -1.3000000000000007 },
-  { -1.7820042440391653e+93, 100, -1.1999999999999993 },
-  { -5.5814393347235886e+93, 100, -1.0999999999999996 },
-  { -1.4487067293379347e+92, 100, -1.0000000000000000 },
-  { 4.5268398678911204e+93, 100, -0.90000000000000036 },
-  { 1.4120762149478435e+93, 100, -0.80000000000000071 },
-  { -3.4510765981144258e+93, 100, -0.69999999999999929 },
-  { -2.2242581581553176e+93, 100, -0.59999999999999964 },
-  { 2.4129827902061037e+93, 100, -0.50000000000000000 },
-  { 2.7195429139752497e+93, 100, -0.40000000000000036 },
-  { -1.4235309630836904e+93, 100, -0.30000000000000071 },
-  { -2.9850618739468043e+93, 100, -0.19999999999999929 },
-  { 4.7017027479251074e+92, 100, -0.099999999999999645 },
-  { 3.0685187562549660e+93, 100, 0.0000000000000000 },
-  { 4.7017027479251074e+92, 100, 0.099999999999999645 },
-  { -2.9850618739468043e+93, 100, 0.19999999999999929 },
-  { -1.4235309630836904e+93, 100, 0.30000000000000071 },
-  { 2.7195429139752497e+93, 100, 0.40000000000000036 },
-  { 2.4129827902061037e+93, 100, 0.50000000000000000 },
-  { -2.2242581581553176e+93, 100, 0.59999999999999964 },
-  { -3.4510765981144258e+93, 100, 0.69999999999999929 },
-  { 1.4120762149478435e+93, 100, 0.80000000000000071 },
-  { 4.5268398678911204e+93, 100, 0.90000000000000036 },
-  { -1.4487067293379347e+92, 100, 1.0000000000000000 },
-  { -5.5814393347235886e+93, 100, 1.0999999999999996 },
-  { -1.7820042440391653e+93, 100, 1.1999999999999993 },
-  { 6.4625437128323579e+93, 100, 1.3000000000000007 },
-  { 4.6555468819923166e+93, 100, 1.4000000000000004 },
-  { -6.8402151897169509e+93, 100, 1.5000000000000000 },
-  { -8.8496828346970978e+93, 100, 1.5999999999999996 },
-  { 6.0554070654771248e+93, 100, 1.6999999999999993 },
-  { 1.4787573463714363e+94, 100, 1.8000000000000007 },
-  { -2.8549527653152903e+93, 100, 1.9000000000000004 },
-  { -2.2785574311661325e+94, 100, 2.0000000000000000 },
-  { -5.0527155039787607e+93, 100, 2.0999999999999996 },
-  { 3.2602488340116774e+94, 100, 2.1999999999999993 },
-  { 2.1691501564685076e+94, 100, 2.3000000000000007 },
-  { -4.2303228932575769e+94, 100, 2.4000000000000004 },
-  { -5.3758761713337664e+94, 100, 2.5000000000000000 },
-  { 4.5607706742532875e+94, 100, 2.5999999999999996 },
-  { 1.1147132226581881e+95, 100, 2.6999999999999993 },
-  { -2.6058116248681564e+94, 100, 2.8000000000000007 },
-  { -2.0784160746797610e+95, 100, 2.9000000000000004 },
-  { -5.5084542871196523e+94, 100, 3.0000000000000000 },
-  { 3.5161870090563867e+95, 100, 3.0999999999999996 },
-  { 2.8212012454566478e+95, 100, 3.1999999999999993 },
-  { -5.2035951331058918e+95, 100, 3.3000000000000007 },
-  { -8.2433116644948570e+95, 100, 3.4000000000000004 },
-  { 5.7841213444838915e+95, 100, 3.5000000000000000 },
-  { 1.9852724296241180e+96, 100, 3.5999999999999996 },
-  { -5.5521768050503009e+94, 100, 3.6999999999999993 },
-  { -4.1993887070961795e+96, 100, 3.8000000000000007 },
-  { -2.3947326745293331e+96, 100, 3.9000000000000004 },
-  { 7.7070682747643550e+96, 100, 4.0000000000000000 },
-  { 1.0173847230741884e+97, 100, 4.0999999999999996 },
-  { -1.0988290456447506e+97, 100, 4.1999999999999993 },
-  { -3.0837503404959957e+97, 100, 4.3000000000000007 },
-  { 5.2136163919277588e+96, 100, 4.4000000000000004 },
-  { 7.8073853756187101e+97, 100, 4.5000000000000000 },
-  { 4.2440218943299170e+97, 100, 4.5999999999999996 },
-  { -1.6545238014142650e+98, 100, 4.6999999999999993 },
-  { -2.3193021196802549e+98, 100, 4.8000000000000007 },
-  { 2.5601172475776894e+98, 100, 4.9000000000000004 },
-  { 8.1931937130591466e+98, 100, 5.0000000000000000 },
-  { -4.0259235416602546e+97, 100, 5.0999999999999996 },
-  { -2.3096466887887237e+99, 100, 5.1999999999999993 },
-  { -1.8337906983005823e+99, 100, 5.3000000000000007 },
-  { 5.0935670879056567e+99, 100, 5.4000000000000004 },
-  { 9.9309186425970402e+99, 100, 5.5000000000000000 },
-  { -6.2933057672779134e+99, 100, 5.5999999999999996 },
-  { -3.6379102593330386e+100, 100, 5.6999999999999993 },
-  { -1.5140717605507249e+100, 100, 5.8000000000000007 },
-  { 1.0141407690966954e+101, 100, 5.9000000000000004 },
-  { 1.5170693933260738e+101, 100, 6.0000000000000000 },
-  { -1.8039133351602961e+101, 100, 6.1000000000000014 },
-  { -7.0672139150705246e+101, 100, 6.1999999999999993 },
-  { -1.4587350659144549e+101, 100, 6.3000000000000007 },
-  { 2.3341289432998748e+102, 100, 6.3999999999999986 },
-  { 3.2072472002047670e+102, 100, 6.5000000000000000 },
-  { -4.8039047085582927e+102, 100, 6.6000000000000014 },
-  { -1.7849709684883083e+103, 100, 6.6999999999999993 },
-  { -3.7817730019120996e+102, 100, 6.8000000000000007 },
-  { 6.4900499886056430e+103, 100, 6.8999999999999986 },
-  { 1.0002273523275075e+104, 100, 7.0000000000000000 },
-  { -1.2947583568693485e+104, 100, 7.1000000000000014 },
-  { -5.9348804074874565e+104, 100, 7.1999999999999993 },
-  { -2.9237691057264679e+104, 100, 7.3000000000000007 },
-  { 2.1375121759799924e+105, 100, 7.3999999999999986 },
-  { 4.4772364475394960e+105, 100, 7.5000000000000000 },
-  { -2.7486638813241244e+105, 100, 7.6000000000000014 },
-  { -2.4850432648123868e+106, 100, 7.6999999999999993 },
-  { -2.7252309851017070e+106, 100, 7.8000000000000007 },
-  { 7.3445622927434568e+106, 100, 7.8999999999999986 },
-  { 2.5761505535443451e+107, 100, 8.0000000000000000 },
-  { 8.4932594446944218e+106, 100, 8.1000000000000014 },
-  { -1.1534178973583771e+108, 100, 8.1999999999999993 },
-  { -2.5611278359589723e+108, 100, 8.3000000000000007 },
-  { 1.2481735250538004e+108, 100, 8.3999999999999986 },
-  { 1.6203702280499544e+109, 100, 8.5000000000000000 },
-  { 2.5386102824684747e+109, 100, 8.6000000000000014 },
-  { -3.8930624477368766e+109, 100, 8.6999999999999993 },
-  { -2.2669773300293168e+110, 100, 8.8000000000000007 },
-  { -2.6071876743328939e+110, 100, 8.8999999999999986 },
-  { 7.7294136683043515e+110, 100, 9.0000000000000000 },
-  { 3.3341330166544429e+111, 100, 9.1000000000000014 },
-  { 2.9686037583393142e+111, 100, 9.1999999999999993 },
-  { -1.3977488190034162e+112, 100, 9.3000000000000007 },
-  { -5.3374224541141370e+112, 100, 9.3999999999999986 },
-  { -4.2265051766934789e+112, 100, 9.5000000000000000 },
-  { 2.4904626130430740e+113, 100, 9.6000000000000014 },
-  { 9.4857435427570856e+113, 100, 9.6999999999999993 },
-  { 8.3761676654305186e+113, 100, 9.8000000000000007 },
-  { -4.4232904120309469e+114, 100, 9.8999999999999986 },
-  { -1.8738689223256612e+115, 100, 10.000000000000000 },
+  { -1.8738689223256612e+115, 100, -10.000000000000000, 0.0 },
+  { -4.4232904120311186e+114, 100, -9.9000000000000004, 0.0 },
+  { 8.3761676654305186e+113, 100, -9.8000000000000007, 0.0 },
+  { 9.4857435427570856e+113, 100, -9.6999999999999993, 0.0 },
+  { 2.4904626130429828e+113, 100, -9.5999999999999996, 0.0 },
+  { -4.2265051766934789e+112, 100, -9.5000000000000000, 0.0 },
+  { -5.3374224541142079e+112, 100, -9.4000000000000004, 0.0 },
+  { -1.3977488190034162e+112, 100, -9.3000000000000007, 0.0 },
+  { 2.9686037583393142e+111, 100, -9.1999999999999993, 0.0 },
+  { 3.3341330166544008e+111, 100, -9.0999999999999996, 0.0 },
+  { 7.7294136683043515e+110, 100, -9.0000000000000000, 0.0 },
+  { -2.6071876743328352e+110, 100, -8.9000000000000004, 0.0 },
+  { -2.2669773300293168e+110, 100, -8.8000000000000007, 0.0 },
+  { -3.8930624477368766e+109, 100, -8.6999999999999993, 0.0 },
+  { 2.5386102824684956e+109, 100, -8.5999999999999996, 0.0 },
+  { 1.6203702280499544e+109, 100, -8.5000000000000000, 0.0 },
+  { 1.2481735250539652e+108, 100, -8.4000000000000004, 0.0 },
+  { -2.5611278359589723e+108, 100, -8.3000000000000007, 0.0 },
+  { -1.1534178973583771e+108, 100, -8.1999999999999993, 0.0 },
+  { 8.4932594446954126e+106, 100, -8.0999999999999996, 0.0 },
+  { 2.5761505535443451e+107, 100, -8.0000000000000000, 0.0 },
+  { 7.3445622927437730e+106, 100, -7.9000000000000004, 0.0 },
+  { -2.7252309851017323e+106, 100, -7.7999999999999998, 0.0 },
+  { -2.4850432648123868e+106, 100, -7.6999999999999993, 0.0 },
+  { -2.7486638813238851e+105, 100, -7.5999999999999996, 0.0 },
+  { 4.4772364475394960e+105, 100, -7.5000000000000000, 0.0 },
+  { 2.1375121759800508e+105, 100, -7.4000000000000004, 0.0 },
+  { -2.9237691057265876e+104, 100, -7.2999999999999998, 0.0 },
+  { -5.9348804074874565e+104, 100, -7.1999999999999993, 0.0 },
+  { -1.2947583568692734e+104, 100, -7.0999999999999996, 0.0 },
+  { 1.0002273523275075e+104, 100, -7.0000000000000000, 0.0 },
+  { 6.4900499886057735e+103, 100, -6.9000000000000004, 0.0 },
+  { -3.7817730019124298e+102, 100, -6.7999999999999998, 0.0 },
+  { -1.7849709684883083e+103, 100, -6.6999999999999993, 0.0 },
+  { -4.8039047085580619e+102, 100, -6.5999999999999996, 0.0 },
+  { 3.2072472002047670e+102, 100, -6.5000000000000000, 0.0 },
+  { 2.3341289432999226e+102, 100, -6.4000000000000004, 0.0 },
+  { -1.4587350659146165e+101, 100, -6.2999999999999998, 0.0 },
+  { -7.0672139150705246e+101, 100, -6.1999999999999993, 0.0 },
+  { -1.8039133351601998e+101, 100, -6.0999999999999996, 0.0 },
+  { 1.5170693933260738e+101, 100, -6.0000000000000000, 0.0 },
+  { 1.0141407690966841e+101, 100, -5.8999999999999995, 0.0 },
+  { -1.5140717605507886e+100, 100, -5.7999999999999998, 0.0 },
+  { -3.6379102593330533e+100, 100, -5.7000000000000002, 0.0 },
+  { -6.2933057672779134e+99, 100, -5.5999999999999996, 0.0 },
+  { 9.9309186425970402e+99, 100, -5.5000000000000000, 0.0 },
+  { 5.0935670879055936e+99, 100, -5.3999999999999995, 0.0 },
+  { -1.8337906983006129e+99, 100, -5.2999999999999998, 0.0 },
+  { -2.3096466887887237e+99, 100, -5.1999999999999993, 0.0 },
+  { -4.0259235416602546e+97, 100, -5.0999999999999996, 0.0 },
+  { 8.1931937130591466e+98, 100, -5.0000000000000000, 0.0 },
+  { 2.5601172475776284e+98, 100, -4.8999999999999995, 0.0 },
+  { -2.3193021196802698e+98, 100, -4.7999999999999998, 0.0 },
+  { -1.6545238014142650e+98, 100, -4.6999999999999993, 0.0 },
+  { 4.2440218943299170e+97, 100, -4.5999999999999996, 0.0 },
+  { 7.8073853756187101e+97, 100, -4.5000000000000000, 0.0 },
+  { 5.2136163919270720e+96, 100, -4.3999999999999995, 0.0 },
+  { -3.0837503404959950e+97, 100, -4.2999999999999998, 0.0 },
+  { -1.0988290456447506e+97, 100, -4.1999999999999993, 0.0 },
+  { 1.0173847230741884e+97, 100, -4.0999999999999996, 0.0 },
+  { 7.7070682747643550e+96, 100, -4.0000000000000000, 0.0 },
+  { -2.3947326745293985e+96, 100, -3.8999999999999995, 0.0 },
+  { -4.1993887070961596e+96, 100, -3.7999999999999998, 0.0 },
+  { -5.5521768050503009e+94, 100, -3.6999999999999993, 0.0 },
+  { 1.9852724296241180e+96, 100, -3.5999999999999996, 0.0 },
+  { 5.7841213444838915e+95, 100, -3.5000000000000000, 0.0 },
+  { -8.2433116644948985e+95, 100, -3.3999999999999995, 0.0 },
+  { -5.2035951331058195e+95, 100, -3.2999999999999998, 0.0 },
+  { 2.8212012454566478e+95, 100, -3.1999999999999993, 0.0 },
+  { 3.5161870090563867e+95, 100, -3.0999999999999996, 0.0 },
+  { -5.5084542871196523e+94, 100, -3.0000000000000000, 0.0 },
+  { -2.0784160746797530e+95, 100, -2.8999999999999995, 0.0 },
+  { -2.6058116248679496e+94, 100, -2.7999999999999998, 0.0 },
+  { 1.1147132226581881e+95, 100, -2.6999999999999993, 0.0 },
+  { 4.5607706742532875e+94, 100, -2.5999999999999996, 0.0 },
+  { -5.3758761713337664e+94, 100, -2.5000000000000000, 0.0 },
+  { -4.2303228932575310e+94, 100, -2.3999999999999995, 0.0 },
+  { 2.1691501564685499e+94, 100, -2.2999999999999998, 0.0 },
+  { 3.2602488340116774e+94, 100, -2.1999999999999993, 0.0 },
+  { -5.0527155039787607e+93, 100, -2.0999999999999996, 0.0 },
+  { -2.2785574311661325e+94, 100, -2.0000000000000000, 0.0 },
+  { -2.8549527653152903e+93, 100, -1.9000000000000004, 0.0 },
+  { 1.4787573463714434e+94, 100, -1.7999999999999989, 0.0 },
+  { 6.0554070654771248e+93, 100, -1.6999999999999993, 0.0 },
+  { -8.8496828346970978e+93, 100, -1.5999999999999996, 0.0 },
+  { -6.8402151897169509e+93, 100, -1.5000000000000000, 0.0 },
+  { 4.6555468819923166e+93, 100, -1.4000000000000004, 0.0 },
+  { 6.4625437128322607e+93, 100, -1.2999999999999989, 0.0 },
+  { -1.7820042440391653e+93, 100, -1.1999999999999993, 0.0 },
+  { -5.5814393347235886e+93, 100, -1.0999999999999996, 0.0 },
+  { -1.4487067293379347e+92, 100, -1.0000000000000000, 0.0 },
+  { 4.5268398678911204e+93, 100, -0.90000000000000036, 0.0 },
+  { 1.4120762149477404e+93, 100, -0.79999999999999893, 0.0 },
+  { -3.4510765981144258e+93, 100, -0.69999999999999929, 0.0 },
+  { -2.2242581581553176e+93, 100, -0.59999999999999964, 0.0 },
+  { 2.4129827902061037e+93, 100, -0.50000000000000000, 0.0 },
+  { 2.7195429139752020e+93, 100, -0.39999999999999858, 0.0 },
+  { -1.4235309630837636e+93, 100, -0.29999999999999893, 0.0 },
+  { -2.9850618739468043e+93, 100, -0.19999999999999929, 0.0 },
+  { 4.7017027479251074e+92, 100, -0.099999999999999645, 0.0 },
+  { 3.0685187562549660e+93, 100, 0.0000000000000000, 0.0 },
+  { 4.7017027479243444e+92, 100, 0.10000000000000142, 0.0 },
+  { -2.9850618739468293e+93, 100, 0.20000000000000107, 0.0 },
+  { -1.4235309630836904e+93, 100, 0.30000000000000071, 0.0 },
+  { 2.7195429139752497e+93, 100, 0.40000000000000036, 0.0 },
+  { 2.4129827902061037e+93, 100, 0.50000000000000000, 0.0 },
+  { -2.2242581581553936e+93, 100, 0.60000000000000142, 0.0 },
+  { -3.4510765981143827e+93, 100, 0.70000000000000107, 0.0 },
+  { 1.4120762149478435e+93, 100, 0.80000000000000071, 0.0 },
+  { 4.5268398678911204e+93, 100, 0.90000000000000036, 0.0 },
+  { -1.4487067293379347e+92, 100, 1.0000000000000000, 0.0 },
+  { -5.5814393347236145e+93, 100, 1.1000000000000014, 0.0 },
+  { -1.7820042440390210e+93, 100, 1.2000000000000011, 0.0 },
+  { 6.4625437128323579e+93, 100, 1.3000000000000007, 0.0 },
+  { 4.6555468819923166e+93, 100, 1.4000000000000004, 0.0 },
+  { -6.8402151897169509e+93, 100, 1.5000000000000000, 0.0 },
+  { -8.8496828346969644e+93, 100, 1.6000000000000014, 0.0 },
+  { 6.0554070654774249e+93, 100, 1.7000000000000011, 0.0 },
+  { 1.4787573463714363e+94, 100, 1.8000000000000007, 0.0 },
+  { -2.8549527653152903e+93, 100, 1.9000000000000004, 0.0 },
+  { -2.2785574311661325e+94, 100, 2.0000000000000000, 0.0 },
+  { -5.0527155039780687e+93, 100, 2.1000000000000014, 0.0 },
+  { 3.2602488340117204e+94, 100, 2.2000000000000011, 0.0 },
+  { 2.1691501564685076e+94, 100, 2.3000000000000007, 0.0 },
+  { -4.2303228932575769e+94, 100, 2.4000000000000004, 0.0 },
+  { -5.3758761713337664e+94, 100, 2.5000000000000000, 0.0 },
+  { 4.5607706742535083e+94, 100, 2.6000000000000014, 0.0 },
+  { 1.1147132226581835e+95, 100, 2.7000000000000011, 0.0 },
+  { -2.6058116248681564e+94, 100, 2.8000000000000007, 0.0 },
+  { -2.0784160746797610e+95, 100, 2.9000000000000004, 0.0 },
+  { -5.5084542871196523e+94, 100, 3.0000000000000000, 0.0 },
+  { 3.5161870090564436e+95, 100, 3.1000000000000014, 0.0 },
+  { 2.8212012454565588e+95, 100, 3.2000000000000011, 0.0 },
+  { -5.2035951331058918e+95, 100, 3.3000000000000007, 0.0 },
+  { -8.2433116644948570e+95, 100, 3.4000000000000004, 0.0 },
+  { 5.7841213444838915e+95, 100, 3.5000000000000000, 0.0 },
+  { 1.9852724296241191e+96, 100, 3.6000000000000014, 0.0 },
+  { -5.5521768050576049e+94, 100, 3.7000000000000011, 0.0 },
+  { -4.1993887070961795e+96, 100, 3.8000000000000007, 0.0 },
+  { -2.3947326745293331e+96, 100, 3.9000000000000004, 0.0 },
+  { 7.7070682747643550e+96, 100, 4.0000000000000000, 0.0 },
+  { 1.0173847230741732e+97, 100, 4.1000000000000014, 0.0 },
+  { -1.0988290456448056e+97, 100, 4.2000000000000011, 0.0 },
+  { -3.0837503404959957e+97, 100, 4.3000000000000007, 0.0 },
+  { 5.2136163919277588e+96, 100, 4.4000000000000004, 0.0 },
+  { 7.8073853756187101e+97, 100, 4.5000000000000000, 0.0 },
+  { 4.2440218943296749e+97, 100, 4.6000000000000014, 0.0 },
+  { -1.6545238014143033e+98, 100, 4.7000000000000011, 0.0 },
+  { -2.3193021196802549e+98, 100, 4.8000000000000007, 0.0 },
+  { 2.5601172475776894e+98, 100, 4.9000000000000004, 0.0 },
+  { 8.1931937130591466e+98, 100, 5.0000000000000000, 0.0 },
+  { -4.0259235416636422e+97, 100, 5.1000000000000014, 0.0 },
+  { -2.3096466887887553e+99, 100, 5.2000000000000011, 0.0 },
+  { -1.8337906983005823e+99, 100, 5.3000000000000007, 0.0 },
+  { 5.0935670879056567e+99, 100, 5.4000000000000004, 0.0 },
+  { 9.9309186425970402e+99, 100, 5.5000000000000000, 0.0 },
+  { -6.2933057672784165e+99, 100, 5.6000000000000014, 0.0 },
+  { -3.6379102593330720e+100, 100, 5.7000000000000011, 0.0 },
+  { -1.5140717605507249e+100, 100, 5.8000000000000007, 0.0 },
+  { 1.0141407690966954e+101, 100, 5.9000000000000004, 0.0 },
+  { 1.5170693933260738e+101, 100, 6.0000000000000000, 0.0 },
+  { -1.8039133351602961e+101, 100, 6.1000000000000014, 0.0 },
+  { -7.0672139150705246e+101, 100, 6.1999999999999993, 0.0 },
+  { -1.4587350659144549e+101, 100, 6.3000000000000007, 0.0 },
+  { 2.3341289432999758e+102, 100, 6.4000000000000021, 0.0 },
+  { 3.2072472002047670e+102, 100, 6.5000000000000000, 0.0 },
+  { -4.8039047085582927e+102, 100, 6.6000000000000014, 0.0 },
+  { -1.7849709684883083e+103, 100, 6.6999999999999993, 0.0 },
+  { -3.7817730019120996e+102, 100, 6.8000000000000007, 0.0 },
+  { 6.4900499886059199e+103, 100, 6.9000000000000021, 0.0 },
+  { 1.0002273523275075e+104, 100, 7.0000000000000000, 0.0 },
+  { -1.2947583568693485e+104, 100, 7.1000000000000014, 0.0 },
+  { -5.9348804074874565e+104, 100, 7.1999999999999993, 0.0 },
+  { -2.9237691057264679e+104, 100, 7.3000000000000007, 0.0 },
+  { 2.1375121759801080e+105, 100, 7.4000000000000021, 0.0 },
+  { 4.4772364475394960e+105, 100, 7.5000000000000000, 0.0 },
+  { -2.7486638813241244e+105, 100, 7.6000000000000014, 0.0 },
+  { -2.4850432648123868e+106, 100, 7.6999999999999993, 0.0 },
+  { -2.7252309851017070e+106, 100, 7.8000000000000007, 0.0 },
+  { 7.3445622927440321e+106, 100, 7.9000000000000021, 0.0 },
+  { 2.5761505535443451e+107, 100, 8.0000000000000000, 0.0 },
+  { 8.4932594446944218e+106, 100, 8.1000000000000014, 0.0 },
+  { -1.1534178973583771e+108, 100, 8.1999999999999993, 0.0 },
+  { -2.5611278359589723e+108, 100, 8.3000000000000007, 0.0 },
+  { 1.2481735250541195e+108, 100, 8.4000000000000021, 0.0 },
+  { 1.6203702280499544e+109, 100, 8.5000000000000000, 0.0 },
+  { 2.5386102824684747e+109, 100, 8.6000000000000014, 0.0 },
+  { -3.8930624477368766e+109, 100, 8.6999999999999993, 0.0 },
+  { -2.2669773300293168e+110, 100, 8.8000000000000007, 0.0 },
+  { -2.6071876743327728e+110, 100, 8.9000000000000021, 0.0 },
+  { 7.7294136683043515e+110, 100, 9.0000000000000000, 0.0 },
+  { 3.3341330166544429e+111, 100, 9.1000000000000014, 0.0 },
+  { 2.9686037583391038e+111, 100, 9.2000000000000028, 0.0 },
+  { -1.3977488190034162e+112, 100, 9.3000000000000007, 0.0 },
+  { -5.3374224541142660e+112, 100, 9.4000000000000021, 0.0 },
+  { -4.2265051766934789e+112, 100, 9.5000000000000000, 0.0 },
+  { 2.4904626130430740e+113, 100, 9.6000000000000014, 0.0 },
+  { 9.4857435427573289e+113, 100, 9.7000000000000028, 0.0 },
+  { 8.3761676654305186e+113, 100, 9.8000000000000007, 0.0 },
+  { -4.4232904120312991e+114, 100, 9.9000000000000021, 0.0 },
+  { -1.8738689223256612e+115, 100, 10.000000000000000, 0.0 },
 };
 const double toler008 = 2.5000000000000020e-13;
+//  hermite
+
+// Test data for n=8.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data009[9] =
+{
+  { 5324432.0000000000, 8, 4.0000000000000000, 0.0 },
+  { 279702672.00000000, 8, 6.0000000000000000, 0.0 },
+  { 3409634960.0000000, 8, 8.0000000000000000, 0.0 },
+  { 22149057680.000000, 8, 10.000000000000000, 0.0 },
+  { 99650305680.000000, 8, 12.000000000000000, 0.0 },
+  { 1040259450512.0000, 8, 16.000000000000000, 0.0 },
+  { 6326369025680.0000, 8, 20.000000000000000, 0.0 },
+  { 9944083966401680.0, 8, 50.000000000000000, 0.0 },
+  { 2.5564173438656015e+18, 8, 100.00000000000000, 0.0 },
+};
+const double toler009 = 2.5000000000000020e-13;
+
+// Test data for n=18.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data010[9] =
+{
+  { 54268892282368.000, 18, 4.0000000000000000, 0.0 },
+  { 1.3505976034605665e+18, 18, 6.0000000000000000, 0.0 },
+  { 1.1719308290279925e+21, 18, 8.0000000000000000, 0.0 },
+  { 1.1336099533194677e+23, 18, 10.000000000000000, 0.0 },
+  { 3.9670688759298557e+24, 18, 12.000000000000000, 0.0 },
+  { 9.0887304967960375e+26, 18, 16.000000000000000, 0.0 },
+  { 5.6525959758874797e+28, 18, 20.000000000000000, 0.0 },
+  { 9.6976497965812384e+35, 18, 50.000000000000000, 0.0 },
+  { 2.6014460548774723e+41, 18, 100.00000000000000, 0.0 },
+};
+const double toler010 = 2.5000000000000020e-13;
+
+// Test data for n=32.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data011[9] =
+{
+  { 3.4488006171532706e+25, 32, 4.0000000000000000, 0.0 },
+  { 8.6646829675369123e+29, 32, 6.0000000000000000, 0.0 },
+  { 1.2445939522057109e+36, 32, 8.0000000000000000, 0.0 },
+  { 2.1381589300683108e+40, 32, 10.000000000000000, 0.0 },
+  { 2.0979395756455302e+43, 32, 12.000000000000000, 0.0 },
+  { 5.2024646069361253e+47, 32, 16.000000000000000, 0.0 },
+  { 9.6759233738497726e+50, 32, 20.000000000000000, 0.0 },
+  { 9.0500820467530134e+63, 32, 50.000000000000000, 0.0 },
+  { 4.1896031916819710e+73, 32, 100.00000000000000, 0.0 },
+};
+const double toler011 = 2.5000000000000020e-13;
+
+// Test data for n=50.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data012[9] =
+{
+  { -9.5599640670553907e+41, 50, 4.0000000000000000, 0.0 },
+  { -1.4355266959903589e+47, 50, 6.0000000000000000, 0.0 },
+  { 2.9492797132685063e+52, 50, 8.0000000000000000, 0.0 },
+  { 1.3516643049819314e+61, 50, 10.000000000000000, 0.0 },
+  { 5.1746552169783233e+66, 50, 12.000000000000000, 0.0 },
+  { 1.2608506104917666e+74, 50, 16.000000000000000, 0.0 },
+  { 2.4719364545684313e+79, 50, 20.000000000000000, 0.0 },
+  { 7.8081628444405771e+99, 50, 50.000000000000000, 0.0 },
+  { 1.0588500951956526e+115, 50, 100.00000000000000, 0.0 },
+};
+const double toler012 = 2.5000000000000020e-13;
+
+// Test data for n=72.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data013[9] =
+{
+  { -5.0016344249093296e+65, 72, 4.0000000000000000, 0.0 },
+  { 1.1604343420664594e+70, 72, 6.0000000000000000, 0.0 },
+  { 1.1307673578364519e+76, 72, 8.0000000000000000, 0.0 },
+  { -6.9227458950910379e+83, 72, 10.000000000000000, 0.0 },
+  { 4.2761121656851757e+93, 72, 12.000000000000000, 0.0 },
+  { 6.4057452391049260e+105, 72, 16.000000000000000, 0.0 },
+  { 6.5532144335168848e+113, 72, 20.000000000000000, 0.0 },
+  { 5.9536449994832570e+143, 72, 50.000000000000000, 0.0 },
+  { 4.1539384208364770e+165, 72, 100.00000000000000, 0.0 },
+};
+const double toler013 = 2.5000000000000020e-13;
+
+// Test data for n=128.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data014[9] =
+{
+  { 7.4843015969363893e+129, 128, 4.0000000000000000, 0.0 },
+  { 1.9427207779012687e+134, 128, 6.0000000000000000, 0.0 },
+  { -2.5332076374233721e+140, 128, 8.0000000000000000, 0.0 },
+  { -3.6481920485874574e+146, 128, 10.000000000000000, 0.0 },
+  { -6.6019131304361279e+157, 128, 12.000000000000000, 0.0 },
+  { 1.7909969314519483e+182, 128, 16.000000000000000, 0.0 },
+  { 4.6773285529590986e+199, 128, 20.000000000000000, 0.0 },
+  { 1.8851953794407319e+255, 128, 50.000000000000000, 0.0 },
+  { 2.2605490449873036e+294, 128, 100.00000000000000, 0.0 },
+};
+const double toler014 = 2.5000000000000020e-13;
+
+// Divergence at n=200 x=50.000000000000000 f=-nan f_GSL=inf
+// Divergence at n=200 x=100.00000000000000 f=-nan f_GSL=inf
+// Divergence at n=200 x=100.00000000000000 f=-nan f_GSL=inf
+// Test data for n=200.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data015[7] =
+{
+  { -1.3224398396684072e+220, 200, 4.0000000000000000, 0.0 },
+  { 2.8108557561597729e+224, 200, 6.0000000000000000, 0.0 },
+  { 2.2034127668580903e+230, 200, 8.0000000000000000, 0.0 },
+  { -4.7005387186273384e+238, 200, 10.000000000000000, 0.0 },
+  { 6.8125674650192333e+247, 200, 12.000000000000000, 0.0 },
+  { 2.8932855639383936e+272, 200, 16.000000000000000, 0.0 },
+  { 9.8757526545830183e+303, 200, 20.000000000000000, 0.0 },
+};
+const double toler015 = 2.5000000000000020e-13;
 
-template<typename Tp, unsigned int Num>
+// Divergence at n=1250 x=4.0000000000000000 f=-nan f_GSL=-inf
+// Divergence at n=1250 x=6.0000000000000000 f=-nan f_GSL=inf
+// Divergence at n=1250 x=8.0000000000000000 f=-nan f_GSL=inf
+// ...
+// Divergence at n=1250 x=100.00000000000000 f=-nan f_GSL=inf
+// Divergence at n=5000 x=4.0000000000000000 f=-nan f_GSL=-inf
+// Divergence at n=5000 x=6.0000000000000000 f=-nan f_GSL=-inf
+// Divergence at n=5000 x=8.0000000000000000 f=-nan f_GSL=inf
+// ...
+// Divergence at n=5000 x=100.00000000000000 f=-nan f_GSL=inf
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_hermite<Tp> (&data)[Num], Tp toler)
+  test(const testcase_hermite<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::hermite(data[i].n, data[i].x);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::hermite(data[i].n, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
@@ -1755,5 +1938,12 @@ main()
   test(data006, toler006);
   test(data007, toler007);
   test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
   return 0;
 }
index db79caa..8e640c8 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for n=0.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_laguerre<double>
 data001[21] =
 {
-  { 1.0000000000000000, 0, 0.0000000000000000 },
-  { 1.0000000000000000, 0, 5.0000000000000000 },
-  { 1.0000000000000000, 0, 10.000000000000000 },
-  { 1.0000000000000000, 0, 15.000000000000000 },
-  { 1.0000000000000000, 0, 20.000000000000000 },
-  { 1.0000000000000000, 0, 25.000000000000000 },
-  { 1.0000000000000000, 0, 30.000000000000000 },
-  { 1.0000000000000000, 0, 35.000000000000000 },
-  { 1.0000000000000000, 0, 40.000000000000000 },
-  { 1.0000000000000000, 0, 45.000000000000000 },
-  { 1.0000000000000000, 0, 50.000000000000000 },
-  { 1.0000000000000000, 0, 55.000000000000000 },
-  { 1.0000000000000000, 0, 60.000000000000000 },
-  { 1.0000000000000000, 0, 65.000000000000000 },
-  { 1.0000000000000000, 0, 70.000000000000000 },
-  { 1.0000000000000000, 0, 75.000000000000000 },
-  { 1.0000000000000000, 0, 80.000000000000000 },
-  { 1.0000000000000000, 0, 85.000000000000000 },
-  { 1.0000000000000000, 0, 90.000000000000000 },
-  { 1.0000000000000000, 0, 95.000000000000000 },
-  { 1.0000000000000000, 0, 100.00000000000000 },
+  { 1.0000000000000000, 0, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 15.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 20.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 25.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 30.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 35.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 40.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 45.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 50.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 55.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 60.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 65.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 70.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 75.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 80.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 85.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 90.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 95.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 100.00000000000000, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
 // Test data for n=1.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_laguerre<double>
 data002[21] =
 {
-  { 1.0000000000000000, 1, 0.0000000000000000 },
-  { -4.0000000000000000, 1, 5.0000000000000000 },
-  { -9.0000000000000000, 1, 10.000000000000000 },
-  { -14.000000000000000, 1, 15.000000000000000 },
-  { -19.000000000000000, 1, 20.000000000000000 },
-  { -24.000000000000000, 1, 25.000000000000000 },
-  { -29.000000000000000, 1, 30.000000000000000 },
-  { -34.000000000000000, 1, 35.000000000000000 },
-  { -39.000000000000000, 1, 40.000000000000000 },
-  { -44.000000000000000, 1, 45.000000000000000 },
-  { -49.000000000000000, 1, 50.000000000000000 },
-  { -54.000000000000000, 1, 55.000000000000000 },
-  { -59.000000000000000, 1, 60.000000000000000 },
-  { -64.000000000000000, 1, 65.000000000000000 },
-  { -69.000000000000000, 1, 70.000000000000000 },
-  { -74.000000000000000, 1, 75.000000000000000 },
-  { -79.000000000000000, 1, 80.000000000000000 },
-  { -84.000000000000000, 1, 85.000000000000000 },
-  { -89.000000000000000, 1, 90.000000000000000 },
-  { -94.000000000000000, 1, 95.000000000000000 },
-  { -99.000000000000000, 1, 100.00000000000000 },
+  { 1.0000000000000000, 1, 0.0000000000000000, 0.0 },
+  { -4.0000000000000000, 1, 5.0000000000000000, 0.0 },
+  { -9.0000000000000000, 1, 10.000000000000000, 0.0 },
+  { -14.000000000000000, 1, 15.000000000000000, 0.0 },
+  { -19.000000000000000, 1, 20.000000000000000, 0.0 },
+  { -24.000000000000000, 1, 25.000000000000000, 0.0 },
+  { -29.000000000000000, 1, 30.000000000000000, 0.0 },
+  { -34.000000000000000, 1, 35.000000000000000, 0.0 },
+  { -39.000000000000000, 1, 40.000000000000000, 0.0 },
+  { -44.000000000000000, 1, 45.000000000000000, 0.0 },
+  { -49.000000000000000, 1, 50.000000000000000, 0.0 },
+  { -54.000000000000000, 1, 55.000000000000000, 0.0 },
+  { -59.000000000000000, 1, 60.000000000000000, 0.0 },
+  { -64.000000000000000, 1, 65.000000000000000, 0.0 },
+  { -69.000000000000000, 1, 70.000000000000000, 0.0 },
+  { -74.000000000000000, 1, 75.000000000000000, 0.0 },
+  { -79.000000000000000, 1, 80.000000000000000, 0.0 },
+  { -84.000000000000000, 1, 85.000000000000000, 0.0 },
+  { -89.000000000000000, 1, 90.000000000000000, 0.0 },
+  { -94.000000000000000, 1, 95.000000000000000, 0.0 },
+  { -99.000000000000000, 1, 100.00000000000000, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
 // Test data for n=2.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_laguerre<double>
 data003[21] =
 {
-  { 1.0000000000000000, 2, 0.0000000000000000 },
-  { 3.5000000000000000, 2, 5.0000000000000000 },
-  { 31.000000000000000, 2, 10.000000000000000 },
-  { 83.500000000000000, 2, 15.000000000000000 },
-  { 161.00000000000000, 2, 20.000000000000000 },
-  { 263.50000000000000, 2, 25.000000000000000 },
-  { 391.00000000000000, 2, 30.000000000000000 },
-  { 543.50000000000000, 2, 35.000000000000000 },
-  { 721.00000000000000, 2, 40.000000000000000 },
-  { 923.50000000000000, 2, 45.000000000000000 },
-  { 1151.0000000000000, 2, 50.000000000000000 },
-  { 1403.5000000000000, 2, 55.000000000000000 },
-  { 1681.0000000000000, 2, 60.000000000000000 },
-  { 1983.5000000000000, 2, 65.000000000000000 },
-  { 2311.0000000000000, 2, 70.000000000000000 },
-  { 2663.5000000000000, 2, 75.000000000000000 },
-  { 3041.0000000000000, 2, 80.000000000000000 },
-  { 3443.5000000000000, 2, 85.000000000000000 },
-  { 3871.0000000000000, 2, 90.000000000000000 },
-  { 4323.5000000000000, 2, 95.000000000000000 },
-  { 4801.0000000000000, 2, 100.00000000000000 },
+  { 1.0000000000000000, 2, 0.0000000000000000, 0.0 },
+  { 3.5000000000000000, 2, 5.0000000000000000, 0.0 },
+  { 31.000000000000000, 2, 10.000000000000000, 0.0 },
+  { 83.500000000000000, 2, 15.000000000000000, 0.0 },
+  { 161.00000000000000, 2, 20.000000000000000, 0.0 },
+  { 263.50000000000000, 2, 25.000000000000000, 0.0 },
+  { 391.00000000000000, 2, 30.000000000000000, 0.0 },
+  { 543.50000000000000, 2, 35.000000000000000, 0.0 },
+  { 721.00000000000000, 2, 40.000000000000000, 0.0 },
+  { 923.50000000000000, 2, 45.000000000000000, 0.0 },
+  { 1151.0000000000000, 2, 50.000000000000000, 0.0 },
+  { 1403.5000000000000, 2, 55.000000000000000, 0.0 },
+  { 1681.0000000000000, 2, 60.000000000000000, 0.0 },
+  { 1983.5000000000000, 2, 65.000000000000000, 0.0 },
+  { 2311.0000000000000, 2, 70.000000000000000, 0.0 },
+  { 2663.5000000000000, 2, 75.000000000000000, 0.0 },
+  { 3041.0000000000000, 2, 80.000000000000000, 0.0 },
+  { 3443.5000000000000, 2, 85.000000000000000, 0.0 },
+  { 3871.0000000000000, 2, 90.000000000000000, 0.0 },
+  { 4323.5000000000000, 2, 95.000000000000000, 0.0 },
+  { 4801.0000000000000, 2, 100.00000000000000, 0.0 },
 };
 const double toler003 = 2.5000000000000020e-13;
 
 // Test data for n=5.
-// max(|f - f_GSL|): 7.4505805969238281e-09
+// max(|f - f_GSL|): 7.4505805969238281e-09 at index 20
 // max(|f - f_GSL| / |f_GSL|): 1.9501553136894460e-16
+// mean(f - f_GSL): -9.1645146498075565e-11
+// variance(f - f_GSL): 2.8430813755854757e-18
+// stddev(f - f_GSL): 1.6861439367934980e-09
 const testcase_laguerre<double>
 data004[21] =
 {
-  { 1.0000000000000000, 5, 0.0000000000000000 },
-  { -3.1666666666666665, 5, 5.0000000000000000 },
-  { 34.333333333333329, 5, 10.000000000000000 },
-  { -355.25000000000000, 5, 15.000000000000000 },
-  { -4765.6666666666670, 5, 20.000000000000000 },
-  { -23040.666666666664, 5, 25.000000000000000 },
-  { -74399.000000000000, 5, 30.000000000000000 },
-  { -190559.41666666663, 5, 35.000000000000000 },
-  { -418865.66666666663, 5, 40.000000000000000 },
-  { -825411.50000000000, 5, 45.000000000000000 },
-  { -1498165.6666666665, 5, 50.000000000000000 },
-  { -2550096.9166666670, 5, 55.000000000000000 },
-  { -4122299.0000000000, 5, 60.000000000000000 },
-  { -6387115.6666666670, 5, 65.000000000000000 },
-  { -9551265.6666666679, 5, 70.000000000000000 },
-  { -13858967.750000000, 5, 75.000000000000000 },
-  { -19595065.666666664, 5, 80.000000000000000 },
-  { -27088153.166666668, 5, 85.000000000000000 },
-  { -36713699.000000000, 5, 90.000000000000000 },
-  { -48897171.916666657, 5, 95.000000000000000 },
-  { -64117165.666666664, 5, 100.00000000000000 },
+  { 1.0000000000000000, 5, 0.0000000000000000, 0.0 },
+  { -3.1666666666666665, 5, 5.0000000000000000, 0.0 },
+  { 34.333333333333329, 5, 10.000000000000000, 0.0 },
+  { -355.25000000000000, 5, 15.000000000000000, 0.0 },
+  { -4765.6666666666670, 5, 20.000000000000000, 0.0 },
+  { -23040.666666666664, 5, 25.000000000000000, 0.0 },
+  { -74399.000000000000, 5, 30.000000000000000, 0.0 },
+  { -190559.41666666663, 5, 35.000000000000000, 0.0 },
+  { -418865.66666666663, 5, 40.000000000000000, 0.0 },
+  { -825411.50000000000, 5, 45.000000000000000, 0.0 },
+  { -1498165.6666666665, 5, 50.000000000000000, 0.0 },
+  { -2550096.9166666670, 5, 55.000000000000000, 0.0 },
+  { -4122299.0000000000, 5, 60.000000000000000, 0.0 },
+  { -6387115.6666666670, 5, 65.000000000000000, 0.0 },
+  { -9551265.6666666679, 5, 70.000000000000000, 0.0 },
+  { -13858967.750000000, 5, 75.000000000000000, 0.0 },
+  { -19595065.666666664, 5, 80.000000000000000, 0.0 },
+  { -27088153.166666668, 5, 85.000000000000000, 0.0 },
+  { -36713699.000000000, 5, 90.000000000000000, 0.0 },
+  { -48897171.916666657, 5, 95.000000000000000, 0.0 },
+  { -64117165.666666664, 5, 100.00000000000000, 0.0 },
 };
 const double toler004 = 2.5000000000000020e-13;
 
 // Test data for n=10.
-// max(|f - f_GSL|): 0.0029296875000000000
+// max(|f - f_GSL|): 0.0029296875000000000 at index 19
 // max(|f - f_GSL| / |f_GSL|): 6.1315986390500118e-15
+// mean(f - f_GSL): -0.00011841882388131082
+// variance(f - f_GSL): 7.3638903636883773e-10
+// stddev(f - f_GSL): 2.7136489020668051e-05
 const testcase_laguerre<double>
 data005[21] =
 {
-  { 1.0000000000000000, 10, 0.0000000000000000 },
-  { 1.7562761794532631, 10, 5.0000000000000000 },
-  { 27.984126984126977, 10, 10.000000000000000 },
-  { -237.51841517857147, 10, 15.000000000000000 },
-  { 3227.8077601410932, 10, 20.000000000000000 },
-  { -45786.199797453693, 10, 25.000000000000000 },
-  { 15129.571428571455, 10, 30.000000000000000 },
-  { 7764800.8179494590, 10, 35.000000000000000 },
-  { 79724066.608465582, 10, 40.000000000000000 },
-  { 469865425.65122765, 10, 45.000000000000000 },
-  { 2037190065.3738980, 10, 50.000000000000000 },
-  { 7187828002.9825764, 10, 55.000000000000000 },
-  { 21804200401.000000, 10, 60.000000000000000 },
-  { 58854343015.616211, 10, 65.000000000000000 },
-  { 144688291819.51855, 10, 70.000000000000000 },
-  { 329425241736.70038, 10, 75.000000000000000 },
-  { 703324772760.08276, 10, 80.000000000000000 },
-  { 1421627560118.6157, 10, 85.000000000000000 },
-  { 2741055412243.8569, 10, 90.000000000000000 },
-  { 5071986977681.8652, 10, 95.000000000000000 },
-  { 9051283795429.5723, 10, 100.00000000000000 },
+  { 1.0000000000000000, 10, 0.0000000000000000, 0.0 },
+  { 1.7562761794532631, 10, 5.0000000000000000, 0.0 },
+  { 27.984126984126977, 10, 10.000000000000000, 0.0 },
+  { -237.51841517857147, 10, 15.000000000000000, 0.0 },
+  { 3227.8077601410932, 10, 20.000000000000000, 0.0 },
+  { -45786.199797453693, 10, 25.000000000000000, 0.0 },
+  { 15129.571428571455, 10, 30.000000000000000, 0.0 },
+  { 7764800.8179494590, 10, 35.000000000000000, 0.0 },
+  { 79724066.608465582, 10, 40.000000000000000, 0.0 },
+  { 469865425.65122765, 10, 45.000000000000000, 0.0 },
+  { 2037190065.3738980, 10, 50.000000000000000, 0.0 },
+  { 7187828002.9825764, 10, 55.000000000000000, 0.0 },
+  { 21804200401.000000, 10, 60.000000000000000, 0.0 },
+  { 58854343015.616211, 10, 65.000000000000000, 0.0 },
+  { 144688291819.51855, 10, 70.000000000000000, 0.0 },
+  { 329425241736.70038, 10, 75.000000000000000, 0.0 },
+  { 703324772760.08276, 10, 80.000000000000000, 0.0 },
+  { 1421627560118.6157, 10, 85.000000000000000, 0.0 },
+  { 2741055412243.8569, 10, 90.000000000000000, 0.0 },
+  { 5071986977681.8652, 10, 95.000000000000000, 0.0 },
+  { 9051283795429.5723, 10, 100.00000000000000, 0.0 },
 };
 const double toler005 = 5.0000000000000039e-13;
 
 // Test data for n=20.
-// max(|f - f_GSL|): 2048.0000000000000
+// max(|f - f_GSL|): 2048.0000000000000 at index 19
 // max(|f - f_GSL| / |f_GSL|): 7.1189246999774008e-15
+// mean(f - f_GSL): -96.983562564903480
+// variance(f - f_GSL): 8.4641159685539344e+21
+// stddev(f - f_GSL): 92000630261.721222
 const testcase_laguerre<double>
 data006[21] =
 {
-  { 1.0000000000000000, 20, 0.0000000000000000 },
-  { 2.0202257444769134, 20, 5.0000000000000000 },
-  { -11.961333867812119, 20, 10.000000000000000 },
-  { -50.151037960139455, 20, 15.000000000000000 },
-  { 2829.4728613531743, 20, 20.000000000000000 },
-  { -11583.947899113540, 20, 25.000000000000000 },
-  { -18439.424502520938, 20, 30.000000000000000 },
-  { -38838.223606979285, 20, 35.000000000000000 },
-  { 24799805.877530713, 20, 40.000000000000000 },
-  { -673953823.59913278, 20, 45.000000000000000 },
-  { 7551960453.7672548, 20, 50.000000000000000 },
-  { 31286508510.614746, 20, 55.000000000000000 },
-  { -1379223608444.9155, 20, 60.000000000000000 },
-  { -6692517968212.9717, 20, 65.000000000000000 },
-  { 165423821874449.94, 20, 70.000000000000000 },
-  { 3082390018008546.5, 20, 75.000000000000000 },
-  { 29500368536981676., 20, 80.000000000000000 },
-  { 2.0353526354974186e+17, 20, 85.000000000000000 },
-  { 1.1292309514432901e+18, 20, 90.000000000000000 },
-  { 5.3239262855563100e+18, 20, 95.000000000000000 },
-  { 2.2061882785931735e+19, 20, 100.00000000000000 },
+  { 1.0000000000000000, 20, 0.0000000000000000, 0.0 },
+  { 2.0202257444769134, 20, 5.0000000000000000, 0.0 },
+  { -11.961333867812119, 20, 10.000000000000000, 0.0 },
+  { -50.151037960139455, 20, 15.000000000000000, 0.0 },
+  { 2829.4728613531743, 20, 20.000000000000000, 0.0 },
+  { -11583.947899113540, 20, 25.000000000000000, 0.0 },
+  { -18439.424502520938, 20, 30.000000000000000, 0.0 },
+  { -38838.223606979285, 20, 35.000000000000000, 0.0 },
+  { 24799805.877530713, 20, 40.000000000000000, 0.0 },
+  { -673953823.59913278, 20, 45.000000000000000, 0.0 },
+  { 7551960453.7672548, 20, 50.000000000000000, 0.0 },
+  { 31286508510.614746, 20, 55.000000000000000, 0.0 },
+  { -1379223608444.9155, 20, 60.000000000000000, 0.0 },
+  { -6692517968212.9717, 20, 65.000000000000000, 0.0 },
+  { 165423821874449.94, 20, 70.000000000000000, 0.0 },
+  { 3082390018008546.5, 20, 75.000000000000000, 0.0 },
+  { 29500368536981676., 20, 80.000000000000000, 0.0 },
+  { 2.0353526354974186e+17, 20, 85.000000000000000, 0.0 },
+  { 1.1292309514432901e+18, 20, 90.000000000000000, 0.0 },
+  { 5.3239262855563100e+18, 20, 95.000000000000000, 0.0 },
+  { 2.2061882785931735e+19, 20, 100.00000000000000, 0.0 },
 };
 const double toler006 = 5.0000000000000039e-13;
 
 // Test data for n=50.
-// max(|f - f_GSL|): 196608.00000000000
+// max(|f - f_GSL|): 196608.00000000000 at index 20
 // max(|f - f_GSL| / |f_GSL|): 4.2910775919271532e-15
+// mean(f - f_GSL): -8840.7163987470722
+// variance(f - f_GSL): 9.4918743844066836e+19
+// stddev(f - f_GSL): 9742625100.2523346
 const testcase_laguerre<double>
 data007[21] =
 {
-  { 1.0000000000000000, 50, 0.0000000000000000 },
-  { 1.4735258819430543, 50, 5.0000000000000000 },
-  { 17.534183446338233, 50, 10.000000000000000 },
-  { -195.62436619077380, 50, 15.000000000000000 },
-  { 980.26961889791028, 50, 20.000000000000000 },
-  { 24812.277673870878, 50, 25.000000000000000 },
-  { 293000.50735962362, 50, 30.000000000000000 },
-  { 2316195.5013375278, 50, 35.000000000000000 },
-  { -14896937.968694873, 50, 40.000000000000000 },
-  { -502066598.00813466, 50, 45.000000000000000 },
-  { 2513677852.6916871, 50, 50.000000000000000 },
-  { 45129675503.538910, 50, 55.000000000000000 },
-  { -883876565337.99219, 50, 60.000000000000000 },
-  { 9361319947203.8418, 50, 65.000000000000000 },
-  { -80967880733583.234, 50, 70.000000000000000 },
-  { 717391079438942.62, 50, 75.000000000000000 },
-  { -8217471769564841.0, 50, 80.000000000000000 },
-  { 1.2595276229009978e+17, 50, 85.000000000000000 },
-  { -2.1140031308048891e+18, 50, 90.000000000000000 },
-  { 3.2438187475835134e+19, 50, 95.000000000000000 },
-  { -3.9710103487094692e+20, 50, 100.00000000000000 },
+  { 1.0000000000000000, 50, 0.0000000000000000, 0.0 },
+  { 1.4735258819430543, 50, 5.0000000000000000, 0.0 },
+  { 17.534183446338233, 50, 10.000000000000000, 0.0 },
+  { -195.62436619077380, 50, 15.000000000000000, 0.0 },
+  { 980.26961889791028, 50, 20.000000000000000, 0.0 },
+  { 24812.277673870878, 50, 25.000000000000000, 0.0 },
+  { 293000.50735962362, 50, 30.000000000000000, 0.0 },
+  { 2316195.5013375278, 50, 35.000000000000000, 0.0 },
+  { -14896937.968694873, 50, 40.000000000000000, 0.0 },
+  { -502066598.00813466, 50, 45.000000000000000, 0.0 },
+  { 2513677852.6916871, 50, 50.000000000000000, 0.0 },
+  { 45129675503.538910, 50, 55.000000000000000, 0.0 },
+  { -883876565337.99219, 50, 60.000000000000000, 0.0 },
+  { 9361319947203.8418, 50, 65.000000000000000, 0.0 },
+  { -80967880733583.234, 50, 70.000000000000000, 0.0 },
+  { 717391079438942.62, 50, 75.000000000000000, 0.0 },
+  { -8217471769564841.0, 50, 80.000000000000000, 0.0 },
+  { 1.2595276229009978e+17, 50, 85.000000000000000, 0.0 },
+  { -2.1140031308048891e+18, 50, 90.000000000000000, 0.0 },
+  { 3.2438187475835134e+19, 50, 95.000000000000000, 0.0 },
+  { -3.9710103487094692e+20, 50, 100.00000000000000, 0.0 },
 };
 const double toler007 = 2.5000000000000020e-13;
 
 // Test data for n=100.
-// max(|f - f_GSL|): 98304.000000000000
+// max(|f - f_GSL|): 98304.000000000000 at index 20
 // max(|f - f_GSL| / |f_GSL|): 3.8776197831393928e-15
+// mean(f - f_GSL): -3668.6107413234895
+// variance(f - f_GSL): 2.7407314162194493e+19
+// stddev(f - f_GSL): 5235199534.1337748
 const testcase_laguerre<double>
 data008[21] =
 {
-  { 1.0000000000000000, 100, 0.0000000000000000 },
-  { 1.4555271625328801, 100, 5.0000000000000000 },
-  { 13.277662844303450, 100, 10.000000000000000 },
-  { 91.737038454342454, 100, 15.000000000000000 },
-  { 1854.0367283243388, 100, 20.000000000000000 },
-  { -11281.698886837261, 100, 25.000000000000000 },
-  { 170141.86987046551, 100, 30.000000000000000 },
-  { -2950092.7025822806, 100, 35.000000000000000 },
-  { -7272442.3156006960, 100, 40.000000000000000 },
-  { 295697471.90876162, 100, 45.000000000000000 },
-  { 4847420871.2690506, 100, 50.000000000000000 },
-  { 59406998102.392288, 100, 55.000000000000000 },
-  { 693492765740.29688, 100, 60.000000000000000 },
-  { 6606192010150.3154, 100, 65.000000000000000 },
-  { 17125518672239.770, 100, 70.000000000000000 },
-  { -870493767065150.12, 100, 75.000000000000000 },
-  { -13763178176383768., 100, 80.000000000000000 },
-  { 30667078414479584., 100, 85.000000000000000 },
-  { 2.1307220490380173e+18, 100, 90.000000000000000 },
-  { -7.2706523009007821e+18, 100, 95.000000000000000 },
-  { -2.6292260693068916e+20, 100, 100.00000000000000 },
+  { 1.0000000000000000, 100, 0.0000000000000000, 0.0 },
+  { 1.4555271625328801, 100, 5.0000000000000000, 0.0 },
+  { 13.277662844303450, 100, 10.000000000000000, 0.0 },
+  { 91.737038454342454, 100, 15.000000000000000, 0.0 },
+  { 1854.0367283243388, 100, 20.000000000000000, 0.0 },
+  { -11281.698886837261, 100, 25.000000000000000, 0.0 },
+  { 170141.86987046551, 100, 30.000000000000000, 0.0 },
+  { -2950092.7025822806, 100, 35.000000000000000, 0.0 },
+  { -7272442.3156006960, 100, 40.000000000000000, 0.0 },
+  { 295697471.90876162, 100, 45.000000000000000, 0.0 },
+  { 4847420871.2690506, 100, 50.000000000000000, 0.0 },
+  { 59406998102.392288, 100, 55.000000000000000, 0.0 },
+  { 693492765740.29688, 100, 60.000000000000000, 0.0 },
+  { 6606192010150.3154, 100, 65.000000000000000, 0.0 },
+  { 17125518672239.770, 100, 70.000000000000000, 0.0 },
+  { -870493767065150.12, 100, 75.000000000000000, 0.0 },
+  { -13763178176383768., 100, 80.000000000000000, 0.0 },
+  { 30667078414479584., 100, 85.000000000000000, 0.0 },
+  { 2.1307220490380173e+18, 100, 90.000000000000000, 0.0 },
+  { -7.2706523009007821e+18, 100, 95.000000000000000, 0.0 },
+  { -2.6292260693068916e+20, 100, 100.00000000000000, 0.0 },
 };
 const double toler008 = 2.5000000000000020e-13;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_laguerre<Tp> (&data)[Num], Tp toler)
+  test(const testcase_laguerre<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::laguerre(data[i].n, data[i].x);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::laguerre(data[i].n, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index bd691e2..45c21f1 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for l=0.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_legendre<double>
 data001[21] =
 {
-  { 1.0000000000000000, 0, -1.0000000000000000 },
-  { 1.0000000000000000, 0, -0.90000000000000002 },
-  { 1.0000000000000000, 0, -0.80000000000000004 },
-  { 1.0000000000000000, 0, -0.69999999999999996 },
-  { 1.0000000000000000, 0, -0.59999999999999998 },
-  { 1.0000000000000000, 0, -0.50000000000000000 },
-  { 1.0000000000000000, 0, -0.40000000000000002 },
-  { 1.0000000000000000, 0, -0.30000000000000004 },
-  { 1.0000000000000000, 0, -0.19999999999999996 },
-  { 1.0000000000000000, 0, -0.099999999999999978 },
-  { 1.0000000000000000, 0, 0.0000000000000000 },
-  { 1.0000000000000000, 0, 0.10000000000000009 },
-  { 1.0000000000000000, 0, 0.19999999999999996 },
-  { 1.0000000000000000, 0, 0.30000000000000004 },
-  { 1.0000000000000000, 0, 0.39999999999999991 },
-  { 1.0000000000000000, 0, 0.50000000000000000 },
-  { 1.0000000000000000, 0, 0.60000000000000009 },
-  { 1.0000000000000000, 0, 0.69999999999999996 },
-  { 1.0000000000000000, 0, 0.80000000000000004 },
-  { 1.0000000000000000, 0, 0.89999999999999991 },
-  { 1.0000000000000000, 0, 1.0000000000000000 },
+  { 1.0000000000000000, 0, -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 0, 1.0000000000000000, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
 // Test data for l=1.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_legendre<double>
 data002[21] =
 {
-  { -1.0000000000000000, 1, -1.0000000000000000 },
-  { -0.90000000000000002, 1, -0.90000000000000002 },
-  { -0.80000000000000004, 1, -0.80000000000000004 },
-  { -0.69999999999999996, 1, -0.69999999999999996 },
-  { -0.59999999999999998, 1, -0.59999999999999998 },
-  { -0.50000000000000000, 1, -0.50000000000000000 },
-  { -0.40000000000000002, 1, -0.40000000000000002 },
-  { -0.30000000000000004, 1, -0.30000000000000004 },
-  { -0.19999999999999996, 1, -0.19999999999999996 },
-  { -0.099999999999999978, 1, -0.099999999999999978 },
-  { 0.0000000000000000, 1, 0.0000000000000000 },
-  { 0.10000000000000009, 1, 0.10000000000000009 },
-  { 0.19999999999999996, 1, 0.19999999999999996 },
-  { 0.30000000000000004, 1, 0.30000000000000004 },
-  { 0.39999999999999991, 1, 0.39999999999999991 },
-  { 0.50000000000000000, 1, 0.50000000000000000 },
-  { 0.60000000000000009, 1, 0.60000000000000009 },
-  { 0.69999999999999996, 1, 0.69999999999999996 },
-  { 0.80000000000000004, 1, 0.80000000000000004 },
-  { 0.89999999999999991, 1, 0.89999999999999991 },
-  { 1.0000000000000000, 1, 1.0000000000000000 },
+  { -1.0000000000000000, 1, -1.0000000000000000, 0.0 },
+  { -0.90000000000000002, 1, -0.90000000000000002, 0.0 },
+  { -0.80000000000000004, 1, -0.80000000000000004, 0.0 },
+  { -0.69999999999999996, 1, -0.69999999999999996, 0.0 },
+  { -0.59999999999999998, 1, -0.59999999999999998, 0.0 },
+  { -0.50000000000000000, 1, -0.50000000000000000, 0.0 },
+  { -0.39999999999999991, 1, -0.39999999999999991, 0.0 },
+  { -0.29999999999999993, 1, -0.29999999999999993, 0.0 },
+  { -0.19999999999999996, 1, -0.19999999999999996, 0.0 },
+  { -0.099999999999999978, 1, -0.099999999999999978, 0.0 },
+  { 0.0000000000000000, 1, 0.0000000000000000, 0.0 },
+  { 0.10000000000000009, 1, 0.10000000000000009, 0.0 },
+  { 0.20000000000000018, 1, 0.20000000000000018, 0.0 },
+  { 0.30000000000000004, 1, 0.30000000000000004, 0.0 },
+  { 0.40000000000000013, 1, 0.40000000000000013, 0.0 },
+  { 0.50000000000000000, 1, 0.50000000000000000, 0.0 },
+  { 0.60000000000000009, 1, 0.60000000000000009, 0.0 },
+  { 0.70000000000000018, 1, 0.70000000000000018, 0.0 },
+  { 0.80000000000000004, 1, 0.80000000000000004, 0.0 },
+  { 0.90000000000000013, 1, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 1, 1.0000000000000000, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
 // Test data for l=2.
-// max(|f - f_GSL|): 1.1102230246251565e-16
+// max(|f - f_GSL|): 1.1102230246251565e-16 at index 17
 // max(|f - f_GSL| / |f_GSL|): 1.3877787807814482e-15
+// mean(f - f_GSL): 1.8503717077085941e-17
+// variance(f - f_GSL): 1.7975346147614202e-35
+// stddev(f - f_GSL): 4.2397342071896678e-18
 const testcase_legendre<double>
 data003[21] =
 {
-  { 1.0000000000000000, 2, -1.0000000000000000 },
-  { 0.71500000000000008, 2, -0.90000000000000002 },
-  { 0.46000000000000019, 2, -0.80000000000000004 },
-  { 0.23499999999999988, 2, -0.69999999999999996 },
-  { 0.039999999999999925, 2, -0.59999999999999998 },
-  { -0.12500000000000000, 2, -0.50000000000000000 },
-  { -0.25999999999999995, 2, -0.40000000000000002 },
-  { -0.36499999999999999, 2, -0.30000000000000004 },
-  { -0.44000000000000006, 2, -0.19999999999999996 },
-  { -0.48499999999999999, 2, -0.099999999999999978 },
-  { -0.50000000000000000, 2, 0.0000000000000000 },
-  { -0.48499999999999999, 2, 0.10000000000000009 },
-  { -0.44000000000000006, 2, 0.19999999999999996 },
-  { -0.36499999999999999, 2, 0.30000000000000004 },
-  { -0.26000000000000012, 2, 0.39999999999999991 },
-  { -0.12500000000000000, 2, 0.50000000000000000 },
-  { 0.040000000000000147, 2, 0.60000000000000009 },
-  { 0.23499999999999988, 2, 0.69999999999999996 },
-  { 0.46000000000000019, 2, 0.80000000000000004 },
-  { 0.71499999999999986, 2, 0.89999999999999991 },
-  { 1.0000000000000000, 2, 1.0000000000000000 },
+  { 1.0000000000000000, 2, -1.0000000000000000, 0.0 },
+  { 0.71500000000000008, 2, -0.90000000000000002, 0.0 },
+  { 0.46000000000000019, 2, -0.80000000000000004, 0.0 },
+  { 0.23499999999999988, 2, -0.69999999999999996, 0.0 },
+  { 0.039999999999999925, 2, -0.59999999999999998, 0.0 },
+  { -0.12500000000000000, 2, -0.50000000000000000, 0.0 },
+  { -0.26000000000000012, 2, -0.39999999999999991, 0.0 },
+  { -0.36500000000000005, 2, -0.29999999999999993, 0.0 },
+  { -0.44000000000000006, 2, -0.19999999999999996, 0.0 },
+  { -0.48499999999999999, 2, -0.099999999999999978, 0.0 },
+  { -0.50000000000000000, 2, 0.0000000000000000, 0.0 },
+  { -0.48499999999999999, 2, 0.10000000000000009, 0.0 },
+  { -0.43999999999999989, 2, 0.20000000000000018, 0.0 },
+  { -0.36499999999999999, 2, 0.30000000000000004, 0.0 },
+  { -0.25999999999999984, 2, 0.40000000000000013, 0.0 },
+  { -0.12500000000000000, 2, 0.50000000000000000, 0.0 },
+  { 0.040000000000000147, 2, 0.60000000000000009, 0.0 },
+  { 0.23500000000000032, 2, 0.70000000000000018, 0.0 },
+  { 0.46000000000000019, 2, 0.80000000000000004, 0.0 },
+  { 0.71500000000000030, 2, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 2, 1.0000000000000000, 0.0 },
 };
 const double toler003 = 2.5000000000000020e-13;
 
 // Test data for l=5.
-// max(|f - f_GSL|): 2.0122792321330962e-16
-// max(|f - f_GSL| / |f_GSL|): 4.8911475274404243e-15
+// max(|f - f_GSL|): 2.0122792321330962e-16 at index 19
+// max(|f - f_GSL| / |f_GSL|): 4.8911475274405560e-15
+// mean(f - f_GSL): -2.3129646346357427e-18
+// variance(f - f_GSL): 2.8086478355647191e-37
+// stddev(f - f_GSL): 5.2996677589870847e-19
 const testcase_legendre<double>
 data004[21] =
 {
-  { -1.0000000000000000, 5, -1.0000000000000000 },
-  { 0.041141250000000087, 5, -0.90000000000000002 },
-  { 0.39951999999999993, 5, -0.80000000000000004 },
-  { 0.36519874999999991, 5, -0.69999999999999996 },
-  { 0.15263999999999994, 5, -0.59999999999999998 },
-  { -0.089843750000000000, 5, -0.50000000000000000 },
-  { -0.27063999999999994, 5, -0.40000000000000002 },
-  { -0.34538625000000001, 5, -0.30000000000000004 },
-  { -0.30751999999999996, 5, -0.19999999999999996 },
-  { -0.17882874999999995, 5, -0.099999999999999978 },
-  { 0.0000000000000000, 5, 0.0000000000000000 },
-  { 0.17882875000000015, 5, 0.10000000000000009 },
-  { 0.30751999999999996, 5, 0.19999999999999996 },
-  { 0.34538625000000001, 5, 0.30000000000000004 },
-  { 0.27064000000000010, 5, 0.39999999999999991 },
-  { 0.089843750000000000, 5, 0.50000000000000000 },
-  { -0.15264000000000016, 5, 0.60000000000000009 },
-  { -0.36519874999999991, 5, 0.69999999999999996 },
-  { -0.39951999999999993, 5, 0.80000000000000004 },
-  { -0.041141250000000261, 5, 0.89999999999999991 },
-  { 1.0000000000000000, 5, 1.0000000000000000 },
+  { -1.0000000000000000, 5, -1.0000000000000000, 0.0 },
+  { 0.041141250000000087, 5, -0.90000000000000002, 0.0 },
+  { 0.39951999999999993, 5, -0.80000000000000004, 0.0 },
+  { 0.36519874999999991, 5, -0.69999999999999996, 0.0 },
+  { 0.15263999999999994, 5, -0.59999999999999998, 0.0 },
+  { -0.089843750000000000, 5, -0.50000000000000000, 0.0 },
+  { -0.27064000000000010, 5, -0.39999999999999991, 0.0 },
+  { -0.34538624999999995, 5, -0.29999999999999993, 0.0 },
+  { -0.30751999999999996, 5, -0.19999999999999996, 0.0 },
+  { -0.17882874999999995, 5, -0.099999999999999978, 0.0 },
+  { 0.0000000000000000, 5, 0.0000000000000000, 0.0 },
+  { 0.17882875000000015, 5, 0.10000000000000009, 0.0 },
+  { 0.30752000000000013, 5, 0.20000000000000018, 0.0 },
+  { 0.34538625000000001, 5, 0.30000000000000004, 0.0 },
+  { 0.27063999999999988, 5, 0.40000000000000013, 0.0 },
+  { 0.089843750000000000, 5, 0.50000000000000000, 0.0 },
+  { -0.15264000000000016, 5, 0.60000000000000009, 0.0 },
+  { -0.36519875000000024, 5, 0.70000000000000018, 0.0 },
+  { -0.39951999999999993, 5, 0.80000000000000004, 0.0 },
+  { -0.041141249999999151, 5, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 5, 1.0000000000000000, 0.0 },
 };
 const double toler004 = 2.5000000000000020e-13;
 
 // Test data for l=10.
-// max(|f - f_GSL|): 2.7755575615628914e-16
-// max(|f - f_GSL| / |f_GSL|): 1.0547610802636413e-15
+// max(|f - f_GSL|): 3.8857805861880479e-16 at index 19
+// max(|f - f_GSL| / |f_GSL|): 1.4766655123690915e-15
+// mean(f - f_GSL): -2.5112187461759493e-17
+// variance(f - f_GSL): 3.3107652853513909e-35
+// stddev(f - f_GSL): 5.7539249954716919e-18
 const testcase_legendre<double>
 data005[21] =
 {
-  { 1.0000000000000000, 10, -1.0000000000000000 },
-  { -0.26314561785585960, 10, -0.90000000000000002 },
-  { 0.30052979560000004, 10, -0.80000000000000004 },
-  { 0.085805795531640333, 10, -0.69999999999999996 },
-  { -0.24366274560000001, 10, -0.59999999999999998 },
-  { -0.18822860717773438, 10, -0.50000000000000000 },
-  { 0.096839064399999925, 10, -0.40000000000000002 },
-  { 0.25147634951601561, 10, -0.30000000000000004 },
-  { 0.12907202559999983, 10, -0.19999999999999996 },
-  { -0.12212499738710943, 10, -0.099999999999999978 },
-  { -0.24609375000000000, 10, 0.0000000000000000 },
-  { -0.12212499738710922, 10, 0.10000000000000009 },
-  { 0.12907202559999983, 10, 0.19999999999999996 },
-  { 0.25147634951601561, 10, 0.30000000000000004 },
-  { 0.096839064400000258, 10, 0.39999999999999991 },
-  { -0.18822860717773438, 10, 0.50000000000000000 },
-  { -0.24366274559999984, 10, 0.60000000000000009 },
-  { 0.085805795531640333, 10, 0.69999999999999996 },
-  { 0.30052979560000004, 10, 0.80000000000000004 },
-  { -0.26314561785585899, 10, 0.89999999999999991 },
-  { 1.0000000000000000, 10, 1.0000000000000000 },
+  { 1.0000000000000000, 10, -1.0000000000000000, 0.0 },
+  { -0.26314561785585960, 10, -0.90000000000000002, 0.0 },
+  { 0.30052979560000004, 10, -0.80000000000000004, 0.0 },
+  { 0.085805795531640333, 10, -0.69999999999999996, 0.0 },
+  { -0.24366274560000001, 10, -0.59999999999999998, 0.0 },
+  { -0.18822860717773438, 10, -0.50000000000000000, 0.0 },
+  { 0.096839064400000258, 10, -0.39999999999999991, 0.0 },
+  { 0.25147634951601561, 10, -0.29999999999999993, 0.0 },
+  { 0.12907202559999983, 10, -0.19999999999999996, 0.0 },
+  { -0.12212499738710943, 10, -0.099999999999999978, 0.0 },
+  { -0.24609375000000000, 10, 0.0000000000000000, 0.0 },
+  { -0.12212499738710922, 10, 0.10000000000000009, 0.0 },
+  { 0.12907202560000042, 10, 0.20000000000000018, 0.0 },
+  { 0.25147634951601561, 10, 0.30000000000000004, 0.0 },
+  { 0.096839064399999633, 10, 0.40000000000000013, 0.0 },
+  { -0.18822860717773438, 10, 0.50000000000000000, 0.0 },
+  { -0.24366274559999984, 10, 0.60000000000000009, 0.0 },
+  { 0.085805795531641277, 10, 0.70000000000000018, 0.0 },
+  { 0.30052979560000004, 10, 0.80000000000000004, 0.0 },
+  { -0.26314561785586010, 10, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 10, 1.0000000000000000, 0.0 },
 };
 const double toler005 = 2.5000000000000020e-13;
 
 // Test data for l=20.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2307336678138069e-15
+// max(|f - f_GSL|): 3.6082248300317588e-16 at index 19
+// max(|f - f_GSL| / |f_GSL|): 2.4166281401316513e-15
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 4.9424644697959907e-65
+// stddev(f - f_GSL): 7.0302663319365015e-33
 const testcase_legendre<double>
 data006[21] =
 {
-  { 1.0000000000000000, 20, -1.0000000000000000 },
-  { -0.14930823530984835, 20, -0.90000000000000002 },
-  { 0.22420460541741347, 20, -0.80000000000000004 },
-  { -0.20457394463834172, 20, -0.69999999999999996 },
-  { 0.15916752910098109, 20, -0.59999999999999998 },
-  { -0.048358381067373557, 20, -0.50000000000000000 },
-  { -0.10159261558628156, 20, -0.40000000000000002 },
-  { 0.18028715947998042, 20, -0.30000000000000004 },
-  { -0.098042194344594796, 20, -0.19999999999999996 },
-  { -0.082077130944527663, 20, -0.099999999999999978 },
-  { 0.17619705200195312, 20, 0.0000000000000000 },
-  { -0.082077130944528023, 20, 0.10000000000000009 },
-  { -0.098042194344594796, 20, 0.19999999999999996 },
-  { 0.18028715947998042, 20, 0.30000000000000004 },
-  { -0.10159261558628112, 20, 0.39999999999999991 },
-  { -0.048358381067373557, 20, 0.50000000000000000 },
-  { 0.15916752910098075, 20, 0.60000000000000009 },
-  { -0.20457394463834172, 20, 0.69999999999999996 },
-  { 0.22420460541741347, 20, 0.80000000000000004 },
-  { -0.14930823530984924, 20, 0.89999999999999991 },
-  { 1.0000000000000000, 20, 1.0000000000000000 },
+  { 1.0000000000000000, 20, -1.0000000000000000, 0.0 },
+  { -0.14930823530984835, 20, -0.90000000000000002, 0.0 },
+  { 0.22420460541741347, 20, -0.80000000000000004, 0.0 },
+  { -0.20457394463834172, 20, -0.69999999999999996, 0.0 },
+  { 0.15916752910098109, 20, -0.59999999999999998, 0.0 },
+  { -0.048358381067373557, 20, -0.50000000000000000, 0.0 },
+  { -0.10159261558628112, 20, -0.39999999999999991, 0.0 },
+  { 0.18028715947998047, 20, -0.29999999999999993, 0.0 },
+  { -0.098042194344594796, 20, -0.19999999999999996, 0.0 },
+  { -0.082077130944527663, 20, -0.099999999999999978, 0.0 },
+  { 0.17619705200195312, 20, 0.0000000000000000, 0.0 },
+  { -0.082077130944528023, 20, 0.10000000000000009, 0.0 },
+  { -0.098042194344594089, 20, 0.20000000000000018, 0.0 },
+  { 0.18028715947998042, 20, 0.30000000000000004, 0.0 },
+  { -0.10159261558628192, 20, 0.40000000000000013, 0.0 },
+  { -0.048358381067373557, 20, 0.50000000000000000, 0.0 },
+  { 0.15916752910098075, 20, 0.60000000000000009, 0.0 },
+  { -0.20457394463834136, 20, 0.70000000000000018, 0.0 },
+  { 0.22420460541741347, 20, 0.80000000000000004, 0.0 },
+  { -0.14930823530984758, 20, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 20, 1.0000000000000000, 0.0 },
 };
 const double toler006 = 2.5000000000000020e-13;
 
 // Test data for l=50.
-// max(|f - f_GSL|): 3.6082248300317588e-16
-// max(|f - f_GSL| / |f_GSL|): 2.1700196856209138e-15
+// max(|f - f_GSL|): 1.6653345369377348e-16 at index 2
+// max(|f - f_GSL| / |f_GSL|): 1.6665460706897444e-15
+// mean(f - f_GSL): -8.0953762212251003e-18
+// variance(f - f_GSL): 3.4405935985667807e-36
+// stddev(f - f_GSL): 1.8548837156454796e-18
 const testcase_legendre<double>
 data007[21] =
 {
-  { 1.0000000000000000, 50, -1.0000000000000000 },
-  { -0.17003765994383671, 50, -0.90000000000000002 },
-  { 0.13879737345093113, 50, -0.80000000000000004 },
-  { -0.014572731645892852, 50, -0.69999999999999996 },
-  { -0.058860798844002096, 50, -0.59999999999999998 },
-  { -0.031059099239609811, 50, -0.50000000000000000 },
-  { 0.041569033381825375, 50, -0.40000000000000002 },
-  { 0.10911051574714797, 50, -0.30000000000000004 },
-  { 0.083432272204197494, 50, -0.19999999999999996 },
-  { -0.038205812661313600, 50, -0.099999999999999978 },
-  { -0.11227517265921705, 50, 0.0000000000000000 },
-  { -0.038205812661314155, 50, 0.10000000000000009 },
-  { 0.083432272204197494, 50, 0.19999999999999996 },
-  { 0.10911051574714797, 50, 0.30000000000000004 },
-  { 0.041569033381824674, 50, 0.39999999999999991 },
-  { -0.031059099239609811, 50, 0.50000000000000000 },
-  { -0.058860798844001430, 50, 0.60000000000000009 },
-  { -0.014572731645892852, 50, 0.69999999999999996 },
-  { 0.13879737345093113, 50, 0.80000000000000004 },
-  { -0.17003765994383657, 50, 0.89999999999999991 },
-  { 1.0000000000000000, 50, 1.0000000000000000 },
+  { 1.0000000000000000, 50, -1.0000000000000000, 0.0 },
+  { -0.17003765994383671, 50, -0.90000000000000002, 0.0 },
+  { 0.13879737345093113, 50, -0.80000000000000004, 0.0 },
+  { -0.014572731645892852, 50, -0.69999999999999996, 0.0 },
+  { -0.058860798844002096, 50, -0.59999999999999998, 0.0 },
+  { -0.031059099239609811, 50, -0.50000000000000000, 0.0 },
+  { 0.041569033381824674, 50, -0.39999999999999991, 0.0 },
+  { 0.10911051574714790, 50, -0.29999999999999993, 0.0 },
+  { 0.083432272204197494, 50, -0.19999999999999996, 0.0 },
+  { -0.038205812661313600, 50, -0.099999999999999978, 0.0 },
+  { -0.11227517265921705, 50, 0.0000000000000000, 0.0 },
+  { -0.038205812661314155, 50, 0.10000000000000009, 0.0 },
+  { 0.083432272204196564, 50, 0.20000000000000018, 0.0 },
+  { 0.10911051574714797, 50, 0.30000000000000004, 0.0 },
+  { 0.041569033381826007, 50, 0.40000000000000013, 0.0 },
+  { -0.031059099239609811, 50, 0.50000000000000000, 0.0 },
+  { -0.058860798844001430, 50, 0.60000000000000009, 0.0 },
+  { -0.014572731645890737, 50, 0.70000000000000018, 0.0 },
+  { 0.13879737345093113, 50, 0.80000000000000004, 0.0 },
+  { -0.17003765994383679, 50, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 50, 1.0000000000000000, 0.0 },
 };
 const double toler007 = 2.5000000000000020e-13;
 
 // Test data for l=100.
-// max(|f - f_GSL|): 3.4694469519536142e-16
+// max(|f - f_GSL|): 3.4694469519536142e-16 at index 2
 // max(|f - f_GSL| / |f_GSL|): 6.8214063779431592e-15
+// mean(f - f_GSL): -4.1385545784018113e-17
+// variance(f - f_GSL): 8.9920078491655612e-35
+// stddev(f - f_GSL): 9.4826198116161765e-18
 const testcase_legendre<double>
 data008[21] =
 {
-  { 1.0000000000000000, 100, -1.0000000000000000 },
-  { 0.10226582055871893, 100, -0.90000000000000002 },
-  { 0.050861167913584228, 100, -0.80000000000000004 },
-  { -0.077132507199778641, 100, -0.69999999999999996 },
-  { -0.023747023905133141, 100, -0.59999999999999998 },
-  { -0.060518025961861198, 100, -0.50000000000000000 },
-  { -0.072258202125684470, 100, -0.40000000000000002 },
-  { 0.057127392202801566, 100, -0.30000000000000004 },
-  { 0.014681835355659706, 100, -0.19999999999999996 },
-  { -0.063895098434750205, 100, -0.099999999999999978 },
-  { 0.079589237387178727, 100, 0.0000000000000000 },
-  { -0.063895098434749761, 100, 0.10000000000000009 },
-  { 0.014681835355659706, 100, 0.19999999999999996 },
-  { 0.057127392202801566, 100, 0.30000000000000004 },
-  { -0.072258202125685025, 100, 0.39999999999999991 },
-  { -0.060518025961861198, 100, 0.50000000000000000 },
-  { -0.023747023905134217, 100, 0.60000000000000009 },
-  { -0.077132507199778641, 100, 0.69999999999999996 },
-  { 0.050861167913584228, 100, 0.80000000000000004 },
-  { 0.10226582055871711, 100, 0.89999999999999991 },
-  { 1.0000000000000000, 100, 1.0000000000000000 },
+  { 1.0000000000000000, 100, -1.0000000000000000, 0.0 },
+  { 0.10226582055871893, 100, -0.90000000000000002, 0.0 },
+  { 0.050861167913584228, 100, -0.80000000000000004, 0.0 },
+  { -0.077132507199778641, 100, -0.69999999999999996, 0.0 },
+  { -0.023747023905133141, 100, -0.59999999999999998, 0.0 },
+  { -0.060518025961861198, 100, -0.50000000000000000, 0.0 },
+  { -0.072258202125685025, 100, -0.39999999999999991, 0.0 },
+  { 0.057127392202801046, 100, -0.29999999999999993, 0.0 },
+  { 0.014681835355659706, 100, -0.19999999999999996, 0.0 },
+  { -0.063895098434750205, 100, -0.099999999999999978, 0.0 },
+  { 0.079589237387178727, 100, 0.0000000000000000, 0.0 },
+  { -0.063895098434749761, 100, 0.10000000000000009, 0.0 },
+  { 0.014681835355657875, 100, 0.20000000000000018, 0.0 },
+  { 0.057127392202801566, 100, 0.30000000000000004, 0.0 },
+  { -0.072258202125684082, 100, 0.40000000000000013, 0.0 },
+  { -0.060518025961861198, 100, 0.50000000000000000, 0.0 },
+  { -0.023747023905134217, 100, 0.60000000000000009, 0.0 },
+  { -0.077132507199780501, 100, 0.70000000000000018, 0.0 },
+  { 0.050861167913584228, 100, 0.80000000000000004, 0.0 },
+  { 0.10226582055872063, 100, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 100, 1.0000000000000000, 0.0 },
 };
 const double toler008 = 5.0000000000000039e-13;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_legendre<Tp> (&data)[Num], Tp toler)
+  test(const testcase_legendre<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::legendre(data[i].l, data[i].x);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::legendre(data[i].l, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index 4bfe13c..8733531 100644 (file)
@@ -21,7 +21,7 @@
 //  riemann_zeta
 
 // This can take long on simulators, timing out the test.
-// { dg-additional-options "-DMAX_ITERATIONS=5" { target simulator } }
+// { dg-options "-DMAX_ITERATIONS=5" { target simulator } }
 
 #ifndef MAX_ITERATIONS
 #define MAX_ITERATIONS (sizeof(data001) / sizeof(testcase_riemann_zeta<double>))
 #include <specfun_testcase.h>
 
 // Test data.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 3.7349082148991403e-15
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 52
+// max(|f - f_Boost| / |f_Boost|): 2.1066054193139689e-15
+// mean(f - f_Boost): -2.3962839288606896e-17
+// variance(f - f_Boost): 1.0830580134580974e-35
+// stddev(f - f_Boost): 3.2909846755311660e-18
 const testcase_riemann_zeta<double>
 data001[55] =
 {
-  { 0.0000000000000000, -10.000000000000000 },
-  { -0.0033669820451019579, -9.8000000000000007 },
-  { -0.0058129517767319039, -9.5999999999999996 },
-  { -0.0072908732290557004, -9.4000000000000004 },
-  { -0.0078420910654484442, -9.1999999999999993 },
-  { -0.0075757575757575803, -9.0000000000000000 },
-  { -0.0066476555677551898, -8.8000000000000007 },
-  { -0.0052400095350859429, -8.5999999999999996 },
-  { -0.0035434308017674959, -8.4000000000000004 },
-  { -0.0017417330388368585, -8.1999999999999993 },
-  { 0.0000000000000000, -8.0000000000000000 },
-  { 0.0015440036789213961, -7.7999999999999998 },
-  { 0.0027852131086497423, -7.5999999999999996 },
-  { 0.0036537321227995880, -7.4000000000000004 },
-  { 0.0041147930817053468, -7.2000000000000002 },
-  { 0.0041666666666666683, -7.0000000000000000 },
-  { 0.0038369975032738366, -6.7999999999999998 },
-  { 0.0031780270571782981, -6.5999999999999996 },
-  { 0.0022611282027338573, -6.4000000000000004 },
-  { 0.0011710237049390511, -6.2000000000000002 },
-  { 0.0000000000000000, -6.0000000000000000 },
-  { -0.0011576366649881879, -5.7999999999999998 },
-  { -0.0022106784318564345, -5.5999999999999996 },
-  { -0.0030755853460586891, -5.4000000000000004 },
-  { -0.0036804380477934787, -5.2000000000000002 },
-  { -0.0039682539682539698, -5.0000000000000000 },
-  { -0.0038996891301999797, -4.7999999999999998 },
-  { -0.0034551830834302711, -4.5999999999999996 },
-  { -0.0026366345018725115, -4.4000000000000004 },
-  { -0.0014687209305056974, -4.2000000000000002 },
-  { 0.0000000000000000, -4.0000000000000000 },
-  { 0.0016960463875825202, -3.7999999999999998 },
-  { 0.0035198355903356747, -3.5999999999999996 },
-  { 0.0053441503206513421, -3.4000000000000004 },
-  { 0.0070119720770910540, -3.2000000000000002 },
-  { 0.0083333333333333350, -3.0000000000000000 },
-  { 0.0090807294856852811, -2.7999999999999998 },
-  { 0.0089824623788396681, -2.5999999999999996 },
-  { 0.0077130239874243630, -2.4000000000000004 },
-  { 0.0048792123593036068, -2.2000000000000002 },
-  { 0.0000000000000000, -2.0000000000000000 },
-  { -0.0075229347765968010, -1.8000000000000007 },
-  { -0.018448986678963775, -1.5999999999999996 },
-  { -0.033764987694047593, -1.4000000000000004 },
-  { -0.054788441243880631, -1.1999999999999993 },
-  { -0.083333333333333398, -1.0000000000000000 },
-  { -0.12198707766977103, -0.80000000000000071 },
-  { -0.17459571193801401, -0.59999999999999964 },
-  { -0.24716546083171492, -0.40000000000000036 },
-  { -0.34966628059831484, -0.19999999999999929 },
-  { -0.49999999999999994, 0.0000000000000000 },
-  { -0.73392092489633953, 0.19999999999999929 },
-  { -1.1347977838669825, 0.40000000000000036 },
-  { -1.9526614482239983, 0.59999999999999964 },
-  { -4.4375384158955677, 0.80000000000000071 },
+  { 0.0000000000000000, -10.000000000000000, 0.0 },
+  { -0.0033669820451019570, -9.8000000000000007, 0.0 },
+  { -0.0058129517767319012, -9.5999999999999996, 0.0 },
+  { -0.0072908732290556961, -9.4000000000000004, 0.0 },
+  { -0.0078420910654484390, -9.1999999999999993, 0.0 },
+  { -0.0075757575757575760, -9.0000000000000000, 0.0 },
+  { -0.0066476555677551889, -8.8000000000000007, 0.0 },
+  { -0.0052400095350859403, -8.5999999999999996, 0.0 },
+  { -0.0035434308017674907, -8.4000000000000004, 0.0 },
+  { -0.0017417330388368587, -8.1999999999999993, 0.0 },
+  { 0.0000000000000000, -8.0000000000000000, 0.0 },
+  { 0.0015440036789213937, -7.7999999999999998, 0.0 },
+  { 0.0027852131086497402, -7.5999999999999996, 0.0 },
+  { 0.0036537321227995885, -7.4000000000000004, 0.0 },
+  { 0.0041147930817053528, -7.1999999999999993, 0.0 },
+  { 0.0041666666666666666, -7.0000000000000000, 0.0 },
+  { 0.0038369975032738362, -6.7999999999999998, 0.0 },
+  { 0.0031780270571782998, -6.5999999999999996, 0.0 },
+  { 0.0022611282027338573, -6.4000000000000004, 0.0 },
+  { 0.0011710237049390457, -6.1999999999999993, 0.0 },
+  { 0.0000000000000000, -6.0000000000000000, 0.0 },
+  { -0.0011576366649881868, -5.7999999999999998, 0.0 },
+  { -0.0022106784318564332, -5.5999999999999996, 0.0 },
+  { -0.0030755853460586913, -5.3999999999999995, 0.0 },
+  { -0.0036804380477934761, -5.1999999999999993, 0.0 },
+  { -0.0039682539682539680, -5.0000000000000000, 0.0 },
+  { -0.0038996891301999771, -4.7999999999999998, 0.0 },
+  { -0.0034551830834302698, -4.5999999999999996, 0.0 },
+  { -0.0026366345018725037, -4.3999999999999995, 0.0 },
+  { -0.0014687209305056920, -4.1999999999999993, 0.0 },
+  { 0.0000000000000000, -4.0000000000000000, 0.0 },
+  { 0.0016960463875825209, -3.7999999999999998, 0.0 },
+  { 0.0035198355903356634, -3.5999999999999996, 0.0 },
+  { 0.0053441503206513464, -3.3999999999999995, 0.0 },
+  { 0.0070119720770910566, -3.1999999999999993, 0.0 },
+  { 0.0083333333333333332, -3.0000000000000000, 0.0 },
+  { 0.0090807294856852499, -2.7999999999999998, 0.0 },
+  { 0.0089824623788396559, -2.5999999999999996, 0.0 },
+  { 0.0077130239874243379, -2.3999999999999995, 0.0 },
+  { 0.0048792123593035816, -2.1999999999999993, 0.0 },
+  { 0.0000000000000000, -2.0000000000000000, 0.0 },
+  { -0.0075229347765968738, -1.7999999999999989, 0.0 },
+  { -0.018448986678963719, -1.5999999999999996, 0.0 },
+  { -0.033764987694047545, -1.4000000000000004, 0.0 },
+  { -0.054788441243880513, -1.1999999999999993, 0.0 },
+  { -0.083333333333333329, -1.0000000000000000, 0.0 },
+  { -0.12198707766977138, -0.79999999999999893, 0.0 },
+  { -0.17459571193801349, -0.59999999999999964, 0.0 },
+  { -0.24716546083171545, -0.39999999999999858, 0.0 },
+  { -0.34966628059831456, -0.19999999999999929, 0.0 },
+  { -0.50000000000000000, 0.0000000000000000, 0.0 },
+  { -0.73392092489634220, 0.20000000000000107, 0.0 },
+  { -1.1347977838669825, 0.40000000000000036, 0.0 },
+  { -1.9526614482240094, 0.60000000000000142, 0.0 },
+  { -4.4375384158955686, 0.80000000000000071, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 //  riemann_zeta
 
+// This can take long on simulators, timing out the test.
+// { dg-options "-DMAX_ITERATIONS=5" { target simulator } }
+
 #ifndef MAX_ITERATIONS
 #define MAX_ITERATIONS (sizeof(data001) / sizeof(testcase_riemann_zeta<double>))
 #endif
 
 
 // Test data.
-// max(|f - f_GSL|): 2.6645352591003757e-15
-// max(|f - f_GSL| / |f_GSL|): 1.1657079722157521e-15
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 1
+// max(|f - f_Boost| / |f_Boost|): 2.8599739118398860e-16
+// mean(f - f_Boost): -1.5313421029312504e-18
+// variance(f - f_Boost): 1.6397870961151434e-38
+// stddev(f - f_Boost): 1.2805417197870374e-19
 const testcase_riemann_zeta<double>
 data002[145] =
 {
-  { 5.5915824411777502, 1.2000000000000000 },
-  { 3.1055472779775792, 1.3999999999999999 },
-  { 2.2857656656801324, 1.6000000000000001 },
-  { 1.8822296181028220, 1.8000000000000000 },
-  { 1.6449340668482275, 2.0000000000000000 },
-  { 1.4905432565068937, 2.2000000000000002 },
-  { 1.3833428588407359, 2.3999999999999999 },
-  { 1.3054778090727803, 2.6000000000000001 },
-  { 1.2470314223172541, 2.7999999999999998 },
-  { 1.2020569031595945, 3.0000000000000000 },
-  { 1.1667733709844674, 3.2000000000000002 },
-  { 1.1386637757280420, 3.3999999999999999 },
-  { 1.1159890791233376, 3.6000000000000001 },
-  { 1.0975105764590047, 3.7999999999999998 },
-  { 1.0823232337111381, 4.0000000000000000 },
-  { 1.0697514772338095, 4.2000000000000002 },
-  { 1.0592817259798355, 4.4000000000000004 },
-  { 1.0505173825665735, 4.5999999999999996 },
-  { 1.0431480133351789, 4.7999999999999998 },
-  { 1.0369277551433700, 5.0000000000000000 },
-  { 1.0316598766779168, 5.2000000000000002 },
-  { 1.0271855389203537, 5.4000000000000004 },
-  { 1.0233754792270300, 5.5999999999999996 },
-  { 1.0201237683883446, 5.7999999999999998 },
-  { 1.0173430619844492, 6.0000000000000000 },
-  { 1.0149609451852233, 6.2000000000000002 },
-  { 1.0129170887121841, 6.4000000000000004 },
-  { 1.0111610141542708, 6.5999999999999996 },
-  { 1.0096503223447120, 6.7999999999999998 },
-  { 1.0083492773819229, 7.0000000000000000 },
-  { 1.0072276664807169, 7.2000000000000002 },
-  { 1.0062598756930512, 7.4000000000000004 },
-  { 1.0054241359879634, 7.5999999999999996 },
-  { 1.0047019048164696, 7.7999999999999998 },
-  { 1.0040773561979444, 8.0000000000000000 },
-  { 1.0035369583062013, 8.1999999999999993 },
-  { 1.0030691220374448, 8.4000000000000004 },
-  { 1.0026639074861505, 8.5999999999999996 },
-  { 1.0023127779098220, 8.8000000000000007 },
-  { 1.0020083928260823, 9.0000000000000000 },
-  { 1.0017444334995897, 9.1999999999999993 },
-  { 1.0015154553480514, 9.4000000000000004 },
-  { 1.0013167628052648, 9.5999999999999996 },
-  { 1.0011443029840295, 9.8000000000000007 },
-  { 1.0009945751278182, 10.000000000000000 },
-  { 1.0008645533615086, 10.199999999999999 },
-  { 1.0007516206744649, 10.400000000000000 },
-  { 1.0006535124140847, 10.600000000000000 },
-  { 1.0005682678503411, 10.800000000000001 },
-  { 1.0004941886041194, 11.000000000000000 },
-  { 1.0004298029239944, 11.199999999999999 },
-  { 1.0003738349551168, 11.400000000000000 },
-  { 1.0003251782761946, 11.600000000000000 },
-  { 1.0002828730909989, 11.800000000000001 },
-  { 1.0002460865533080, 12.000000000000000 },
-  { 1.0002140957818750, 12.199999999999999 },
-  { 1.0001862731874056, 12.400000000000000 },
-  { 1.0001620737887460, 12.600000000000000 },
-  { 1.0001410242422089, 12.800000000000001 },
-  { 1.0001227133475783, 13.000000000000000 },
-  { 1.0001067838280169, 13.199999999999999 },
-  { 1.0000929252097515, 13.400000000000000 },
-  { 1.0000808676518718, 13.600000000000000 },
-  { 1.0000703765974504, 13.800000000000001 },
-  { 1.0000612481350588, 14.000000000000000 },
-  { 1.0000533049750668, 14.199999999999999 },
-  { 1.0000463929582293, 14.400000000000000 },
-  { 1.0000403780253397, 14.600000000000000 },
-  { 1.0000351435864272, 14.800000000000001 },
-  { 1.0000305882363070, 15.000000000000000 },
-  { 1.0000266237704787, 15.199999999999999 },
-  { 1.0000231734615617, 15.400000000000000 },
-  { 1.0000201705617975, 15.600000000000000 },
-  { 1.0000175570017611, 15.800000000000001 },
-  { 1.0000152822594086, 16.000000000000000 },
-  { 1.0000133023770337, 16.199999999999999 },
-  { 1.0000115791066830, 16.399999999999999 },
-  { 1.0000100791671644, 16.600000000000001 },
-  { 1.0000087735980010, 16.800000000000001 },
-  { 1.0000076371976379, 17.000000000000000 },
-  { 1.0000066480348633, 17.199999999999999 },
-  { 1.0000057870238734, 17.399999999999999 },
-  { 1.0000050375546607, 17.600000000000001 },
-  { 1.0000043851715013, 17.800000000000001 },
-  { 1.0000038172932648, 18.000000000000000 },
-  { 1.0000033229700953, 18.199999999999999 },
-  { 1.0000028926717153, 18.399999999999999 },
-  { 1.0000025181032419, 18.600000000000001 },
-  { 1.0000021920449287, 18.800000000000001 },
-  { 1.0000019082127167, 19.000000000000000 },
-  { 1.0000016611368951, 19.199999999999999 },
-  { 1.0000014460565094, 19.399999999999999 },
-  { 1.0000012588274738, 19.600000000000001 },
-  { 1.0000010958426055, 19.800000000000001 },
-  { 1.0000009539620338, 20.000000000000000 },
-  { 1.0000008304526344, 20.199999999999999 },
-  { 1.0000007229353187, 20.399999999999999 },
-  { 1.0000006293391575, 20.600000000000001 },
-  { 1.0000005478614529, 20.800000000000001 },
-  { 1.0000004769329869, 21.000000000000000 },
-  { 1.0000004151877719, 21.199999999999999 },
-  { 1.0000003614367254, 21.399999999999999 },
-  { 1.0000003146447527, 21.600000000000001 },
-  { 1.0000002739108020, 21.800000000000001 },
-  { 1.0000002384505029, 22.000000000000000 },
-  { 1.0000002075810521, 22.199999999999999 },
-  { 1.0000001807080625, 22.399999999999999 },
-  { 1.0000001573141093, 22.600000000000001 },
-  { 1.0000001369487659, 22.800000000000001 },
-  { 1.0000001192199262, 23.000000000000000 },
-  { 1.0000001037862520, 23.199999999999999 },
-  { 1.0000000903506006, 23.399999999999999 },
-  { 1.0000000786543011, 23.600000000000001 },
-  { 1.0000000684721728, 23.800000000000001 },
-  { 1.0000000596081891, 24.000000000000000 },
-  { 1.0000000518917020, 24.199999999999999 },
-  { 1.0000000451741575, 24.399999999999999 },
-  { 1.0000000393262332, 24.600000000000001 },
-  { 1.0000000342353501, 24.800000000000001 },
-  { 1.0000000298035037, 25.000000000000000 },
-  { 1.0000000259453767, 25.199999999999999 },
-  { 1.0000000225866978, 25.399999999999999 },
-  { 1.0000000196628109, 25.600000000000001 },
-  { 1.0000000171174297, 25.800000000000001 },
-  { 1.0000000149015549, 26.000000000000000 },
-  { 1.0000000129725304, 26.199999999999999 },
-  { 1.0000000112932221, 26.399999999999999 },
-  { 1.0000000098313035, 26.600000000000001 },
-  { 1.0000000085586331, 26.800000000000001 },
-  { 1.0000000074507118, 27.000000000000000 },
-  { 1.0000000064862125, 27.199999999999999 },
-  { 1.0000000056465688, 27.399999999999999 },
-  { 1.0000000049156179, 27.600000000000001 },
-  { 1.0000000042792894, 27.800000000000001 },
-  { 1.0000000037253340, 28.000000000000000 },
-  { 1.0000000032430887, 28.199999999999999 },
-  { 1.0000000028232703, 28.399999999999999 },
-  { 1.0000000024577977, 28.600000000000001 },
-  { 1.0000000021396356, 28.800000000000001 },
-  { 1.0000000018626598, 29.000000000000000 },
-  { 1.0000000016215385, 29.199999999999999 },
-  { 1.0000000014116306, 29.399999999999999 },
-  { 1.0000000012288952, 29.600000000000001 },
-  { 1.0000000010698147, 29.800000000000001 },
-  { 1.0000000009313275, 30.000000000000000 },
+  { 5.5915824411777519, 1.2000000000000000, 0.0 },
+  { 3.1055472779775810, 1.3999999999999999, 0.0 },
+  { 2.2857656656801297, 1.6000000000000001, 0.0 },
+  { 1.8822296181028220, 1.8000000000000000, 0.0 },
+  { 1.6449340668482264, 2.0000000000000000, 0.0 },
+  { 1.4905432565068935, 2.2000000000000002, 0.0 },
+  { 1.3833428588407355, 2.4000000000000004, 0.0 },
+  { 1.3054778090727805, 2.6000000000000001, 0.0 },
+  { 1.2470314223172534, 2.7999999999999998, 0.0 },
+  { 1.2020569031595942, 3.0000000000000000, 0.0 },
+  { 1.1667733709844670, 3.2000000000000002, 0.0 },
+  { 1.1386637757280416, 3.4000000000000004, 0.0 },
+  { 1.1159890791233376, 3.6000000000000001, 0.0 },
+  { 1.0975105764590043, 3.8000000000000003, 0.0 },
+  { 1.0823232337111381, 4.0000000000000000, 0.0 },
+  { 1.0697514772338095, 4.2000000000000002, 0.0 },
+  { 1.0592817259798355, 4.4000000000000004, 0.0 },
+  { 1.0505173825665735, 4.5999999999999996, 0.0 },
+  { 1.0431480133351789, 4.8000000000000007, 0.0 },
+  { 1.0369277551433700, 5.0000000000000000, 0.0 },
+  { 1.0316598766779166, 5.2000000000000002, 0.0 },
+  { 1.0271855389203539, 5.4000000000000004, 0.0 },
+  { 1.0233754792270300, 5.6000000000000005, 0.0 },
+  { 1.0201237683883446, 5.8000000000000007, 0.0 },
+  { 1.0173430619844492, 6.0000000000000000, 0.0 },
+  { 1.0149609451852231, 6.2000000000000002, 0.0 },
+  { 1.0129170887121841, 6.4000000000000004, 0.0 },
+  { 1.0111610141542711, 6.6000000000000005, 0.0 },
+  { 1.0096503223447120, 6.8000000000000007, 0.0 },
+  { 1.0083492773819229, 7.0000000000000000, 0.0 },
+  { 1.0072276664807172, 7.2000000000000002, 0.0 },
+  { 1.0062598756930512, 7.4000000000000004, 0.0 },
+  { 1.0054241359879634, 7.6000000000000005, 0.0 },
+  { 1.0047019048164696, 7.8000000000000007, 0.0 },
+  { 1.0040773561979444, 8.0000000000000000, 0.0 },
+  { 1.0035369583062013, 8.1999999999999993, 0.0 },
+  { 1.0030691220374448, 8.4000000000000004, 0.0 },
+  { 1.0026639074861505, 8.6000000000000014, 0.0 },
+  { 1.0023127779098220, 8.8000000000000007, 0.0 },
+  { 1.0020083928260821, 9.0000000000000000, 0.0 },
+  { 1.0017444334995897, 9.2000000000000011, 0.0 },
+  { 1.0015154553480514, 9.4000000000000004, 0.0 },
+  { 1.0013167628052648, 9.5999999999999996, 0.0 },
+  { 1.0011443029840295, 9.8000000000000007, 0.0 },
+  { 1.0009945751278180, 10.000000000000000, 0.0 },
+  { 1.0008645533615088, 10.200000000000001, 0.0 },
+  { 1.0007516206744651, 10.400000000000000, 0.0 },
+  { 1.0006535124140850, 10.600000000000001, 0.0 },
+  { 1.0005682678503411, 10.800000000000001, 0.0 },
+  { 1.0004941886041194, 11.000000000000000, 0.0 },
+  { 1.0004298029239942, 11.200000000000001, 0.0 },
+  { 1.0003738349551166, 11.400000000000000, 0.0 },
+  { 1.0003251782761946, 11.600000000000001, 0.0 },
+  { 1.0002828730909989, 11.800000000000001, 0.0 },
+  { 1.0002460865533080, 12.000000000000000, 0.0 },
+  { 1.0002140957818750, 12.200000000000001, 0.0 },
+  { 1.0001862731874054, 12.400000000000000, 0.0 },
+  { 1.0001620737887460, 12.600000000000001, 0.0 },
+  { 1.0001410242422091, 12.800000000000001, 0.0 },
+  { 1.0001227133475785, 13.000000000000000, 0.0 },
+  { 1.0001067838280169, 13.200000000000001, 0.0 },
+  { 1.0000929252097515, 13.400000000000000, 0.0 },
+  { 1.0000808676518720, 13.600000000000001, 0.0 },
+  { 1.0000703765974504, 13.800000000000001, 0.0 },
+  { 1.0000612481350588, 14.000000000000000, 0.0 },
+  { 1.0000533049750668, 14.200000000000001, 0.0 },
+  { 1.0000463929582293, 14.400000000000000, 0.0 },
+  { 1.0000403780253397, 14.600000000000001, 0.0 },
+  { 1.0000351435864272, 14.800000000000001, 0.0 },
+  { 1.0000305882363070, 15.000000000000000, 0.0 },
+  { 1.0000266237704787, 15.200000000000001, 0.0 },
+  { 1.0000231734615617, 15.400000000000000, 0.0 },
+  { 1.0000201705617975, 15.600000000000001, 0.0 },
+  { 1.0000175570017611, 15.800000000000001, 0.0 },
+  { 1.0000152822594086, 16.000000000000000, 0.0 },
+  { 1.0000133023770335, 16.200000000000003, 0.0 },
+  { 1.0000115791066833, 16.399999999999999, 0.0 },
+  { 1.0000100791671644, 16.600000000000001, 0.0 },
+  { 1.0000087735980012, 16.800000000000001, 0.0 },
+  { 1.0000076371976379, 17.000000000000000, 0.0 },
+  { 1.0000066480348633, 17.199999999999999, 0.0 },
+  { 1.0000057870238737, 17.400000000000002, 0.0 },
+  { 1.0000050375546610, 17.600000000000001, 0.0 },
+  { 1.0000043851715013, 17.800000000000001, 0.0 },
+  { 1.0000038172932650, 18.000000000000000, 0.0 },
+  { 1.0000033229700953, 18.199999999999999, 0.0 },
+  { 1.0000028926717150, 18.400000000000002, 0.0 },
+  { 1.0000025181032419, 18.600000000000001, 0.0 },
+  { 1.0000021920449285, 18.800000000000001, 0.0 },
+  { 1.0000019082127165, 19.000000000000000, 0.0 },
+  { 1.0000016611368951, 19.199999999999999, 0.0 },
+  { 1.0000014460565094, 19.400000000000002, 0.0 },
+  { 1.0000012588274738, 19.600000000000001, 0.0 },
+  { 1.0000010958426055, 19.800000000000001, 0.0 },
+  { 1.0000009539620338, 20.000000000000000, 0.0 },
+  { 1.0000008304526344, 20.200000000000003, 0.0 },
+  { 1.0000007229353187, 20.400000000000002, 0.0 },
+  { 1.0000006293391575, 20.600000000000001, 0.0 },
+  { 1.0000005478614529, 20.800000000000001, 0.0 },
+  { 1.0000004769329869, 21.000000000000000, 0.0 },
+  { 1.0000004151877719, 21.200000000000003, 0.0 },
+  { 1.0000003614367252, 21.400000000000002, 0.0 },
+  { 1.0000003146447527, 21.600000000000001, 0.0 },
+  { 1.0000002739108020, 21.800000000000001, 0.0 },
+  { 1.0000002384505027, 22.000000000000000, 0.0 },
+  { 1.0000002075810521, 22.200000000000003, 0.0 },
+  { 1.0000001807080625, 22.400000000000002, 0.0 },
+  { 1.0000001573141093, 22.600000000000001, 0.0 },
+  { 1.0000001369487659, 22.800000000000001, 0.0 },
+  { 1.0000001192199259, 23.000000000000000, 0.0 },
+  { 1.0000001037862518, 23.200000000000003, 0.0 },
+  { 1.0000000903506006, 23.400000000000002, 0.0 },
+  { 1.0000000786543011, 23.600000000000001, 0.0 },
+  { 1.0000000684721728, 23.800000000000001, 0.0 },
+  { 1.0000000596081891, 24.000000000000000, 0.0 },
+  { 1.0000000518917020, 24.200000000000003, 0.0 },
+  { 1.0000000451741575, 24.400000000000002, 0.0 },
+  { 1.0000000393262332, 24.600000000000001, 0.0 },
+  { 1.0000000342353501, 24.800000000000001, 0.0 },
+  { 1.0000000298035034, 25.000000000000000, 0.0 },
+  { 1.0000000259453767, 25.200000000000003, 0.0 },
+  { 1.0000000225866978, 25.400000000000002, 0.0 },
+  { 1.0000000196628109, 25.600000000000001, 0.0 },
+  { 1.0000000171174297, 25.800000000000001, 0.0 },
+  { 1.0000000149015549, 26.000000000000000, 0.0 },
+  { 1.0000000129725302, 26.200000000000003, 0.0 },
+  { 1.0000000112932221, 26.400000000000002, 0.0 },
+  { 1.0000000098313035, 26.600000000000001, 0.0 },
+  { 1.0000000085586331, 26.800000000000001, 0.0 },
+  { 1.0000000074507118, 27.000000000000000, 0.0 },
+  { 1.0000000064862125, 27.200000000000003, 0.0 },
+  { 1.0000000056465688, 27.400000000000002, 0.0 },
+  { 1.0000000049156179, 27.600000000000001, 0.0 },
+  { 1.0000000042792894, 27.800000000000001, 0.0 },
+  { 1.0000000037253340, 28.000000000000000, 0.0 },
+  { 1.0000000032430887, 28.200000000000003, 0.0 },
+  { 1.0000000028232703, 28.400000000000002, 0.0 },
+  { 1.0000000024577975, 28.600000000000001, 0.0 },
+  { 1.0000000021396356, 28.800000000000001, 0.0 },
+  { 1.0000000018626598, 29.000000000000000, 0.0 },
+  { 1.0000000016215385, 29.200000000000003, 0.0 },
+  { 1.0000000014116304, 29.400000000000002, 0.0 },
+  { 1.0000000012288950, 29.600000000000001, 0.0 },
+  { 1.0000000010698147, 29.800000000000001, 0.0 },
+  { 1.0000000009313275, 30.000000000000000, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_riemann_zeta<Tp> (&data)[Num], Tp toler)
+  test(const testcase_riemann_zeta<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = MAX_ITERATIONS;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::riemann_zeta(data[i].s);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::riemann_zeta(data[i].s);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index 324c214..74091eb 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for n=0.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 2.0843271082049370e-15
+// max(|f - f_GSL|): 3.3306690738754696e-16 at index 1
+// max(|f - f_GSL| / |f_GSL|): 2.2927598190254308e-15
+// mean(f - f_GSL): -6.2780468654398733e-18
+// variance(f - f_GSL): 6.0810091607155313e-35
+// stddev(f - f_GSL): 7.7980825596524246e-18
 const testcase_sph_bessel<double>
 data001[21] =
 {
-  { 1.0000000000000000, 0, 0.0000000000000000 },
-  { 0.98961583701809175, 0, 0.25000000000000000 },
-  { 0.95885107720840601, 0, 0.50000000000000000 },
-  { 0.90885168003111216, 0, 0.75000000000000000 },
-  { 0.84147098480789650, 0, 1.0000000000000000 },
-  { 0.75918769548446896, 0, 1.2500000000000000 },
-  { 0.66499665773603633, 0, 1.5000000000000000 },
-  { 0.56227768392796396, 0, 1.7500000000000000 },
-  { 0.45464871341284085, 0, 2.0000000000000000 },
-  { 0.34581030972796500, 0, 2.2500000000000000 },
-  { 0.23938885764158263, 0, 2.5000000000000000 },
-  { 0.13878581529175696, 0, 2.7500000000000000 },
-  { 0.047040002686622402, 0, 3.0000000000000000 },
-  { -0.033290810624648733, 0, 3.2500000000000000 },
-  { -0.10022377933989138, 0, 3.5000000000000000 },
-  { -0.15241635166462500, 0, 3.7500000000000000 },
-  { -0.18920062382698205, 0, 4.0000000000000000 },
-  { -0.21058573134790201, 0, 4.2500000000000000 },
-  { -0.21722891503668823, 0, 4.5000000000000000 },
-  { -0.21037742925797431, 0, 4.7500000000000000 },
-  { -0.19178485493262770, 0, 5.0000000000000000 },
+  { 1.0000000000000000, 0, 0.0000000000000000, 0.0 },
+  { 0.98961583701809175, 0, 0.25000000000000000, 0.0 },
+  { 0.95885107720840601, 0, 0.50000000000000000, 0.0 },
+  { 0.90885168003111227, 0, 0.75000000000000000, 0.0 },
+  { 0.84147098480789650, 0, 1.0000000000000000, 0.0 },
+  { 0.75918769548446896, 0, 1.2500000000000000, 0.0 },
+  { 0.66499665773603633, 0, 1.5000000000000000, 0.0 },
+  { 0.56227768392796396, 0, 1.7500000000000000, 0.0 },
+  { 0.45464871341284080, 0, 2.0000000000000000, 0.0 },
+  { 0.34581030972796500, 0, 2.2500000000000000, 0.0 },
+  { 0.23938885764158258, 0, 2.5000000000000000, 0.0 },
+  { 0.13878581529175696, 0, 2.7500000000000000, 0.0 },
+  { 0.047040002686622402, 0, 3.0000000000000000, 0.0 },
+  { -0.033290810624648733, 0, 3.2500000000000000, 0.0 },
+  { -0.10022377933989138, 0, 3.5000000000000000, 0.0 },
+  { -0.15241635166462503, 0, 3.7500000000000000, 0.0 },
+  { -0.18920062382698205, 0, 4.0000000000000000, 0.0 },
+  { -0.21058573134790204, 0, 4.2500000000000000, 0.0 },
+  { -0.21722891503668823, 0, 4.5000000000000000, 0.0 },
+  { -0.21037742925797431, 0, 4.7500000000000000, 0.0 },
+  { -0.19178485493262770, 0, 5.0000000000000000, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
 // Test data for n=1.
-// max(|f - f_GSL|): 3.1918911957973251e-16
-// max(|f - f_GSL| / |f_GSL|): 2.8516043985912409e-14
+// max(|f - f_GSL|): 3.1918911957973251e-16 at index 1
+// max(|f - f_GSL| / |f_GSL|): 2.8667725070943857e-14
+// mean(f - f_GSL): -1.3578341493508937e-17
+// variance(f - f_GSL): 1.0552183286053657e-35
+// stddev(f - f_GSL): 3.2484124254862801e-18
 const testcase_sph_bessel<double>
 data002[21] =
 {
-  { 0.0000000000000000, 1, 0.0000000000000000 },
-  { 0.082813661229788060, 1, 0.25000000000000000 },
-  { 0.16253703063606650, 1, 0.50000000000000000 },
-  { 0.23621708154305501, 1, 0.75000000000000000 },
-  { 0.30116867893975674, 1, 1.0000000000000000 },
-  { 0.35509226647136022, 1, 1.2500000000000000 },
-  { 0.39617297071222229, 1, 1.5000000000000000 },
-  { 0.42315642261568914, 1, 1.7500000000000000 },
-  { 0.43539777497999166, 1, 2.0000000000000000 },
-  { 0.43288174775586852, 1, 2.2500000000000000 },
-  { 0.41621298927540656, 1, 2.5000000000000000 },
-  { 0.38657752506335291, 1, 2.7500000000000000 },
-  { 0.34567749976235596, 1, 3.0000000000000000 },
-  { 0.29564272783258383, 1, 3.2500000000000000 },
-  { 0.23892368798597285, 1, 3.5000000000000000 },
-  { 0.17817146817998289, 1, 3.7500000000000000 },
-  { 0.11611074925915747, 1, 4.0000000000000000 },
-  { 0.055412178486091958, 1, 4.2500000000000000 },
-  { -0.0014295812457574522, 1, 4.5000000000000000 },
-  { -0.052206227820200179, 1, 4.7500000000000000 },
-  { -0.095089408079170795, 1, 5.0000000000000000 },
+  { 0.0000000000000000, 1, 0.0000000000000000, 0.0 },
+  { 0.082813661229788060, 1, 0.25000000000000000, 0.0 },
+  { 0.16253703063606650, 1, 0.50000000000000000, 0.0 },
+  { 0.23621708154305501, 1, 0.75000000000000000, 0.0 },
+  { 0.30116867893975674, 1, 1.0000000000000000, 0.0 },
+  { 0.35509226647136022, 1, 1.2500000000000000, 0.0 },
+  { 0.39617297071222229, 1, 1.5000000000000000, 0.0 },
+  { 0.42315642261568914, 1, 1.7500000000000000, 0.0 },
+  { 0.43539777497999166, 1, 2.0000000000000000, 0.0 },
+  { 0.43288174775586852, 1, 2.2500000000000000, 0.0 },
+  { 0.41621298927540656, 1, 2.5000000000000000, 0.0 },
+  { 0.38657752506335291, 1, 2.7500000000000000, 0.0 },
+  { 0.34567749976235596, 1, 3.0000000000000000, 0.0 },
+  { 0.29564272783258383, 1, 3.2500000000000000, 0.0 },
+  { 0.23892368798597285, 1, 3.5000000000000000, 0.0 },
+  { 0.17817146817998289, 1, 3.7500000000000000, 0.0 },
+  { 0.11611074925915747, 1, 4.0000000000000000, 0.0 },
+  { 0.055412178486091958, 1, 4.2500000000000000, 0.0 },
+  { -0.0014295812457574522, 1, 4.5000000000000000, 0.0 },
+  { -0.052206227820200179, 1, 4.7500000000000000, 0.0 },
+  { -0.095089408079170795, 1, 5.0000000000000000, 0.0 },
 };
 const double toler002 = 2.5000000000000015e-12;
 
 // Test data for n=2.
-// max(|f - f_GSL|): 8.3266726846886741e-17
+// max(|f - f_GSL|): 1.6653345369377348e-16 at index 11
 // max(|f - f_GSL| / |f_GSL|): 6.5384527054443100e-16
+// mean(f - f_GSL): -5.3693821875472602e-18
+// variance(f - f_GSL): 1.3199534264872259e-34
+// stddev(f - f_GSL): 1.1488922606089858e-17
 const testcase_sph_bessel<double>
 data003[21] =
 {
-  { 0.0000000000000000, 2, 0.0000000000000000 },
-  { 0.0041480977393611252, 2, 0.25000000000000000 },
-  { 0.016371106607993412, 2, 0.50000000000000000 },
-  { 0.036016646141108236, 2, 0.75000000000000000 },
-  { 0.062035052011373860, 2, 1.0000000000000000 },
-  { 0.093033744046795624, 2, 1.2500000000000000 },
-  { 0.12734928368840817, 2, 1.5000000000000000 },
-  { 0.16313332627036031, 2, 1.7500000000000000 },
-  { 0.19844794905714661, 2, 2.0000000000000000 },
-  { 0.23136535394652627, 2, 2.2500000000000000 },
-  { 0.26006672948890525, 2, 2.5000000000000000 },
-  { 0.28293512114099162, 2, 2.7500000000000000 },
-  { 0.29863749707573356, 2, 3.0000000000000000 },
-  { 0.30619179016241843, 2, 3.2500000000000000 },
-  { 0.30501551189929671, 2, 3.5000000000000000 },
-  { 0.29495352620861132, 2, 3.7500000000000000 },
-  { 0.27628368577135015, 2, 4.0000000000000000 },
-  { 0.24970021027926106, 2, 4.2500000000000000 },
-  { 0.21627586087284995, 2, 4.5000000000000000 },
-  { 0.17740507484521628, 2, 4.7500000000000000 },
-  { 0.13473121008512520, 2, 5.0000000000000000 },
+  { 0.0000000000000000, 2, 0.0000000000000000, 0.0 },
+  { 0.0041480977393611252, 2, 0.25000000000000000, 0.0 },
+  { 0.016371106607993412, 2, 0.50000000000000000, 0.0 },
+  { 0.036016646141108236, 2, 0.75000000000000000, 0.0 },
+  { 0.062035052011373860, 2, 1.0000000000000000, 0.0 },
+  { 0.093033744046795624, 2, 1.2500000000000000, 0.0 },
+  { 0.12734928368840817, 2, 1.5000000000000000, 0.0 },
+  { 0.16313332627036031, 2, 1.7500000000000000, 0.0 },
+  { 0.19844794905714661, 2, 2.0000000000000000, 0.0 },
+  { 0.23136535394652627, 2, 2.2500000000000000, 0.0 },
+  { 0.26006672948890525, 2, 2.5000000000000000, 0.0 },
+  { 0.28293512114099162, 2, 2.7500000000000000, 0.0 },
+  { 0.29863749707573356, 2, 3.0000000000000000, 0.0 },
+  { 0.30619179016241843, 2, 3.2500000000000000, 0.0 },
+  { 0.30501551189929671, 2, 3.5000000000000000, 0.0 },
+  { 0.29495352620861132, 2, 3.7500000000000000, 0.0 },
+  { 0.27628368577135015, 2, 4.0000000000000000, 0.0 },
+  { 0.24970021027926106, 2, 4.2500000000000000, 0.0 },
+  { 0.21627586087284995, 2, 4.5000000000000000, 0.0 },
+  { 0.17740507484521628, 2, 4.7500000000000000, 0.0 },
+  { 0.13473121008512520, 2, 5.0000000000000000, 0.0 },
 };
 const double toler003 = 2.5000000000000020e-13;
 
 // Test data for n=5.
-// max(|f - f_GSL|): 9.7144514654701197e-17
+// max(|f - f_GSL|): 8.3266726846886741e-17 at index 18
 // max(|f - f_GSL| / |f_GSL|): 2.7459190669103549e-15
+// mean(f - f_GSL): 2.3688486417034017e-18
+// variance(f - f_GSL): 2.9460080408325262e-37
+// stddev(f - f_GSL): 5.4277141052495815e-19
 const testcase_sph_bessel<double>
 data004[21] =
 {
-  { 0.0000000000000000, 5, 0.0000000000000000 },
-  { 9.3719811237268220e-08, 5, 0.25000000000000000 },
-  { 2.9774668754574453e-06, 5, 0.50000000000000000 },
-  { 2.2339447678335762e-05, 5, 0.75000000000000000 },
-  { 9.2561158611258144e-05, 5, 1.0000000000000000 },
-  { 0.00027638888920123806, 5, 1.2500000000000000 },
-  { 0.00066962059628932456, 5, 1.5000000000000000 },
-  { 0.0014021729022572799, 5, 1.7500000000000000 },
-  { 0.0026351697702441169, 5, 2.0000000000000000 },
-  { 0.0045540034750567553, 5, 2.2500000000000000 },
-  { 0.0073576387377689359, 5, 2.5000000000000000 },
-  { 0.011244740276407145, 5, 2.7500000000000000 },
-  { 0.016397480955999105, 5, 3.0000000000000000 },
-  { 0.022964112474845508, 5, 3.2500000000000000 },
-  { 0.031041536537391189, 5, 3.5000000000000000 },
-  { 0.040659189440948935, 5, 3.7500000000000000 },
-  { 0.051765539757363456, 5, 4.0000000000000000 },
-  { 0.064218395773425613, 5, 4.2500000000000000 },
-  { 0.077780030832892866, 5, 4.5000000000000000 },
-  { 0.092117870593729223, 5, 4.7500000000000000 },
-  { 0.10681116145650453, 5, 5.0000000000000000 },
+  { 0.0000000000000000, 5, 0.0000000000000000, 0.0 },
+  { 9.3719811237268233e-08, 5, 0.25000000000000000, 0.0 },
+  { 2.9774668754574457e-06, 5, 0.50000000000000000, 0.0 },
+  { 2.2339447678335765e-05, 5, 0.75000000000000000, 0.0 },
+  { 9.2561158611258158e-05, 5, 1.0000000000000000, 0.0 },
+  { 0.00027638888920123806, 5, 1.2500000000000000, 0.0 },
+  { 0.00066962059628932467, 5, 1.5000000000000000, 0.0 },
+  { 0.0014021729022572801, 5, 1.7500000000000000, 0.0 },
+  { 0.0026351697702441173, 5, 2.0000000000000000, 0.0 },
+  { 0.0045540034750567553, 5, 2.2500000000000000, 0.0 },
+  { 0.0073576387377689376, 5, 2.5000000000000000, 0.0 },
+  { 0.011244740276407147, 5, 2.7500000000000000, 0.0 },
+  { 0.016397480955999109, 5, 3.0000000000000000, 0.0 },
+  { 0.022964112474845508, 5, 3.2500000000000000, 0.0 },
+  { 0.031041536537391189, 5, 3.5000000000000000, 0.0 },
+  { 0.040659189440948949, 5, 3.7500000000000000, 0.0 },
+  { 0.051765539757363470, 5, 4.0000000000000000, 0.0 },
+  { 0.064218395773425627, 5, 4.2500000000000000, 0.0 },
+  { 0.077780030832892866, 5, 4.5000000000000000, 0.0 },
+  { 0.092117870593729223, 5, 4.7500000000000000, 0.0 },
+  { 0.10681116145650453, 5, 5.0000000000000000, 0.0 },
 };
 const double toler004 = 2.5000000000000020e-13;
 
 // Test data for n=10.
-// max(|f - f_GSL|): 8.6736173798840355e-19
+// max(|f - f_GSL|): 8.4025668367626594e-19 at index 18
 // max(|f - f_GSL| / |f_GSL|): 6.7232224139500876e-15
+// mean(f - f_GSL): 3.5485202136403188e-20
+// variance(f - f_GSL): 3.7809684768411230e-38
+// stddev(f - f_GSL): 1.9444712589393351e-19
 const testcase_sph_bessel<double>
 data005[21] =
 {
-  { 0.0000000000000000, 10, 0.0000000000000000 },
-  { 6.9267427453708468e-17, 10, 0.25000000000000000 },
-  { 7.0641239636618740e-14, 10, 0.50000000000000000 },
-  { 4.0459307474109287e-12, 10, 0.75000000000000000 },
-  { 7.1165526400473096e-11, 10, 1.0000000000000000 },
-  { 6.5470739530199939e-10, 10, 1.2500000000000000 },
-  { 3.9934406994836296e-09, 10, 1.5000000000000000 },
-  { 1.8327719460735247e-08, 10, 1.7500000000000000 },
-  { 6.8253008649747220e-08, 10, 2.0000000000000000 },
-  { 2.1653870546846626e-07, 10, 2.2500000000000000 },
-  { 6.0504362296385381e-07, 10, 2.5000000000000000 },
-  { 1.5246485352158441e-06, 10, 2.7500000000000000 },
-  { 3.5260038931752543e-06, 10, 3.0000000000000000 },
-  { 7.5839040020531456e-06, 10, 3.2500000000000000 },
-  { 1.5327786999397106e-05, 10, 3.5000000000000000 },
-  { 2.9348811002317661e-05, 10, 3.7500000000000000 },
-  { 5.3589865768632612e-05, 10, 4.0000000000000000 },
-  { 9.3818602410477989e-05, 10, 4.2500000000000000 },
-  { 0.00015817516371455801, 10, 4.5000000000000000 },
-  { 0.00025777607369970674, 10, 4.7500000000000000 },
-  { 0.00040734424424946052, 10, 5.0000000000000000 },
+  { 0.0000000000000000, 10, 0.0000000000000000, 0.0 },
+  { 6.9267427453708468e-17, 10, 0.25000000000000000, 0.0 },
+  { 7.0641239636618740e-14, 10, 0.50000000000000000, 0.0 },
+  { 4.0459307474109287e-12, 10, 0.75000000000000000, 0.0 },
+  { 7.1165526400473096e-11, 10, 1.0000000000000000, 0.0 },
+  { 6.5470739530199939e-10, 10, 1.2500000000000000, 0.0 },
+  { 3.9934406994836296e-09, 10, 1.5000000000000000, 0.0 },
+  { 1.8327719460735247e-08, 10, 1.7500000000000000, 0.0 },
+  { 6.8253008649747220e-08, 10, 2.0000000000000000, 0.0 },
+  { 2.1653870546846626e-07, 10, 2.2500000000000000, 0.0 },
+  { 6.0504362296385381e-07, 10, 2.5000000000000000, 0.0 },
+  { 1.5246485352158441e-06, 10, 2.7500000000000000, 0.0 },
+  { 3.5260038931752543e-06, 10, 3.0000000000000000, 0.0 },
+  { 7.5839040020531456e-06, 10, 3.2500000000000000, 0.0 },
+  { 1.5327786999397103e-05, 10, 3.5000000000000000, 0.0 },
+  { 2.9348811002317664e-05, 10, 3.7500000000000000, 0.0 },
+  { 5.3589865768632612e-05, 10, 4.0000000000000000, 0.0 },
+  { 9.3818602410477989e-05, 10, 4.2500000000000000, 0.0 },
+  { 0.00015817516371455801, 10, 4.5000000000000000, 0.0 },
+  { 0.00025777607369970674, 10, 4.7500000000000000, 0.0 },
+  { 0.00040734424424946052, 10, 5.0000000000000000, 0.0 },
 };
 const double toler005 = 5.0000000000000039e-13;
 
 // Test data for n=20.
-// max(|f - f_GSL|): 4.9275407583725281e-26
-// max(|f - f_GSL| / |f_GSL|): 2.4002866288153026e-14
+// max(|f - f_GSL|): 4.9275407583725281e-26 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.3196047253257129e-14
+// mean(f - f_GSL): 6.3234533203992742e-28
+// variance(f - f_GSL): 1.2422274402412017e-52
+// stddev(f - f_GSL): 1.1145525740139860e-26
 const testcase_sph_bessel<double>
 data006[21] =
 {
-  { 0.0000000000000000, 20, 0.0000000000000000 },
-  { 6.9307487073399339e-38, 20, 0.25000000000000000 },
-  { 7.2515880810153944e-32, 20, 0.50000000000000000 },
-  { 2.4025911398834722e-28, 20, 0.75000000000000000 },
-  { 7.5377957222368705e-26, 20, 1.0000000000000000 },
-  { 6.4953439243593413e-24, 20, 1.2500000000000000 },
-  { 2.4703120390884050e-22, 20, 1.5000000000000000 },
-  { 5.3404627138297197e-21, 20, 1.7500000000000000 },
-  { 7.6326411008876072e-20, 20, 2.0000000000000000 },
-  { 7.9496335952781075e-19, 20, 2.2500000000000000 },
-  { 6.4488532759578977e-18, 20, 2.5000000000000000 },
-  { 4.2725223040880135e-17, 20, 2.7500000000000000 },
-  { 2.3942249272752627e-16, 20, 3.0000000000000000 },
-  { 1.1654033741499860e-15, 20, 3.2500000000000000 },
-  { 5.0303402625237510e-15, 20, 3.5000000000000000 },
-  { 1.9572475798118559e-14, 20, 3.7500000000000000 },
-  { 6.9559880644906101e-14, 20, 4.0000000000000000 },
-  { 2.2825949745670935e-13, 20, 4.2500000000000000 },
-  { 6.9781823021792824e-13, 20, 4.5000000000000000 },
-  { 2.0024157388665026e-12, 20, 4.7500000000000000 },
-  { 5.4277267607932098e-12, 20, 5.0000000000000000 },
+  { 0.0000000000000000, 20, 0.0000000000000000, 0.0 },
+  { 6.9307487073399339e-38, 20, 0.25000000000000000, 0.0 },
+  { 7.2515880810153944e-32, 20, 0.50000000000000000, 0.0 },
+  { 2.4025911398834722e-28, 20, 0.75000000000000000, 0.0 },
+  { 7.5377957222368705e-26, 20, 1.0000000000000000, 0.0 },
+  { 6.4953439243593413e-24, 20, 1.2500000000000000, 0.0 },
+  { 2.4703120390884050e-22, 20, 1.5000000000000000, 0.0 },
+  { 5.3404627138297197e-21, 20, 1.7500000000000000, 0.0 },
+  { 7.6326411008876072e-20, 20, 2.0000000000000000, 0.0 },
+  { 7.9496335952781085e-19, 20, 2.2500000000000000, 0.0 },
+  { 6.4488532759578977e-18, 20, 2.5000000000000000, 0.0 },
+  { 4.2725223040880135e-17, 20, 2.7500000000000000, 0.0 },
+  { 2.3942249272752627e-16, 20, 3.0000000000000000, 0.0 },
+  { 1.1654033741499860e-15, 20, 3.2500000000000000, 0.0 },
+  { 5.0303402625237494e-15, 20, 3.5000000000000000, 0.0 },
+  { 1.9572475798118565e-14, 20, 3.7500000000000000, 0.0 },
+  { 6.9559880644906101e-14, 20, 4.0000000000000000, 0.0 },
+  { 2.2825949745670935e-13, 20, 4.2500000000000000, 0.0 },
+  { 6.9781823021792824e-13, 20, 4.5000000000000000, 0.0 },
+  { 2.0024157388665022e-12, 20, 4.7500000000000000, 0.0 },
+  { 5.4277267607932098e-12, 20, 5.0000000000000000, 0.0 },
 };
 const double toler006 = 2.5000000000000015e-12;
 //  sph_bessel
 
 // Test data for n=0.
-// max(|f - f_GSL|): 1.0694570229397016e-15
-// max(|f - f_GSL| / |f_GSL|): 3.7496052611150890e-13
+// max(|f - f_GSL|): 1.0703243846776900e-15 at index 15
+// max(|f - f_GSL| / |f_GSL|): 3.7516988430587603e-13
+// mean(f - f_GSL): -2.6681699178119462e-17
+// variance(f - f_GSL): 1.2529792126711598e-32
+// stddev(f - f_GSL): 1.1193655402374864e-16
 const testcase_sph_bessel<double>
 data007[21] =
 {
-  { 1.0000000000000000, 0, 0.0000000000000000 },
-  { -0.19178485493262770, 0, 5.0000000000000000 },
-  { -0.054402111088936979, 0, 10.000000000000000 },
-  { 0.043352522677141118, 0, 15.000000000000000 },
-  { 0.045647262536381385, 0, 20.000000000000000 },
-  { -0.0052940700039109216, 0, 25.000000000000000 },
-  { -0.032934387469762058, 0, 30.000000000000000 },
-  { -0.012233790557032886, 0, 35.000000000000000 },
-  { 0.018627829011983722, 0, 40.000000000000000 },
-  { 0.018908967211869299, 0, 45.000000000000000 },
-  { -0.0052474970740785751, 0, 50.000000000000000 },
-  { -0.018177366788338544, 0, 55.000000000000000 },
-  { -0.0050801770183702783, 0, 60.000000000000000 },
-  { 0.012720441222924667, 0, 65.000000000000000 },
-  { 0.011055581165112701, 0, 70.000000000000000 },
-  { -0.0051704218054590724, 0, 75.000000000000000 },
-  { -0.012423608174042190, 0, 80.000000000000000 },
-  { -0.0020714778817480834, 0, 85.000000000000000 },
-  { 0.0099332962622284207, 0, 90.000000000000000 },
-  { 0.0071922285761696946, 0, 95.000000000000000 },
-  { -0.0050636564110975880, 0, 100.00000000000000 },
+  { 1.0000000000000000, 0, 0.0000000000000000, 0.0 },
+  { -0.19178485493262770, 0, 5.0000000000000000, 0.0 },
+  { -0.054402111088936986, 0, 10.000000000000000, 0.0 },
+  { 0.043352522677141132, 0, 15.000000000000000, 0.0 },
+  { 0.045647262536381385, 0, 20.000000000000000, 0.0 },
+  { -0.0052940700039109216, 0, 25.000000000000000, 0.0 },
+  { -0.032934387469762058, 0, 30.000000000000000, 0.0 },
+  { -0.012233790557032886, 0, 35.000000000000000, 0.0 },
+  { 0.018627829011983722, 0, 40.000000000000000, 0.0 },
+  { 0.018908967211869295, 0, 45.000000000000000, 0.0 },
+  { -0.0052474970740785751, 0, 50.000000000000000, 0.0 },
+  { -0.018177366788338544, 0, 55.000000000000000, 0.0 },
+  { -0.0050801770183702783, 0, 60.000000000000000, 0.0 },
+  { 0.012720441222924667, 0, 65.000000000000000, 0.0 },
+  { 0.011055581165112701, 0, 70.000000000000000, 0.0 },
+  { -0.0051704218054590724, 0, 75.000000000000000, 0.0 },
+  { -0.012423608174042190, 0, 80.000000000000000, 0.0 },
+  { -0.0020714778817480834, 0, 85.000000000000000, 0.0 },
+  { 0.0099332962622284224, 0, 90.000000000000000, 0.0 },
+  { 0.0071922285761696946, 0, 95.000000000000000, 0.0 },
+  { -0.0050636564110975880, 0, 100.00000000000000, 0.0 },
 };
 const double toler007 = 2.5000000000000014e-11;
 
 // Test data for n=1.
-// max(|f - f_GSL|): 1.0044048925905713e-15
+// max(|f - f_GSL|): 1.0061396160665481e-15 at index 13
 // max(|f - f_GSL| / |f_GSL|): 6.5465850130521528e-13
+// mean(f - f_GSL): 5.2800645800044066e-17
+// variance(f - f_GSL): 2.8606709739566642e-33
+// stddev(f - f_GSL): 5.3485240711402470e-17
 const testcase_sph_bessel<double>
 data008[21] =
 {
-  { 0.0000000000000000, 1, 0.0000000000000000 },
-  { -0.095089408079170795, 1, 5.0000000000000000 },
-  { 0.078466941798751549, 1, 10.000000000000000 },
-  { 0.053536029035730827, 1, 15.000000000000000 },
-  { -0.018121739963850528, 1, 20.000000000000000 },
-  { -0.039859875274695380, 1, 25.000000000000000 },
-  { -0.0062395279119115375, 1, 30.000000000000000 },
-  { 0.025470240415270681, 1, 35.000000000000000 },
-  { 0.017139147266606140, 1, 40.000000000000000 },
-  { -0.011253622702352454, 1, 45.000000000000000 },
-  { -0.019404270511323839, 1, 50.000000000000000 },
-  { -0.00073280223727807778, 1, 55.000000000000000 },
-  { 0.015788880056613101, 1, 60.000000000000000 },
-  { 0.0088488352686322581, 1, 65.000000000000000 },
-  { -0.0088894803131598157, 1, 70.000000000000000 },
-  { -0.012358955887069445, 1, 75.000000000000000 },
-  { 0.0012245454458125673, 1, 80.000000000000000 },
-  { 0.011556531358968161, 1, 85.000000000000000 },
-  { 0.0050889656932377614, 1, 90.000000000000000 },
-  { -0.0076103298149331573, 1, 95.000000000000000 },
-  { -0.0086738252869878150, 1, 100.00000000000000 },
+  { 0.0000000000000000, 1, 0.0000000000000000, 0.0 },
+  { -0.095089408079170795, 1, 5.0000000000000000, 0.0 },
+  { 0.078466941798751549, 1, 10.000000000000000, 0.0 },
+  { 0.053536029035730827, 1, 15.000000000000000, 0.0 },
+  { -0.018121739963850528, 1, 20.000000000000000, 0.0 },
+  { -0.039859875274695380, 1, 25.000000000000000, 0.0 },
+  { -0.0062395279119115375, 1, 30.000000000000000, 0.0 },
+  { 0.025470240415270681, 1, 35.000000000000000, 0.0 },
+  { 0.017139147266606140, 1, 40.000000000000000, 0.0 },
+  { -0.011253622702352454, 1, 45.000000000000000, 0.0 },
+  { -0.019404270511323839, 1, 50.000000000000000, 0.0 },
+  { -0.00073280223727807778, 1, 55.000000000000000, 0.0 },
+  { 0.015788880056613101, 1, 60.000000000000000, 0.0 },
+  { 0.0088488352686322581, 1, 65.000000000000000, 0.0 },
+  { -0.0088894803131598157, 1, 70.000000000000000, 0.0 },
+  { -0.012358955887069445, 1, 75.000000000000000, 0.0 },
+  { 0.0012245454458125673, 1, 80.000000000000000, 0.0 },
+  { 0.011556531358968161, 1, 85.000000000000000, 0.0 },
+  { 0.0050889656932377614, 1, 90.000000000000000, 0.0 },
+  { -0.0076103298149331573, 1, 95.000000000000000, 0.0 },
+  { -0.0086738252869878150, 1, 100.00000000000000, 0.0 },
 };
 const double toler008 = 5.0000000000000028e-11;
 
 // Test data for n=2.
-// max(|f - f_GSL|): 1.0772632785815972e-15
+// max(|f - f_GSL|): 1.0772632785815972e-15 at index 15
 // max(|f - f_GSL| / |f_GSL|): 3.4761702917932150e-13
+// mean(f - f_GSL): 2.9356064536917039e-17
+// variance(f - f_GSL): 1.2041524334573537e-32
+// stddev(f - f_GSL): 1.0973387961141963e-16
 const testcase_sph_bessel<double>
 data009[21] =
 {
-  { 0.0000000000000000, 2, 0.0000000000000000 },
-  { 0.13473121008512520, 2, 5.0000000000000000 },
-  { 0.077942193628562445, 2, 10.000000000000000 },
-  { -0.032645316869994966, 2, 15.000000000000000 },
-  { -0.048365523530958965, 2, 20.000000000000000 },
-  { 0.00051088497094747614, 2, 25.000000000000000 },
-  { 0.032310434678570907, 2, 30.000000000000000 },
-  { 0.014416954021198941, 2, 35.000000000000000 },
-  { -0.017342392966988262, 2, 40.000000000000000 },
-  { -0.019659208725359461, 2, 45.000000000000000 },
-  { 0.0040832408433991458, 2, 50.000000000000000 },
-  { 0.018137395757214285, 2, 55.000000000000000 },
-  { 0.0058696210212009327, 2, 60.000000000000000 },
-  { -0.012312033441295490, 2, 65.000000000000000 },
-  { -0.011436558892819550, 2, 70.000000000000000 },
-  { 0.0046760635699762939, 2, 75.000000000000000 },
-  { 0.012469528628260161, 2, 80.000000000000000 },
-  { 0.0024793554591234306, 2, 85.000000000000000 },
-  { -0.0097636640724538277, 2, 90.000000000000000 },
-  { -0.0074325547808517939, 2, 95.000000000000000 },
-  { 0.0048034416524879537, 2, 100.00000000000000 },
+  { 0.0000000000000000, 2, 0.0000000000000000, 0.0 },
+  { 0.13473121008512520, 2, 5.0000000000000000, 0.0 },
+  { 0.077942193628562445, 2, 10.000000000000000, 0.0 },
+  { -0.032645316869994966, 2, 15.000000000000000, 0.0 },
+  { -0.048365523530958965, 2, 20.000000000000000, 0.0 },
+  { 0.00051088497094747614, 2, 25.000000000000000, 0.0 },
+  { 0.032310434678570907, 2, 30.000000000000000, 0.0 },
+  { 0.014416954021198941, 2, 35.000000000000000, 0.0 },
+  { -0.017342392966988262, 2, 40.000000000000000, 0.0 },
+  { -0.019659208725359461, 2, 45.000000000000000, 0.0 },
+  { 0.0040832408433991458, 2, 50.000000000000000, 0.0 },
+  { 0.018137395757214285, 2, 55.000000000000000, 0.0 },
+  { 0.0058696210212009327, 2, 60.000000000000000, 0.0 },
+  { -0.012312033441295490, 2, 65.000000000000000, 0.0 },
+  { -0.011436558892819550, 2, 70.000000000000000, 0.0 },
+  { 0.0046760635699762939, 2, 75.000000000000000, 0.0 },
+  { 0.012469528628260161, 2, 80.000000000000000, 0.0 },
+  { 0.0024793554591234306, 2, 85.000000000000000, 0.0 },
+  { -0.0097636640724538277, 2, 90.000000000000000, 0.0 },
+  { -0.0074325547808517939, 2, 95.000000000000000, 0.0 },
+  { 0.0048034416524879537, 2, 100.00000000000000, 0.0 },
 };
 const double toler009 = 2.5000000000000014e-11;
 
 // Test data for n=5.
-// max(|f - f_GSL|): 9.4455693266937146e-16
-// max(|f - f_GSL| / |f_GSL|): 8.4346477099300519e-13
+// max(|f - f_GSL|): 9.4629165614534827e-16 at index 14
+// max(|f - f_GSL| / |f_GSL|): 8.4323936619049507e-13
+// mean(f - f_GSL): 4.3853396443294642e-17
+// variance(f - f_GSL): 1.4779322601100139e-33
+// stddev(f - f_GSL): 3.8443884560616579e-17
 const testcase_sph_bessel<double>
 data010[21] =
 {
-  { 0.0000000000000000, 5, 0.0000000000000000 },
-  { 0.10681116145650453, 5, 5.0000000000000000 },
-  { -0.055534511621452155, 5, 10.000000000000000 },
-  { 0.065968007076521951, 5, 15.000000000000000 },
-  { 0.016683908063095682, 5, 20.000000000000000 },
-  { -0.036117795989722382, 5, 25.000000000000000 },
-  { -0.020504008736827489, 5, 30.000000000000000 },
-  { 0.018499481206814560, 5, 35.000000000000000 },
-  { 0.022448773791044995, 5, 40.000000000000000 },
-  { -0.0048552694845020138, 5, 45.000000000000000 },
-  { -0.020048300563664877, 5, 50.000000000000000 },
-  { -0.0052999924455565742, 5, 55.000000000000000 },
-  { 0.014151556281331407, 5, 60.000000000000000 },
-  { 0.011354588594416778, 5, 65.000000000000000 },
-  { -0.0064983781785323573, 5, 70.000000000000000 },
-  { -0.013089909320064257, 5, 75.000000000000000 },
-  { -0.00096200450071302446, 5, 80.000000000000000 },
-  { 0.011048668899130202, 5, 85.000000000000000 },
-  { 0.0065639581708136037, 5, 90.000000000000000 },
-  { -0.0064646119368202771, 5, 95.000000000000000 },
-  { -0.0092901489349075713, 5, 100.00000000000000 },
+  { 0.0000000000000000, 5, 0.0000000000000000, 0.0 },
+  { 0.10681116145650453, 5, 5.0000000000000000, 0.0 },
+  { -0.055534511621452155, 5, 10.000000000000000, 0.0 },
+  { 0.065968007076521951, 5, 15.000000000000000, 0.0 },
+  { 0.016683908063095682, 5, 20.000000000000000, 0.0 },
+  { -0.036117795989722382, 5, 25.000000000000000, 0.0 },
+  { -0.020504008736827489, 5, 30.000000000000000, 0.0 },
+  { 0.018499481206814560, 5, 35.000000000000000, 0.0 },
+  { 0.022448773791044995, 5, 40.000000000000000, 0.0 },
+  { -0.0048552694845020129, 5, 45.000000000000000, 0.0 },
+  { -0.020048300563664877, 5, 50.000000000000000, 0.0 },
+  { -0.0052999924455565742, 5, 55.000000000000000, 0.0 },
+  { 0.014151556281331407, 5, 60.000000000000000, 0.0 },
+  { 0.011354588594416778, 5, 65.000000000000000, 0.0 },
+  { -0.0064983781785323573, 5, 70.000000000000000, 0.0 },
+  { -0.013089909320064257, 5, 75.000000000000000, 0.0 },
+  { -0.00096200450071302446, 5, 80.000000000000000, 0.0 },
+  { 0.011048668899130202, 5, 85.000000000000000, 0.0 },
+  { 0.0065639581708136045, 5, 90.000000000000000, 0.0 },
+  { -0.0064646119368202771, 5, 95.000000000000000, 0.0 },
+  { -0.0092901489349075713, 5, 100.00000000000000, 0.0 },
 };
 const double toler010 = 5.0000000000000028e-11;
 
 // Test data for n=10.
-// max(|f - f_GSL|): 1.1999949645069563e-15
+// max(|f - f_GSL|): 1.1999949645069563e-15 at index 13
 // max(|f - f_GSL| / |f_GSL|): 2.9533832871668437e-12
+// mean(f - f_GSL): 4.3565566580837178e-17
+// variance(f - f_GSL): 1.4986791255793479e-32
+// stddev(f - f_GSL): 1.2242055079027163e-16
 const testcase_sph_bessel<double>
 data011[21] =
 {
-  { 0.0000000000000000, 10, 0.0000000000000000 },
-  { 0.00040734424424946052, 10, 5.0000000000000000 },
-  { 0.064605154492564265, 10, 10.000000000000000 },
-  { 0.0018969790010883577, 10, 15.000000000000000 },
-  { 0.039686698644626366, 10, 20.000000000000000 },
-  { -0.036253285601128581, 10, 25.000000000000000 },
-  { -0.014529646403897799, 10, 30.000000000000000 },
-  { 0.026281264603993857, 10, 35.000000000000000 },
-  { 0.013124803182748323, 10, 40.000000000000000 },
-  { -0.017600831383728983, 10, 45.000000000000000 },
-  { -0.015039221463465955, 10, 50.000000000000000 },
-  { 0.0095256289349167390, 10, 55.000000000000000 },
-  { 0.015822719394008339, 10, 60.000000000000000 },
-  { -0.0019391391708249754, 10, 65.000000000000000 },
-  { -0.014293389028395012, 10, 70.000000000000000 },
-  { -0.0044210285031696227, 10, 75.000000000000000 },
-  { 0.010516146958338813, 10, 80.000000000000000 },
-  { 0.0086736275131325726, 10, 85.000000000000000 },
-  { -0.0052905066357239322, 10, 90.000000000000000 },
-  { -0.010258326955210768, 10, 95.000000000000000 },
-  { -0.00019565785971342414, 10, 100.00000000000000 },
+  { 0.0000000000000000, 10, 0.0000000000000000, 0.0 },
+  { 0.00040734424424946052, 10, 5.0000000000000000, 0.0 },
+  { 0.064605154492564265, 10, 10.000000000000000, 0.0 },
+  { 0.0018969790010883577, 10, 15.000000000000000, 0.0 },
+  { 0.039686698644626366, 10, 20.000000000000000, 0.0 },
+  { -0.036253285601128581, 10, 25.000000000000000, 0.0 },
+  { -0.014529646403897799, 10, 30.000000000000000, 0.0 },
+  { 0.026281264603993857, 10, 35.000000000000000, 0.0 },
+  { 0.013124803182748323, 10, 40.000000000000000, 0.0 },
+  { -0.017600831383728980, 10, 45.000000000000000, 0.0 },
+  { -0.015039221463465955, 10, 50.000000000000000, 0.0 },
+  { 0.0095256289349167390, 10, 55.000000000000000, 0.0 },
+  { 0.015822719394008339, 10, 60.000000000000000, 0.0 },
+  { -0.0019391391708249754, 10, 65.000000000000000, 0.0 },
+  { -0.014293389028395012, 10, 70.000000000000000, 0.0 },
+  { -0.0044210285031696227, 10, 75.000000000000000, 0.0 },
+  { 0.010516146958338813, 10, 80.000000000000000, 0.0 },
+  { 0.0086736275131325726, 10, 85.000000000000000, 0.0 },
+  { -0.0052905066357239331, 10, 90.000000000000000, 0.0 },
+  { -0.010258326955210768, 10, 95.000000000000000, 0.0 },
+  { -0.00019565785971342414, 10, 100.00000000000000, 0.0 },
 };
 const double toler011 = 2.5000000000000017e-10;
 
 // Test data for n=20.
-// max(|f - f_GSL|): 8.5521867365656590e-16
-// max(|f - f_GSL| / |f_GSL|): 2.3231623379380350e-13
+// max(|f - f_GSL|): 8.5435131191857749e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 2.3195586735048320e-13
+// mean(f - f_GSL): 8.6950352153253420e-18
+// variance(f - f_GSL): 1.4336055666601385e-36
+// stddev(f - f_GSL): 1.1973326883786889e-18
 const testcase_sph_bessel<double>
 data012[21] =
 {
-  { 0.0000000000000000, 20, 0.0000000000000000 },
-  { 5.4277267607932098e-12, 20, 5.0000000000000000 },
-  { 2.3083719613194670e-06, 20, 10.000000000000000 },
-  { 0.0015467058510412498, 20, 15.000000000000000 },
-  { 0.038324851639805160, 20, 20.000000000000000 },
-  { 0.028500071484154645, 20, 25.000000000000000 },
-  { -0.014711593353429081, 20, 30.000000000000000 },
-  { -0.010797653070264229, 20, 35.000000000000000 },
-  { 0.026535391837540293, 20, 40.000000000000000 },
-  { -0.011582959134716393, 20, 45.000000000000000 },
-  { -0.015785029898269291, 20, 50.000000000000000 },
-  { 0.013885519185862741, 20, 55.000000000000000 },
-  { 0.011112458964023273, 20, 60.000000000000000 },
-  { -0.011938384963927568, 20, 65.000000000000000 },
-  { -0.010117695207156904, 20, 70.000000000000000 },
-  { 0.0089871214102383232, 20, 75.000000000000000 },
-  { 0.010400578884991936, 20, 80.000000000000000 },
-  { -0.0055359020656326700, 20, 85.000000000000000 },
-  { -0.010639343320787521, 20, 90.000000000000000 },
-  { 0.0018051661455979529, 20, 95.000000000000000 },
-  { 0.010107671283873054, 20, 100.00000000000000 },
+  { 0.0000000000000000, 20, 0.0000000000000000, 0.0 },
+  { 5.4277267607932098e-12, 20, 5.0000000000000000, 0.0 },
+  { 2.3083719613194670e-06, 20, 10.000000000000000, 0.0 },
+  { 0.0015467058510412498, 20, 15.000000000000000, 0.0 },
+  { 0.038324851639805160, 20, 20.000000000000000, 0.0 },
+  { 0.028500071484154645, 20, 25.000000000000000, 0.0 },
+  { -0.014711593353429081, 20, 30.000000000000000, 0.0 },
+  { -0.010797653070264229, 20, 35.000000000000000, 0.0 },
+  { 0.026535391837540293, 20, 40.000000000000000, 0.0 },
+  { -0.011582959134716391, 20, 45.000000000000000, 0.0 },
+  { -0.015785029898269291, 20, 50.000000000000000, 0.0 },
+  { 0.013885519185862741, 20, 55.000000000000000, 0.0 },
+  { 0.011112458964023273, 20, 60.000000000000000, 0.0 },
+  { -0.011938384963927568, 20, 65.000000000000000, 0.0 },
+  { -0.010117695207156904, 20, 70.000000000000000, 0.0 },
+  { 0.0089871214102383232, 20, 75.000000000000000, 0.0 },
+  { 0.010400578884991936, 20, 80.000000000000000, 0.0 },
+  { -0.0055359020656326700, 20, 85.000000000000000, 0.0 },
+  { -0.010639343320787522, 20, 90.000000000000000, 0.0 },
+  { 0.0018051661455979529, 20, 95.000000000000000, 0.0 },
+  { 0.010107671283873054, 20, 100.00000000000000, 0.0 },
 };
 const double toler012 = 2.5000000000000014e-11;
 
 // Test data for n=50.
-// max(|f - f_GSL|): 9.7377618121785581e-16
-// max(|f - f_GSL| / |f_GSL|): 2.0735742618499052e-12
+// max(|f - f_GSL|): 9.7366776100060726e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 2.0733433901400738e-12
+// mean(f - f_GSL): 7.9976407365692512e-18
+// variance(f - f_GSL): 4.9608706858434859e-33
+// stddev(f - f_GSL): 7.0433448629493399e-17
 const testcase_sph_bessel<double>
 data013[21] =
 {
-  { 0.0000000000000000, 50, 0.0000000000000000 },
-  { 2.8574793504401511e-46, 50, 5.0000000000000000 },
-  { 2.2306960232186471e-31, 50, 10.000000000000000 },
-  { 7.6804716640080804e-23, 50, 15.000000000000000 },
-  { 5.6500807918725220e-17, 50, 20.000000000000000 },
-  { 1.2540416973758975e-12, 50, 25.000000000000000 },
-  { 2.6901637185735326e-09, 50, 30.000000000000000 },
-  { 1.0167148174422245e-06, 50, 35.000000000000000 },
-  { 9.3949174038179069e-05, 50, 40.000000000000000 },
-  { 0.0024888927213794561, 50, 45.000000000000000 },
-  { 0.018829107369282647, 50, 50.000000000000000 },
-  { 0.026373198438145489, 50, 55.000000000000000 },
-  { -0.021230978268739001, 50, 60.000000000000000 },
-  { 0.016539881802291313, 50, 65.000000000000000 },
-  { -0.015985416061436664, 50, 70.000000000000000 },
-  { 0.015462548984405590, 50, 75.000000000000000 },
-  { -0.010638570118081819, 50, 80.000000000000000 },
-  { 0.00046961239784540793, 50, 85.000000000000000 },
-  { 0.0096065882189920251, 50, 90.000000000000000 },
-  { -0.010613873910261154, 50, 95.000000000000000 },
-  { 0.00057971408822774927, 50, 100.00000000000000 },
+  { 0.0000000000000000, 50, 0.0000000000000000, 0.0 },
+  { 2.8574793504401518e-46, 50, 5.0000000000000000, 0.0 },
+  { 2.2306960232186480e-31, 50, 10.000000000000000, 0.0 },
+  { 7.6804716640080804e-23, 50, 15.000000000000000, 0.0 },
+  { 5.6500807918725220e-17, 50, 20.000000000000000, 0.0 },
+  { 1.2540416973758975e-12, 50, 25.000000000000000, 0.0 },
+  { 2.6901637185735326e-09, 50, 30.000000000000000, 0.0 },
+  { 1.0167148174422245e-06, 50, 35.000000000000000, 0.0 },
+  { 9.3949174038179069e-05, 50, 40.000000000000000, 0.0 },
+  { 0.0024888927213794557, 50, 45.000000000000000, 0.0 },
+  { 0.018829107369282647, 50, 50.000000000000000, 0.0 },
+  { 0.026373198438145489, 50, 55.000000000000000, 0.0 },
+  { -0.021230978268739001, 50, 60.000000000000000, 0.0 },
+  { 0.016539881802291313, 50, 65.000000000000000, 0.0 },
+  { -0.015985416061436664, 50, 70.000000000000000, 0.0 },
+  { 0.015462548984405590, 50, 75.000000000000000, 0.0 },
+  { -0.010638570118081819, 50, 80.000000000000000, 0.0 },
+  { 0.00046961239784540793, 50, 85.000000000000000, 0.0 },
+  { 0.0096065882189920251, 50, 90.000000000000000, 0.0 },
+  { -0.010613873910261154, 50, 95.000000000000000, 0.0 },
+  { 0.00057971408822774927, 50, 100.00000000000000, 0.0 },
 };
 const double toler013 = 2.5000000000000017e-10;
 
 // Test data for n=100.
-// max(|f - f_GSL|): 3.1225022567582528e-17
+// max(|f - f_GSL|): 3.2959746043559335e-17 at index 20
 // max(|f - f_GSL| / |f_GSL|): 8.7701893132122237e-14
+// mean(f - f_GSL): -1.3192742355211203e-18
+// variance(f - f_GSL): 5.2558771452351202e-35
+// stddev(f - f_GSL): 7.2497428542225690e-18
 const testcase_sph_bessel<double>
 data014[21] =
 {
-  { 0.0000000000000000, 100, 0.0000000000000000 },
-  { 5.5356503033889938e-120, 100, 5.0000000000000000 },
-  { 5.8320401820058771e-90, 100, 10.000000000000000 },
-  { 1.7406387750766626e-72, 100, 15.000000000000000 },
-  { 3.5152711125317012e-60, 100, 20.000000000000000 },
-  { 9.8455459353815965e-51, 100, 25.000000000000000 },
-  { 4.0888596744301583e-43, 100, 30.000000000000000 },
-  { 8.8975854911133939e-37, 100, 35.000000000000000 },
-  { 2.1513492547733828e-31, 100, 40.000000000000000 },
-  { 9.3673586994539108e-27, 100, 45.000000000000000 },
-  { 1.0190122629310471e-22, 100, 50.000000000000000 },
-  { 3.4887804977690388e-19, 100, 55.000000000000000 },
-  { 4.4442883425555593e-16, 100, 60.000000000000000 },
-  { 2.3832619568710723e-13, 100, 65.000000000000000 },
-  { 5.8948384175607987e-11, 100, 70.000000000000000 },
-  { 7.1884446357022277e-09, 100, 75.000000000000000 },
-  { 4.5247964400095002e-07, 100, 80.000000000000000 },
-  { 1.5096093228779032e-05, 100, 85.000000000000000 },
-  { 0.00026825172647807507, 100, 90.000000000000000 },
-  { 0.0024744308520581117, 100, 95.000000000000000 },
-  { 0.010880477011438350, 100, 100.00000000000000 },
+  { 0.0000000000000000, 100, 0.0000000000000000, 0.0 },
+  { 5.5356503033889931e-120, 100, 5.0000000000000000, 0.0 },
+  { 5.8320401820058771e-90, 100, 10.000000000000000, 0.0 },
+  { 1.7406387750766626e-72, 100, 15.000000000000000, 0.0 },
+  { 3.5152711125317012e-60, 100, 20.000000000000000, 0.0 },
+  { 9.8455459353815965e-51, 100, 25.000000000000000, 0.0 },
+  { 4.0888596744301583e-43, 100, 30.000000000000000, 0.0 },
+  { 8.8975854911133939e-37, 100, 35.000000000000000, 0.0 },
+  { 2.1513492547733828e-31, 100, 40.000000000000000, 0.0 },
+  { 9.3673586994539094e-27, 100, 45.000000000000000, 0.0 },
+  { 1.0190122629310471e-22, 100, 50.000000000000000, 0.0 },
+  { 3.4887804977690388e-19, 100, 55.000000000000000, 0.0 },
+  { 4.4442883425555593e-16, 100, 60.000000000000000, 0.0 },
+  { 2.3832619568710723e-13, 100, 65.000000000000000, 0.0 },
+  { 5.8948384175607987e-11, 100, 70.000000000000000, 0.0 },
+  { 7.1884446357022277e-09, 100, 75.000000000000000, 0.0 },
+  { 4.5247964400095002e-07, 100, 80.000000000000000, 0.0 },
+  { 1.5096093228779032e-05, 100, 85.000000000000000, 0.0 },
+  { 0.00026825172647807513, 100, 90.000000000000000, 0.0 },
+  { 0.0024744308520581117, 100, 95.000000000000000, 0.0 },
+  { 0.010880477011438350, 100, 100.00000000000000, 0.0 },
 };
 const double toler014 = 5.0000000000000029e-12;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_sph_bessel<Tp> (&data)[Num], Tp toler)
+  test(const testcase_sph_bessel<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::sph_bessel(data[i].n, data[i].x);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::sph_bessel(data[i].n, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index 87d9fda..fecea0e 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for l=0, m=0.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_sph_legendre<double>
 data001[21] =
 {
   { 0.28209479177387814, 0, 0, 
-         0.0000000000000000 },
+         0.0000000000000000, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         0.15707963267948966 },
+         0.15707963267948966, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         0.31415926535897931 },
+         0.31415926535897931, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         0.47123889803846897 },
+         0.47123889803846897, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         0.62831853071795862 },
+         0.62831853071795862, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         0.78539816339744828 },
+         0.78539816339744828, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         0.94247779607693793 },
+         0.94247779607693793, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         1.5707963267948966 },
+         1.5707963267948966, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         1.7278759594743860 },
+         1.7278759594743862, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         1.8849555921538759 },
+         1.8849555921538759, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         2.0420352248333655 },
+         2.0420352248333655, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         2.3561944901923448 },
+         2.3561944901923448, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         2.5132741228718345 },
+         2.5132741228718345, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.28209479177387814, 0, 0, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
 const double toler001 = 2.5000000000000020e-13;
 
 // Test data for l=1, m=0.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
 const testcase_sph_legendre<double>
 data002[21] =
 {
   { 0.48860251190291992, 1, 0, 
-         0.0000000000000000 },
-  { 0.48258700419201100, 1, 0, 
-         0.15707963267948966 },
-  { 0.46468860282345231, 1, 0, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 0.48258700419201095, 1, 0, 
+         0.15707963267948966, 0.0 },
+  { 0.46468860282345237, 1, 0, 
+         0.31415926535897931, 0.0 },
   { 0.43534802584032634, 1, 0, 
-         0.47123889803846897 },
-  { 0.39528773562374975, 1, 0, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.39528773562374969, 1, 0, 
+         0.62831853071795862, 0.0 },
   { 0.34549414947133550, 1, 0, 
-         0.78539816339744828 },
-  { 0.28719335072959390, 1, 0, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.28719335072959395, 1, 0, 
+         0.94247779607693793, 0.0 },
   { 0.22182089855280449, 1, 0, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.15098647967228981, 1, 0, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { 0.076434272566846345, 1, 0, 
-         1.4137166941154069 },
-  { 2.9918275112863369e-17, 1, 0, 
-         1.5707963267948966 },
-  { -0.076434272566846179, 1, 0, 
-         1.7278759594743860 },
+         1.4137166941154069, 0.0 },
+  { 2.9918275112863332e-17, 1, 0, 
+         1.5707963267948966, 0.0 },
+  { -0.076434272566846290, 1, 0, 
+         1.7278759594743862, 0.0 },
   { -0.15098647967228976, 1, 0, 
-         1.8849555921538759 },
-  { -0.22182089855280443, 1, 0, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.22182089855280446, 1, 0, 
+         2.0420352248333655, 0.0 },
   { -0.28719335072959384, 1, 0, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { -0.34549414947133544, 1, 0, 
-         2.3561944901923448 },
-  { -0.39528773562374969, 1, 0, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.39528773562374975, 1, 0, 
+         2.5132741228718345, 0.0 },
   { -0.43534802584032628, 1, 0, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { -0.46468860282345231, 1, 0, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { -0.48258700419201095, 1, 0, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { -0.48860251190291992, 1, 0, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
 const double toler002 = 2.5000000000000020e-13;
 
 // Test data for l=1, m=1.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 7.7031500691196945e-16
+// max(|f - f_GSL|): 1.9984014443252818e-15 at index 9
+// max(|f - f_GSL| / |f_GSL|): 5.9507621559271917e-15
+// mean(f - f_GSL): 1.1981156807413147e-15
+// variance(f - f_GSL): 7.5362762183006766e-32
+// stddev(f - f_GSL): 2.7452278991553101e-16
 const testcase_sph_legendre<double>
 data003[21] =
 {
   { 0.0000000000000000, 1, 1, 
-         0.0000000000000000 },
-  { -0.054047192447077917, 1, 1, 
-         0.15707963267948966 },
-  { -0.10676356364376104, 1, 1, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -0.054047192447078167, 1, 1, 
+         0.15707963267948966, 0.0 },
+  { -0.10676356364376091, 1, 1, 
+         0.31415926535897931, 0.0 },
   { -0.15685106157558129, 1, 1, 
-         0.47123889803846897 },
-  { -0.20307636581258243, 1, 1, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { -0.20307636581258248, 1, 1, 
+         0.62831853071795862, 0.0 },
   { -0.24430125595146007, 1, 1, 
-         0.78539816339744828 },
+         0.78539816339744828, 0.0 },
   { -0.27951063837942880, 1, 1, 
-         0.94247779607693793 },
+         0.94247779607693793, 0.0 },
   { -0.30783754124787122, 1, 1, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { -0.32858446219656556, 1, 1, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.34124054317667202, 1, 1, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { -0.34549414947133567, 1, 1, 
-         1.5707963267948966 },
+         1.5707963267948966, 0.0 },
   { -0.34124054317667202, 1, 1, 
-         1.7278759594743860 },
+         1.7278759594743862, 0.0 },
   { -0.32858446219656556, 1, 1, 
-         1.8849555921538759 },
+         1.8849555921538759, 0.0 },
   { -0.30783754124787127, 1, 1, 
-         2.0420352248333655 },
+         2.0420352248333655, 0.0 },
   { -0.27951063837942880, 1, 1, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { -0.24430125595146013, 1, 1, 
-         2.3561944901923448 },
-  { -0.20307636581258248, 1, 1, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.20307636581258243, 1, 1, 
+         2.5132741228718345, 0.0 },
   { -0.15685106157558140, 1, 1, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { -0.10676356364376104, 1, 1, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { -0.054047192447078167, 1, 1, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 1, 1, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler003 = 2.5000000000000020e-13;
+const double toler003 = 5.0000000000000039e-13;
 
 // Test data for l=2, m=0.
-// max(|f - f_GSL|): 5.5511151231257827e-17
-// max(|f - f_GSL| / |f_GSL|): 3.0159263334953002e-15
+// max(|f - f_GSL|): 1.1102230246251565e-16 at index 0
+// max(|f - f_GSL| / |f_GSL|): 3.1667226501700652e-15
+// mean(f - f_GSL): -3.0233752009881492e-17
+// variance(f - f_GSL): 3.4265646892248527e-34
+// stddev(f - f_GSL): 1.8510982386747748e-17
 const testcase_sph_legendre<double>
 data004[21] =
 {
   { 0.63078313050504009, 2, 0, 
-         0.0000000000000000 },
-  { 0.60762858760316607, 2, 0, 
-         0.15707963267948966 },
-  { 0.54043148688396569, 2, 0, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 0.60762858760316585, 2, 0, 
+         0.15707963267948966, 0.0 },
+  { 0.54043148688396603, 2, 0, 
+         0.31415926535897931, 0.0 },
   { 0.43576954875556589, 2, 0, 
-         0.47123889803846897 },
-  { 0.30388781294457579, 2, 0, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.30388781294457567, 2, 0, 
+         0.62831853071795862, 0.0 },
   { 0.15769578262626011, 2, 0, 
-         0.78539816339744828 },
-  { 0.011503752307944235, 2, 0, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.011503752307944374, 2, 0, 
+         0.94247779607693793, 0.0 },
   { -0.12037798350304570, 2, 0, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { -0.22503992163144576, 2, 0, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.29223702235064597, 2, 0, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { -0.31539156525252005, 2, 0, 
-         1.5707963267948966 },
-  { -0.29223702235064608, 2, 0, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { -0.29223702235064597, 2, 0, 
+         1.7278759594743862, 0.0 },
   { -0.22503992163144584, 2, 0, 
-         1.8849555921538759 },
-  { -0.12037798350304584, 2, 0, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.12037798350304577, 2, 0, 
+         2.0420352248333655, 0.0 },
   { 0.011503752307944164, 2, 0, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.15769578262625994, 2, 0, 
-         2.3561944901923448 },
-  { 0.30388781294457567, 2, 0, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { 0.30388781294457579, 2, 0, 
+         2.5132741228718345, 0.0 },
   { 0.43576954875556562, 2, 0, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 0.54043148688396569, 2, 0, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 0.60762858760316585, 2, 0, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.63078313050504009, 2, 0, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
 const double toler004 = 2.5000000000000020e-13;
 
 // Test data for l=2, m=1.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 8.1384221730905279e-16
+// max(|f - f_GSL|): 2.2204460492503131e-15 at index 5
+// max(|f - f_GSL| / |f_GSL|): 5.9294218689659490e-15
+// mean(f - f_GSL): 6.6084703846736834e-19
+// variance(f - f_GSL): 2.2927737433182295e-38
+// stddev(f - f_GSL): 1.5141907882820546e-19
 const testcase_sph_legendre<double>
 data005[21] =
 {
   { 0.0000000000000000, 2, 1, 
-         0.0000000000000000 },
-  { -0.11936529291378727, 2, 1, 
-         0.15707963267948966 },
-  { -0.22704627929027449, 2, 1, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -0.11936529291378781, 2, 1, 
+         0.15707963267948966, 0.0 },
+  { -0.22704627929027421, 2, 1, 
+         0.31415926535897931, 0.0 },
   { -0.31250239392538215, 2, 1, 
-         0.47123889803846897 },
+         0.47123889803846897, 0.0 },
   { -0.36736859691086526, 2, 1, 
-         0.62831853071795862 },
+         0.62831853071795862, 0.0 },
   { -0.38627420202318979, 2, 1, 
-         0.78539816339744828 },
-  { -0.36736859691086526, 2, 1, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { -0.36736859691086532, 2, 1, 
+         0.94247779607693793, 0.0 },
   { -0.31250239392538226, 2, 1, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { -0.22704627929027438, 2, 1, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.11936529291378740, 2, 1, 
-         1.4137166941154069 },
-  { -4.7304946510089748e-17, 2, 1, 
-         1.5707963267948966 },
-  { 0.11936529291378714, 2, 1, 
-         1.7278759594743860 },
+         1.4137166941154069, 0.0 },
+  { -4.7304946510089680e-17, 2, 1, 
+         1.5707963267948966, 0.0 },
+  { 0.11936529291378731, 2, 1, 
+         1.7278759594743862, 0.0 },
   { 0.22704627929027429, 2, 1, 
-         1.8849555921538759 },
-  { 0.31250239392538220, 2, 1, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 0.31250239392538226, 2, 1, 
+         2.0420352248333655, 0.0 },
   { 0.36736859691086521, 2, 1, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.38627420202318979, 2, 1, 
-         2.3561944901923448 },
+         2.3561944901923448, 0.0 },
   { 0.36736859691086526, 2, 1, 
-         2.5132741228718345 },
+         2.5132741228718345, 0.0 },
   { 0.31250239392538232, 2, 1, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 0.22704627929027449, 2, 1, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 0.11936529291378781, 2, 1, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 2, 1, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler005 = 2.5000000000000020e-13;
+const double toler005 = 5.0000000000000039e-13;
 
 // Test data for l=2, m=2.
-// max(|f - f_GSL|): 1.6653345369377348e-16
-// max(|f - f_GSL| / |f_GSL|): 6.2393366429561032e-16
+// max(|f - f_GSL|): 2.2759572004815709e-15 at index 10
+// max(|f - f_GSL| / |f_GSL|): 6.0197685443914339e-15
+// mean(f - f_GSL): -1.0489294618073093e-15
+// variance(f - f_GSL): 5.7763283331987012e-32
+// stddev(f - f_GSL): 2.4033993287006430e-16
 const testcase_sph_legendre<double>
 data006[21] =
 {
   { 0.0000000000000000, 2, 2, 
-         0.0000000000000000 },
-  { 0.0094528025561622549, 2, 2, 
-         0.15707963267948966 },
-  { 0.036885904048903795, 2, 2, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 0.0094528025561623485, 2, 2, 
+         0.15707963267948966, 0.0 },
+  { 0.036885904048903732, 2, 2, 
+         0.31415926535897931, 0.0 },
   { 0.079613961366457681, 2, 2, 
-         0.47123889803846897 },
-  { 0.13345445455470123, 2, 2, 
-         0.62831853071795862 },
-  { 0.19313710101159484, 2, 2, 
-         0.78539816339744828 },
+         0.47123889803846897, 0.0 },
+  { 0.13345445455470126, 2, 2, 
+         0.62831853071795862, 0.0 },
+  { 0.19313710101159490, 2, 2, 
+         0.78539816339744828, 0.0 },
   { 0.25281974746848851, 2, 2, 
-         0.94247779607693793 },
+         0.94247779607693793, 0.0 },
   { 0.30666024065673209, 2, 2, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.34938829797428600, 2, 2, 
-         1.2566370614359172 },
-  { 0.37682139946702747, 2, 2, 
-         1.4137166941154069 },
-  { 0.38627420202318979, 2, 2, 
-         1.5707963267948966 },
+         1.2566370614359172, 0.0 },
   { 0.37682139946702753, 2, 2, 
-         1.7278759594743860 },
+         1.4137166941154069, 0.0 },
+  { 0.38627420202318985, 2, 2, 
+         1.5707963267948966, 0.0 },
+  { 0.37682139946702753, 2, 2, 
+         1.7278759594743862, 0.0 },
   { 0.34938829797428606, 2, 2, 
-         1.8849555921538759 },
-  { 0.30666024065673209, 2, 2, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 0.30666024065673214, 2, 2, 
+         2.0420352248333655, 0.0 },
   { 0.25281974746848856, 2, 2, 
-         2.1991148575128552 },
-  { 0.19313710101159492, 2, 2, 
-         2.3561944901923448 },
-  { 0.13345445455470126, 2, 2, 
-         2.5132741228718345 },
+         2.1991148575128552, 0.0 },
+  { 0.19313710101159498, 2, 2, 
+         2.3561944901923448, 0.0 },
+  { 0.13345445455470123, 2, 2, 
+         2.5132741228718345, 0.0 },
   { 0.079613961366457764, 2, 2, 
-         2.6703537555513241 },
-  { 0.036885904048903795, 2, 2, 
-         2.8274333882308138 },
-  { 0.0094528025561623433, 2, 2, 
-         2.9845130209103035 },
+         2.6703537555513241, 0.0 },
+  { 0.036885904048903809, 2, 2, 
+         2.8274333882308138, 0.0 },
+  { 0.0094528025561623485, 2, 2, 
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 2, 2, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler006 = 2.5000000000000020e-13;
+const double toler006 = 5.0000000000000039e-13;
 
 // Test data for l=5, m=0.
-// max(|f - f_GSL|): 1.0547118733938987e-15
+// max(|f - f_GSL|): 1.0547118733938987e-15 at index 18
 // max(|f - f_GSL| / |f_GSL|): 2.9385557676213648e-15
+// mean(f - f_GSL): -4.2955057500378082e-17
+// variance(f - f_GSL): 9.6869690655191325e-35
+// stddev(f - f_GSL): 9.8422401238331574e-18
 const testcase_sph_legendre<double>
 data007[21] =
 {
   { 0.93560257962738880, 5, 0, 
-         0.0000000000000000 },
-  { 0.77014422942079963, 5, 0, 
-         0.15707963267948966 },
-  { 0.35892185032365165, 5, 0, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 0.77014422942079852, 5, 0, 
+         0.15707963267948966, 0.0 },
+  { 0.35892185032365348, 5, 0, 
+         0.31415926535897931, 0.0 },
   { -0.090214932090594294, 5, 0, 
-         0.47123889803846897 },
-  { -0.36214460396518883, 5, 0, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { -0.36214460396518905, 5, 0, 
+         0.62831853071795862, 0.0 },
   { -0.35145955579226906, 5, 0, 
-         0.78539816339744828 },
-  { -0.11441703594725168, 5, 0, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { -0.11441703594725193, 5, 0, 
+         0.94247779607693793, 0.0 },
   { 0.17248966720808107, 5, 0, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.32128384287200523, 5, 0, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { 0.24377632246714948, 5, 0, 
-         1.4137166941154069 },
-  { 1.0741712853887702e-16, 5, 0, 
-         1.5707963267948966 },
-  { -0.24377632246714911, 5, 0, 
-         1.7278759594743860 },
+         1.4137166941154069, 0.0 },
+  { 1.0741712853887687e-16, 5, 0, 
+         1.5707963267948966, 0.0 },
+  { -0.24377632246714936, 5, 0, 
+         1.7278759594743862, 0.0 },
   { -0.32128384287200534, 5, 0, 
-         1.8849555921538759 },
-  { -0.17248966720808132, 5, 0, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.17248966720808118, 5, 0, 
+         2.0420352248333655, 0.0 },
   { 0.11441703594725151, 5, 0, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.35145955579226895, 5, 0, 
-         2.3561944901923448 },
-  { 0.36214460396518905, 5, 0, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { 0.36214460396518883, 5, 0, 
+         2.5132741228718345, 0.0 },
   { 0.090214932090594752, 5, 0, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { -0.35892185032365165, 5, 0, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { -0.77014422942079852, 5, 0, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { -0.93560257962738880, 5, 0, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
 const double toler007 = 2.5000000000000020e-13;
 
 // Test data for l=5, m=1.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 1.4161260272615034e-15
+// max(|f - f_GSL|): 3.3306690738754696e-15 at index 2
+// max(|f - f_GSL| / |f_GSL|): 6.7265986294921411e-15
+// mean(f - f_GSL): 6.3573485100559560e-16
+// variance(f - f_GSL): 2.1218337041113107e-32
+// stddev(f - f_GSL): 1.4566515383273072e-16
 const testcase_sph_legendre<double>
 data008[21] =
 {
   { 0.0000000000000000, 5, 1, 
-         0.0000000000000000 },
-  { -0.36712373713318258, 5, 1, 
-         0.15707963267948966 },
-  { -0.54610329010534753, 5, 1, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -0.36712373713318402, 5, 1, 
+         0.15707963267948966, 0.0 },
+  { -0.54610329010534708, 5, 1, 
+         0.31415926535897931, 0.0 },
   { -0.45381991493631763, 5, 1, 
-         0.47123889803846897 },
-  { -0.15679720635769961, 5, 1, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { -0.15679720635769906, 5, 1, 
+         0.62831853071795862, 0.0 },
   { 0.16985499419838601, 5, 1, 
-         0.78539816339744828 },
-  { 0.34468004499725180, 5, 1, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.34468004499725169, 5, 1, 
+         0.94247779607693793, 0.0 },
   { 0.28349471119605985, 5, 1, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.044286619339675815, 5, 1, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.21193784177193470, 5, 1, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { -0.32028164857621527, 5, 1, 
-         1.5707963267948966 },
-  { -0.21193784177193514, 5, 1, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { -0.21193784177193487, 5, 1, 
+         1.7278759594743862, 0.0 },
   { 0.044286619339675592, 5, 1, 
-         1.8849555921538759 },
-  { 0.28349471119605968, 5, 1, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 0.28349471119605973, 5, 1, 
+         2.0420352248333655, 0.0 },
   { 0.34468004499725174, 5, 1, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.16985499419838640, 5, 1, 
-         2.3561944901923448 },
-  { -0.15679720635769906, 5, 1, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.15679720635769961, 5, 1, 
+         2.5132741228718345, 0.0 },
   { -0.45381991493631768, 5, 1, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { -0.54610329010534753, 5, 1, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { -0.36712373713318402, 5, 1, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 5, 1, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler008 = 2.5000000000000020e-13;
+const double toler008 = 5.0000000000000039e-13;
 
 // Test data for l=5, m=2.
-// max(|f - f_GSL|): 1.6653345369377348e-16
-// max(|f - f_GSL| / |f_GSL|): 3.0636916515712721e-15
+// max(|f - f_GSL|): 2.6645352591003757e-15 at index 4
+// max(|f - f_GSL| / |f_GSL|): 6.1144597746666128e-15
+// mean(f - f_GSL): -4.3615904538845404e-17
+// variance(f - f_GSL): 9.9873224258937960e-35
+// stddev(f - f_GSL): 9.9936592026613535e-18
 const testcase_sph_legendre<double>
 data009[21] =
 {
   { 0.0000000000000000, 5, 2, 
-         0.0000000000000000 },
-  { 0.078919441745546146, 5, 2, 
-         0.15707963267948966 },
-  { 0.26373799140437987, 5, 2, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 0.078919441745546909, 5, 2, 
+         0.15707963267948966, 0.0 },
+  { 0.26373799140437948, 5, 2, 
+         0.31415926535897931, 0.0 },
   { 0.43002359842080096, 5, 2, 
-         0.47123889803846897 },
+         0.47123889803846897, 0.0 },
   { 0.45642486439050983, 5, 2, 
-         0.62831853071795862 },
-  { 0.29959604906083293, 5, 2, 
-         0.78539816339744828 },
-  { 0.023781239849532215, 5, 2, 
-         0.94247779607693793 },
+         0.62831853071795862, 0.0 },
+  { 0.29959604906083298, 5, 2, 
+         0.78539816339744828, 0.0 },
+  { 0.023781239849532509, 5, 2, 
+         0.94247779607693793, 0.0 },
   { -0.23313989334673826, 5, 2, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { -0.33799912776303714, 5, 2, 
-         1.2566370614359172 },
-  { -0.23964508489529743, 5, 2, 
-         1.4137166941154069 },
-  { -1.0377480524338170e-16, 5, 2, 
-         1.5707963267948966 },
-  { 0.23964508489529704, 5, 2, 
-         1.7278759594743860 },
+         1.2566370614359172, 0.0 },
+  { -0.23964508489529746, 5, 2, 
+         1.4137166941154069, 0.0 },
+  { -1.0377480524338157e-16, 5, 2, 
+         1.5707963267948966, 0.0 },
+  { 0.23964508489529732, 5, 2, 
+         1.7278759594743862, 0.0 },
   { 0.33799912776303714, 5, 2, 
-         1.8849555921538759 },
+         1.8849555921538759, 0.0 },
   { 0.23313989334673843, 5, 2, 
-         2.0420352248333655 },
+         2.0420352248333655, 0.0 },
   { -0.023781239849531916, 5, 2, 
-         2.1991148575128552 },
-  { -0.29959604906083276, 5, 2, 
-         2.3561944901923448 },
+         2.1991148575128552, 0.0 },
+  { -0.29959604906083270, 5, 2, 
+         2.3561944901923448, 0.0 },
   { -0.45642486439050983, 5, 2, 
-         2.5132741228718345 },
+         2.5132741228718345, 0.0 },
   { -0.43002359842080118, 5, 2, 
-         2.6703537555513241 },
-  { -0.26373799140437987, 5, 2, 
-         2.8274333882308138 },
-  { -0.078919441745546867, 5, 2, 
-         2.9845130209103035 },
+         2.6703537555513241, 0.0 },
+  { -0.26373799140437981, 5, 2, 
+         2.8274333882308138, 0.0 },
+  { -0.078919441745546909, 5, 2, 
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 5, 2, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler009 = 2.5000000000000020e-13;
+const double toler009 = 5.0000000000000039e-13;
 
 // Test data for l=5, m=5.
-// max(|f - f_GSL|): 1.1102230246251565e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2617219728402347e-16
+// max(|f - f_GSL|): 2.3869795029440866e-15 at index 10
+// max(|f - f_GSL| / |f_GSL|): 5.4714279627676651e-15
+// mean(f - f_GSL): 7.7966720691209837e-16
+// variance(f - f_GSL): 3.1913750060540917e-32
+// stddev(f - f_GSL): 1.7864419962747438e-16
 const testcase_sph_legendre<double>
 data010[21] =
 {
   { 0.0000000000000000, 5, 5, 
-         0.0000000000000000 },
-  { -4.3481439097909148e-05, 5, 5, 
-         0.15707963267948966 },
-  { -0.0013078367086431812, 5, 5, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -4.3481439097910151e-05, 5, 5, 
+         0.15707963267948966, 0.0 },
+  { -0.0013078367086431740, 5, 5, 
+         0.31415926535897931, 0.0 },
   { -0.0089510818191922761, 5, 5, 
-         0.47123889803846897 },
-  { -0.032563803777573896, 5, 5, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { -0.032563803777573910, 5, 5, 
+         0.62831853071795862, 0.0 },
   { -0.082047757105021241, 5, 5, 
-         0.78539816339744828 },
-  { -0.16085328164143814, 5, 5, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { -0.16085328164143806, 5, 5, 
+         0.94247779607693793, 0.0 },
   { -0.26064303436645381, 5, 5, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { -0.36113811790820571, 5, 5, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.43625592459446139, 5, 5, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { -0.46413220344085809, 5, 5, 
-         1.5707963267948966 },
-  { -0.43625592459446155, 5, 5, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { -0.43625592459446144, 5, 5, 
+         1.7278759594743862, 0.0 },
   { -0.36113811790820577, 5, 5, 
-         1.8849555921538759 },
-  { -0.26064303436645386, 5, 5, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.26064303436645381, 5, 5, 
+         2.0420352248333655, 0.0 },
   { -0.16085328164143822, 5, 5, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { -0.082047757105021310, 5, 5, 
-         2.3561944901923448 },
-  { -0.032563803777573910, 5, 5, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.032563803777573896, 5, 5, 
+         2.5132741228718345, 0.0 },
   { -0.0089510818191923004, 5, 5, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { -0.0013078367086431812, 5, 5, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { -4.3481439097910151e-05, 5, 5, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 5, 5, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler010 = 2.5000000000000020e-13;
+const double toler010 = 5.0000000000000039e-13;
 
 // Test data for l=10, m=0.
-// max(|f - f_GSL|): 9.9920072216264089e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2266594990531305e-15
+// max(|f - f_GSL|): 9.9920072216264089e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.3176588435352323e-15
+// mean(f - f_GSL): 5.6171998269725183e-18
+// variance(f - f_GSL): 1.6565290295473546e-36
+// stddev(f - f_GSL): 1.2870621700397205e-18
 const testcase_sph_legendre<double>
 data011[21] =
 {
   { 1.2927207364566027, 10, 0, 
-         0.0000000000000000 },
-  { 0.55288895150522555, 10, 0, 
-         0.15707963267948966 },
-  { -0.44874428379711545, 10, 0, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 0.55288895150522011, 10, 0, 
+         0.15707963267948966, 0.0 },
+  { -0.44874428379711329, 10, 0, 
+         0.31415926535897931, 0.0 },
   { -0.25532095827149687, 10, 0, 
-         0.47123889803846897 },
-  { 0.36625249688013961, 10, 0, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.36625249688013994, 10, 0, 
+         0.62831853071795862, 0.0 },
   { 0.14880806329084206, 10, 0, 
-         0.78539816339744828 },
-  { -0.33533356797848757, 10, 0, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { -0.33533356797848740, 10, 0, 
+         0.94247779607693793, 0.0 },
   { -0.080639967662335665, 10, 0, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.32197986450174521, 10, 0, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { 0.025713542103667848, 10, 0, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { -0.31813049373736707, 10, 0, 
-         1.5707963267948966 },
-  { 0.025713542103666699, 10, 0, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { 0.025713542103667528, 10, 0, 
+         1.7278759594743862, 0.0 },
   { 0.32197986450174543, 10, 0, 
-         1.8849555921538759 },
-  { -0.080639967662335096, 10, 0, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.080639967662335416, 10, 0, 
+         2.0420352248333655, 0.0 },
   { -0.33533356797848757, 10, 0, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.14880806329084156, 10, 0, 
-         2.3561944901923448 },
-  { 0.36625249688013994, 10, 0, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { 0.36625249688013961, 10, 0, 
+         2.5132741228718345, 0.0 },
   { -0.25532095827149576, 10, 0, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { -0.44874428379711545, 10, 0, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 0.55288895150522011, 10, 0, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 1.2927207364566027, 10, 0, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
 const double toler011 = 2.5000000000000020e-13;
 
 // Test data for l=10, m=1.
-// max(|f - f_GSL|): 1.4432899320127035e-15
-// max(|f - f_GSL| / |f_GSL|): 4.9708436073954521e-15
+// max(|f - f_GSL|): 6.2172489379008766e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.0515246092567303e-14
+// mean(f - f_GSL): -3.3042351923367698e-17
+// variance(f - f_GSL): 5.7319343582953255e-35
+// stddev(f - f_GSL): 7.5709539414101082e-18
 const testcase_sph_legendre<double>
 data012[21] =
 {
   { 0.0000000000000000, 10, 1, 
-         0.0000000000000000 },
-  { -0.74373723919063894, 10, 1, 
-         0.15707963267948966 },
-  { -0.29035110456209601, 10, 1, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -0.74373723919064050, 10, 1, 
+         0.15707963267948966, 0.0 },
+  { -0.29035110456209651, 10, 1, 
+         0.31415926535897931, 0.0 },
   { 0.42219282075271530, 10, 1, 
-         0.47123889803846897 },
-  { 0.17109256898931269, 10, 1, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.17109256898931161, 10, 1, 
+         0.62831853071795862, 0.0 },
   { -0.35583574648544281, 10, 1, 
-         0.78539816339744828 },
-  { -0.10089212303543979, 10, 1, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { -0.10089212303544023, 10, 1, 
+         0.94247779607693793, 0.0 },
   { 0.32997652649321085, 10, 1, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.047416376890032939, 10, 1, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.31999356750295660, 10, 1, 
-         1.4137166941154069 },
-  { -2.0430664782290766e-16, 10, 1, 
-         1.5707963267948966 },
+         1.4137166941154069, 0.0 },
+  { -2.0430664782290742e-16, 10, 1, 
+         1.5707963267948966, 0.0 },
   { 0.31999356750295660, 10, 1, 
-         1.7278759594743860 },
+         1.7278759594743862, 0.0 },
   { -0.047416376890032544, 10, 1, 
-         1.8849555921538759 },
-  { -0.32997652649321091, 10, 1, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.32997652649321096, 10, 1, 
+         2.0420352248333655, 0.0 },
   { 0.10089212303543935, 10, 1, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.35583574648544292, 10, 1, 
-         2.3561944901923448 },
-  { -0.17109256898931161, 10, 1, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.17109256898931269, 10, 1, 
+         2.5132741228718345, 0.0 },
   { -0.42219282075271569, 10, 1, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 0.29035110456209601, 10, 1, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 0.74373723919064050, 10, 1, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 10, 1, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler012 = 2.5000000000000020e-13;
+const double toler012 = 1.0000000000000008e-12;
 
 // Test data for l=10, m=2.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3968188217108871e-15
+// max(|f - f_GSL|): 3.3306690738754696e-15 at index 2
+// max(|f - f_GSL| / |f_GSL|): 7.9132043938587384e-15
+// mean(f - f_GSL): -3.3504944850294902e-16
+// variance(f - f_GSL): 5.8935519794618406e-33
+// stddev(f - f_GSL): 7.6769472965898634e-17
 const testcase_sph_legendre<double>
 data013[21] =
 {
   { 0.0000000000000000, 10, 2, 
-         0.0000000000000000 },
-  { 0.34571695599980246, 10, 2, 
-         0.15707963267948966 },
-  { 0.62485535978198059, 10, 2, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 0.34571695599980556, 10, 2, 
+         0.15707963267948966, 0.0 },
+  { 0.62485535978198148, 10, 2, 
+         0.31415926535897931, 0.0 },
   { 0.098210039644716252, 10, 2, 
-         0.47123889803846897 },
-  { -0.41494799233049684, 10, 2, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { -0.41494799233049695, 10, 2, 
+         0.62831853071795862, 0.0 },
   { -0.081698973831472732, 10, 2, 
-         0.78539816339744828 },
+         0.78539816339744828, 0.0 },
   { 0.35253132222271277, 10, 2, 
-         0.94247779607693793 },
+         0.94247779607693793, 0.0 },
   { 0.049026298555980979, 10, 2, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { -0.32791246874130792, 10, 2, 
-         1.2566370614359172 },
-  { -0.016196782433946885, 10, 2, 
-         1.4137166941154069 },
-  { 0.32106263400438328, 10, 2, 
-         1.5707963267948966 },
-  { -0.016196782433945761, 10, 2, 
-         1.7278759594743860 },
+         1.2566370614359172, 0.0 },
+  { -0.016196782433946871, 10, 2, 
+         1.4137166941154069, 0.0 },
+  { 0.32106263400438334, 10, 2, 
+         1.5707963267948966, 0.0 },
+  { -0.016196782433946497, 10, 2, 
+         1.7278759594743862, 0.0 },
   { -0.32791246874130803, 10, 2, 
-         1.8849555921538759 },
-  { 0.049026298555980424, 10, 2, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 0.049026298555980730, 10, 2, 
+         2.0420352248333655, 0.0 },
   { 0.35253132222271266, 10, 2, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { -0.081698973831472121, 10, 2, 
-         2.3561944901923448 },
-  { -0.41494799233049695, 10, 2, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.41494799233049684, 10, 2, 
+         2.5132741228718345, 0.0 },
   { 0.098210039644715197, 10, 2, 
-         2.6703537555513241 },
-  { 0.62485535978198059, 10, 2, 
-         2.8274333882308138 },
-  { 0.34571695599980545, 10, 2, 
-         2.9845130209103035 },
+         2.6703537555513241, 0.0 },
+  { 0.62485535978198081, 10, 2, 
+         2.8274333882308138, 0.0 },
+  { 0.34571695599980556, 10, 2, 
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 10, 2, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler013 = 2.5000000000000020e-13;
+const double toler013 = 5.0000000000000039e-13;
 
 // Test data for l=10, m=5.
-// max(|f - f_GSL|): 3.6082248300317588e-16
-// max(|f - f_GSL| / |f_GSL|): 1.6350423942234514e-15
+// max(|f - f_GSL|): 2.8310687127941492e-15 at index 4
+// max(|f - f_GSL| / |f_GSL|): 6.7700052018114004e-15
+// mean(f - f_GSL): 3.8329128231106644e-17
+// variance(f - f_GSL): 7.7128908725222343e-35
+// stddev(f - f_GSL): 8.7823065720357509e-18
 const testcase_sph_legendre<double>
 data014[21] =
 {
   { 0.0000000000000000, 10, 5, 
-         0.0000000000000000 },
-  { -0.0030300124052750196, 10, 5, 
-         0.15707963267948966 },
-  { -0.070348585248056802, 10, 5, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -0.0030300124052750873, 10, 5, 
+         0.15707963267948966, 0.0 },
+  { -0.070348585248056511, 10, 5, 
+         0.31415926535897931, 0.0 },
   { -0.30055029290703639, 10, 5, 
-         0.47123889803846897 },
-  { -0.49987818144009155, 10, 5, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { -0.49987818144009138, 10, 5, 
+         0.62831853071795862, 0.0 },
   { -0.28108771757150108, 10, 5, 
-         0.78539816339744828 },
-  { 0.22068081187249292, 10, 5, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.22068081187249255, 10, 5, 
+         0.94247779607693793, 0.0 },
   { 0.33689502212592121, 10, 5, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { -0.086095515520764110, 10, 5, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.33935827318511558, 10, 5, 
-         1.4137166941154069 },
-  { -1.9213014340664578e-16, 10, 5, 
-         1.5707963267948966 },
-  { 0.33935827318511552, 10, 5, 
-         1.7278759594743860 },
+         1.4137166941154069, 0.0 },
+  { -1.9213014340664546e-16, 10, 5, 
+         1.5707963267948966, 0.0 },
+  { 0.33935827318511558, 10, 5, 
+         1.7278759594743862, 0.0 },
   { 0.086095515520764512, 10, 5, 
-         1.8849555921538759 },
-  { -0.33689502212592087, 10, 5, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.33689502212592104, 10, 5, 
+         2.0420352248333655, 0.0 },
   { -0.22068081187249344, 10, 5, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.28108771757150064, 10, 5, 
-         2.3561944901923448 },
-  { 0.49987818144009138, 10, 5, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { 0.49987818144009155, 10, 5, 
+         2.5132741228718345, 0.0 },
   { 0.30055029290703672, 10, 5, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 0.070348585248056802, 10, 5, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 0.0030300124052750873, 10, 5, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 10, 5, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler014 = 2.5000000000000020e-13;
+const double toler014 = 5.0000000000000039e-13;
 
 // Test data for l=10, m=10.
-// max(|f - f_GSL|): 9.9920072216264089e-16
-// max(|f - f_GSL| / |f_GSL|): 1.9163828344752537e-15
+// max(|f - f_GSL|): 2.8865798640254070e-15 at index 10
+// max(|f - f_GSL| / |f_GSL|): 5.5362170773729674e-15
+// mean(f - f_GSL): -6.6245801611758948e-16
+// variance(f - f_GSL): 2.3039657713718755e-32
+// stddev(f - f_GSL): 1.5178820017945649e-16
 const testcase_sph_legendre<double>
 data015[21] =
 {
   { 0.0000000000000000, 10, 10, 
-         0.0000000000000000 },
-  { 4.7624282733343473e-09, 10, 10, 
-         0.15707963267948966 },
-  { 4.3085156534549772e-06, 10, 10, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 4.7624282733345673e-09, 10, 10, 
+         0.15707963267948966, 0.0 },
+  { 4.3085156534549315e-06, 10, 10, 
+         0.31415926535897931, 0.0 },
   { 0.00020182347649472387, 10, 10, 
-         0.47123889803846897 },
-  { 0.0026711045506511684, 10, 10, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.0026711045506511706, 10, 10, 
+         0.62831853071795862, 0.0 },
   { 0.016957196623256909, 10, 10, 
-         0.78539816339744828 },
-  { 0.065174916004990341, 10, 10, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.065174916004990271, 10, 10, 
+         0.94247779607693793, 0.0 },
   { 0.17112476903017845, 10, 10, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.32852414199733554, 10, 10, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { 0.47940582314838287, 10, 10, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { 0.54263029194422152, 10, 10, 
-         1.5707963267948966 },
-  { 0.47940582314838309, 10, 10, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { 0.47940582314838293, 10, 10, 
+         1.7278759594743862, 0.0 },
   { 0.32852414199733571, 10, 10, 
-         1.8849555921538759 },
-  { 0.17112476903017856, 10, 10, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 0.17112476903017851, 10, 10, 
+         2.0420352248333655, 0.0 },
   { 0.065174916004990410, 10, 10, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.016957196623256943, 10, 10, 
-         2.3561944901923448 },
-  { 0.0026711045506511706, 10, 10, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { 0.0026711045506511684, 10, 10, 
+         2.5132741228718345, 0.0 },
   { 0.00020182347649472493, 10, 10, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 4.3085156534549772e-06, 10, 10, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 4.7624282733345673e-09, 10, 10, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 10, 10, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler015 = 2.5000000000000020e-13;
+const double toler015 = 5.0000000000000039e-13;
 
 // Test data for l=20, m=0.
-// max(|f - f_GSL|): 1.2212453270876722e-15
-// max(|f - f_GSL| / |f_GSL|): 2.1900476331757668e-15
+// max(|f - f_GSL|): 1.2212453270876722e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 2.0731910827878347e-15
+// mean(f - f_GSL): 1.1102230246251565e-16
+// variance(f - f_GSL): 6.4711246131411122e-34
+// stddev(f - f_GSL): 2.5438405243138007e-17
 const testcase_sph_legendre<double>
 data016[21] =
 {
   { 1.8062879984608917, 20, 0, 
-         0.0000000000000000 },
-  { -0.58906549291415933, 20, 0, 
-         0.15707963267948966 },
-  { 0.45624611402342408, 20, 0, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -0.58906549291416732, 20, 0, 
+         0.15707963267948966, 0.0 },
+  { 0.45624611402342063, 20, 0, 
+         0.31415926535897931, 0.0 },
   { -0.39955402700466724, 20, 0, 
-         0.47123889803846897 },
-  { 0.36818552901640772, 20, 0, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.36818552901640805, 20, 0, 
+         0.62831853071795862, 0.0 },
   { -0.34873131330857743, 20, 0, 
-         0.78539816339744828 },
-  { 0.33600882829186507, 20, 0, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.33600882829186468, 20, 0, 
+         0.94247779607693793, 0.0 },
   { -0.32759286308122931, 20, 0, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.32222458068091325, 20, 0, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.31922731037135965, 20, 0, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { 0.31826262039531755, 20, 0, 
-         1.5707963267948966 },
-  { -0.31922731037135987, 20, 0, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { -0.31922731037135971, 20, 0, 
+         1.7278759594743862, 0.0 },
   { 0.32222458068091342, 20, 0, 
-         1.8849555921538759 },
-  { -0.32759286308122942, 20, 0, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.32759286308122926, 20, 0, 
+         2.0420352248333655, 0.0 },
   { 0.33600882829186518, 20, 0, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { -0.34873131330857782, 20, 0, 
-         2.3561944901923448 },
-  { 0.36818552901640805, 20, 0, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { 0.36818552901640772, 20, 0, 
+         2.5132741228718345, 0.0 },
   { -0.39955402700466824, 20, 0, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 0.45624611402342408, 20, 0, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { -0.58906549291416732, 20, 0, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 1.8062879984608917, 20, 0, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
 const double toler016 = 2.5000000000000020e-13;
 
 // Test data for l=20, m=1.
-// max(|f - f_GSL|): 2.8310687127941492e-15
-// max(|f - f_GSL| / |f_GSL|): 9.0837292708194213e-15
+// max(|f - f_GSL|): 6.2727600891321345e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.3664592043119372e-14
+// mean(f - f_GSL): 2.8416422654096149e-17
+// variance(f - f_GSL): 4.2393386513952014e-35
+// stddev(f - f_GSL): 6.5110203896126770e-18
 const testcase_sph_legendre<double>
 data017[21] =
 {
   { 0.0000000000000000, 20, 1, 
-         0.0000000000000000 },
-  { -0.45905213045060256, 20, 1, 
-         0.15707963267948966 },
-  { 0.31166370423309253, 20, 1, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -0.45905213045059046, 20, 1, 
+         0.15707963267948966, 0.0 },
+  { 0.31166370423309414, 20, 1, 
+         0.31415926535897931, 0.0 },
   { -0.23278757741246778, 20, 1, 
-         0.47123889803846897 },
-  { 0.17937240823504172, 20, 1, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.17937240823503983, 20, 1, 
+         0.62831853071795862, 0.0 },
   { -0.13857299972299839, 20, 1, 
-         0.78539816339744828 },
-  { 0.10495324841927722, 20, 1, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.10495324841927815, 20, 1, 
+         0.94247779607693793, 0.0 },
   { -0.075707774352163665, 20, 1, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.049168697683476224, 20, 1, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.024216050551253303, 20, 1, 
-         1.4137166941154069 },
-  { 3.9938443510694349e-16, 20, 1, 
-         1.5707963267948966 },
-  { 0.024216050551250919, 20, 1, 
-         1.7278759594743860 },
+         1.4137166941154069, 0.0 },
+  { 3.9938443510694310e-16, 20, 1, 
+         1.5707963267948966, 0.0 },
+  { 0.024216050551252380, 20, 1, 
+         1.7278759594743862, 0.0 },
   { -0.049168697683475482, 20, 1, 
-         1.8849555921538759 },
-  { 0.075707774352163068, 20, 1, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 0.075707774352163346, 20, 1, 
+         2.0420352248333655, 0.0 },
   { -0.10495324841927638, 20, 1, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.13857299972299741, 20, 1, 
-         2.3561944901923448 },
-  { -0.17937240823503983, 20, 1, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.17937240823504172, 20, 1, 
+         2.5132741228718345, 0.0 },
   { 0.23278757741246703, 20, 1, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { -0.31166370423309253, 20, 1, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 0.45905213045059046, 20, 1, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 20, 1, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler017 = 5.0000000000000039e-13;
+const double toler017 = 1.0000000000000008e-12;
 
 // Test data for l=20, m=2.
-// max(|f - f_GSL|): 2.3314683517128287e-15
-// max(|f - f_GSL| / |f_GSL|): 2.6675898738403374e-15
+// max(|f - f_GSL|): 3.2196467714129540e-15 at index 2
+// max(|f - f_GSL| / |f_GSL|): 7.1072009465107655e-15
+// mean(f - f_GSL): 9.2518585385429716e-17
+// variance(f - f_GSL): 4.4938365369035506e-34
+// stddev(f - f_GSL): 2.1198671035948340e-17
 const testcase_sph_legendre<double>
 data018[21] =
 {
   { 0.0000000000000000, 20, 2, 
-         0.0000000000000000 },
-  { 0.87399805141574394, 20, 2, 
-         0.15707963267948966 },
-  { -0.55116854080895061, 20, 2, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 0.87399805141574205, 20, 2, 
+         0.15707963267948966, 0.0 },
+  { -0.55116854080894906, 20, 2, 
+         0.31415926535897931, 0.0 },
   { 0.44520137308557572, 20, 2, 
-         0.47123889803846897 },
-  { -0.39321637877908228, 20, 2, 
-         0.62831853071795862 },
-  { 0.36312025711350937, 20, 2, 
-         0.78539816339744828 },
-  { -0.34427103004873116, 20, 2, 
-         0.94247779607693793 },
+         0.47123889803846897, 0.0 },
+  { -0.39321637877908278, 20, 2, 
+         0.62831853071795862, 0.0 },
+  { 0.36312025711350954, 20, 2, 
+         0.78539816339744828, 0.0 },
+  { -0.34427103004873089, 20, 2, 
+         0.94247779607693793, 0.0 },
   { 0.33214917638387642, 20, 2, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { -0.32455734448839091, 20, 2, 
-         1.2566370614359172 },
-  { 0.32036529628513238, 20, 2, 
-         1.4137166941154069 },
+         1.2566370614359172, 0.0 },
+  { 0.32036529628513255, 20, 2, 
+         1.4137166941154069, 0.0 },
   { -0.31902310563819986, 20, 2, 
-         1.5707963267948966 },
-  { 0.32036529628513266, 20, 2, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { 0.32036529628513261, 20, 2, 
+         1.7278759594743862, 0.0 },
   { -0.32455734448839102, 20, 2, 
-         1.8849555921538759 },
+         1.8849555921538759, 0.0 },
   { 0.33214917638387659, 20, 2, 
-         2.0420352248333655 },
+         2.0420352248333655, 0.0 },
   { -0.34427103004873105, 20, 2, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.36312025711350981, 20, 2, 
-         2.3561944901923448 },
-  { -0.39321637877908278, 20, 2, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.39321637877908228, 20, 2, 
+         2.5132741228718345, 0.0 },
   { 0.44520137308557650, 20, 2, 
-         2.6703537555513241 },
-  { -0.55116854080895061, 20, 2, 
-         2.8274333882308138 },
-  { 0.87399805141574527, 20, 2, 
-         2.9845130209103035 },
+         2.6703537555513241, 0.0 },
+  { -0.55116854080895039, 20, 2, 
+         2.8274333882308138, 0.0 },
+  { 0.87399805141574205, 20, 2, 
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 20, 2, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler018 = 2.5000000000000020e-13;
+const double toler018 = 5.0000000000000039e-13;
 
 // Test data for l=20, m=5.
-// max(|f - f_GSL|): 3.5388358909926865e-16
-// max(|f - f_GSL| / |f_GSL|): 1.2458491381272207e-14
+// max(|f - f_GSL|): 3.7747582837255322e-15 at index 2
+// max(|f - f_GSL| / |f_GSL|): 2.9846361325102863e-14
+// mean(f - f_GSL): -1.9825411154020758e-17
+// variance(f - f_GSL): 2.0634963689863462e-35
+// stddev(f - f_GSL): 4.5425723648460969e-18
 const testcase_sph_legendre<double>
 data019[21] =
 {
   { 0.0000000000000000, 20, 5, 
-         0.0000000000000000 },
-  { -0.10024848623504863, 20, 5, 
-         0.15707963267948966 },
-  { -0.68115361075940484, 20, 5, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -0.10024848623505046, 20, 5, 
+         0.15707963267948966, 0.0 },
+  { -0.68115361075940650, 20, 5, 
+         0.31415926535897931, 0.0 },
   { 0.31774532551156298, 20, 5, 
-         0.47123889803846897 },
-  { -0.16011868165390544, 20, 5, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { -0.16011868165390658, 20, 5, 
+         0.62831853071795862, 0.0 },
   { 0.085844143304115578, 20, 5, 
-         0.78539816339744828 },
-  { -0.047467540840864568, 20, 5, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { -0.047467540840863798, 20, 5, 
+         0.94247779607693793, 0.0 },
   { 0.026283575189471796, 20, 5, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { -0.013891104052597688, 20, 5, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { 0.0059873308239496957, 20, 5, 
-         1.4137166941154069 },
-  { 3.9355286582083095e-16, 20, 5, 
-         1.5707963267948966 },
-  { -0.0059873308239519014, 20, 5, 
-         1.7278759594743860 },
+         1.4137166941154069, 0.0 },
+  { 3.9355286582083051e-16, 20, 5, 
+         1.5707963267948966, 0.0 },
+  { -0.0059873308239503324, 20, 5, 
+         1.7278759594743862, 0.0 },
   { 0.013891104052598547, 20, 5, 
-         1.8849555921538759 },
-  { -0.026283575189472864, 20, 5, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.026283575189472153, 20, 5, 
+         2.0420352248333655, 0.0 },
   { 0.047467540840865928, 20, 5, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { -0.085844143304117007, 20, 5, 
-         2.3561944901923448 },
-  { 0.16011868165390658, 20, 5, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { 0.16011868165390544, 20, 5, 
+         2.5132741228718345, 0.0 },
   { -0.31774532551156381, 20, 5, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 0.68115361075940484, 20, 5, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 0.10024848623505046, 20, 5, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 20, 5, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler019 = 1.0000000000000008e-12;
+const double toler019 = 2.5000000000000015e-12;
 
 // Test data for l=20, m=10.
-// max(|f - f_GSL|): 1.6653345369377348e-15
-// max(|f - f_GSL| / |f_GSL|): 2.0744116940226714e-14
+// max(|f - f_GSL|): 2.3314683517128287e-15 at index 4
+// max(|f - f_GSL| / |f_GSL|): 1.0575432165608034e-14
+// mean(f - f_GSL): -1.4002922808555493e-16
+// variance(f - f_GSL): 1.0294296977074090e-33
+// stddev(f - f_GSL): 3.2084726860414586e-17
 const testcase_sph_legendre<double>
 data020[21] =
 {
   { 0.0000000000000000, 20, 10, 
-         0.0000000000000000 },
-  { 3.0595797603706485e-05, 20, 10, 
-         0.15707963267948966 },
-  { 0.015924453916397002, 20, 10, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 3.0595797603707888e-05, 20, 10, 
+         0.15707963267948966, 0.0 },
+  { 0.015924453916396863, 20, 10, 
+         0.31415926535897931, 0.0 },
   { 0.26588079118745744, 20, 10, 
-         0.47123889803846897 },
-  { 0.54045081420686869, 20, 10, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.54045081420686736, 20, 10, 
+         0.62831853071795862, 0.0 },
   { -0.28215279394285531, 20, 10, 
-         0.78539816339744828 },
-  { 0.0085297337582245884, 20, 10, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.0085297337582239223, 20, 10, 
+         0.94247779607693793, 0.0 },
   { 0.16930127953533738, 20, 10, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { -0.27215134048018325, 20, 10, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { 0.32456597088029526, 20, 10, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { -0.34057893241353715, 20, 10, 
-         1.5707963267948966 },
-  { 0.32456597088029449, 20, 10, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { 0.32456597088029493, 20, 10, 
+         1.7278759594743862, 0.0 },
   { -0.27215134048018291, 20, 10, 
-         1.8849555921538759 },
-  { 0.16930127953533675, 20, 10, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 0.16930127953533702, 20, 10, 
+         2.0420352248333655, 0.0 },
   { 0.0085297337582257438, 20, 10, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { -0.28215279394285619, 20, 10, 
-         2.3561944901923448 },
-  { 0.54045081420686736, 20, 10, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { 0.54045081420686869, 20, 10, 
+         2.5132741228718345, 0.0 },
   { 0.26588079118745828, 20, 10, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 0.015924453916397002, 20, 10, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 3.0595797603707888e-05, 20, 10, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 20, 10, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler020 = 2.5000000000000015e-12;
+const double toler020 = 1.0000000000000008e-12;
 
 // Test data for l=20, m=20.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 8.6795105199201385e-16
+// max(|f - f_GSL|): 2.6645352591003757e-15 at index 10
+// max(|f - f_GSL| / |f_GSL|): 4.5133454703584717e-15
+// mean(f - f_GSL): -4.3857545834694365e-16
+// variance(f - f_GSL): 1.0098292714872165e-32
+// stddev(f - f_GSL): 1.0049026179124106e-16
 const testcase_sph_legendre<double>
 data021[21] =
 {
   { 0.0000000000000000, 20, 20, 
-         0.0000000000000000 },
-  { 4.9264471419246231e-17, 20, 20, 
-         0.15707963267948966 },
-  { 4.0321091681531780e-11, 20, 20, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 4.9264471419250786e-17, 20, 20, 
+         0.15707963267948966, 0.0 },
+  { 4.0321091681530921e-11, 20, 20, 
+         0.31415926535897931, 0.0 },
   { 8.8474944184471664e-08, 20, 20, 
-         0.47123889803846897 },
-  { 1.5497395129387764e-05, 20, 20, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 1.5497395129387791e-05, 20, 20, 
+         0.62831853071795862, 0.0 },
   { 0.00062457564282984495, 20, 20, 
-         0.78539816339744828 },
-  { 0.0092265192458967568, 20, 20, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.0092265192458967308, 20, 20, 
+         0.94247779607693793, 0.0 },
   { 0.063606673236323297, 20, 20, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.23442909509776316, 20, 20, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { 0.49921030481087009, 20, 20, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { 0.63956545825776223, 20, 20, 
-         1.5707963267948966 },
-  { 0.49921030481087064, 20, 20, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { 0.49921030481087025, 20, 20, 
+         1.7278759594743862, 0.0 },
   { 0.23442909509776336, 20, 20, 
-         1.8849555921538759 },
-  { 0.063606673236323380, 20, 20, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 0.063606673236323324, 20, 20, 
+         2.0420352248333655, 0.0 },
   { 0.0092265192458967742, 20, 20, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.00062457564282984766, 20, 20, 
-         2.3561944901923448 },
-  { 1.5497395129387791e-05, 20, 20, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { 1.5497395129387764e-05, 20, 20, 
+         2.5132741228718345, 0.0 },
   { 8.8474944184472617e-08, 20, 20, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 4.0321091681531780e-11, 20, 20, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 4.9264471419250786e-17, 20, 20, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 20, 20, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
 const double toler021 = 2.5000000000000020e-13;
 
 // Test data for l=50, m=0.
-// max(|f - f_GSL|): 4.8849813083506888e-15
-// max(|f - f_GSL| / |f_GSL|): 9.2046020313085697e-15
+// max(|f - f_GSL|): 4.8849813083506888e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 9.1896305557688689e-15
+// mean(f - f_GSL): -4.0592529337857286e-16
+// variance(f - f_GSL): 8.6507055497352237e-33
+// stddev(f - f_GSL): 9.3009169170223341e-17
 const testcase_sph_legendre<double>
 data022[21] =
 {
   { 2.8350175706934717, 50, 0, 
-         0.0000000000000000 },
-  { 0.53157537495174900, 50, 0, 
-         0.15707963267948966 },
-  { -0.46056183476301255, 50, 0, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 0.53157537495172758, 50, 0, 
+         0.15707963267948966, 0.0 },
+  { -0.46056183476300561, 50, 0, 
+         0.31415926535897931, 0.0 },
   { -0.24876032079677909, 50, 0, 
-         0.47123889803846897 },
-  { 0.36926172901532522, 50, 0, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.36926172901532667, 50, 0, 
+         0.62831853071795862, 0.0 },
   { 0.14571730283563575, 50, 0, 
-         0.78539816339744828 },
-  { -0.33636199170850806, 50, 0, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { -0.33636199170850750, 50, 0, 
+         0.94247779607693793, 0.0 },
   { -0.079132716267091507, 50, 0, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.32232921941301451, 50, 0, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { 0.025253991969481544, 50, 0, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { -0.31830208724152359, 50, 0, 
-         1.5707963267948966 },
-  { 0.025253991969476332, 50, 0, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { 0.025253991969479882, 50, 0, 
+         1.7278759594743862, 0.0 },
   { 0.32232921941301479, 50, 0, 
-         1.8849555921538759 },
-  { -0.079132716267088510, 50, 0, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.079132716267090064, 50, 0, 
+         2.0420352248333655, 0.0 },
   { -0.33636199170850883, 50, 0, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.14571730283563347, 50, 0, 
-         2.3561944901923448 },
-  { 0.36926172901532667, 50, 0, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { 0.36926172901532522, 50, 0, 
+         2.5132741228718345, 0.0 },
   { -0.24876032079677354, 50, 0, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { -0.46056183476301255, 50, 0, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 0.53157537495172758, 50, 0, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 2.8350175706934717, 50, 0, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
 const double toler022 = 5.0000000000000039e-13;
 
 // Test data for l=50, m=1.
-// max(|f - f_GSL|): 4.2743586448068527e-15
-// max(|f - f_GSL| / |f_GSL|): 1.3104848798660735e-14
+// max(|f - f_GSL|): 7.8825834748386114e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.6168319946399610e-14
+// mean(f - f_GSL): -8.8223079635391627e-17
+// variance(f - f_GSL): 4.0862386846851427e-34
+// stddev(f - f_GSL): 2.0214447023564960e-17
 const testcase_sph_legendre<double>
 data023[21] =
 {
   { 0.0000000000000000, 50, 1, 
-         0.0000000000000000 },
-  { -0.63751752155226260, 50, 1, 
-         0.15707963267948966 },
-  { -0.32616619317604606, 50, 1, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -0.63751752155228247, 50, 1, 
+         0.15707963267948966, 0.0 },
+  { -0.32616619317605133, 50, 1, 
+         0.31415926535897931, 0.0 },
   { 0.40649930826162850, 50, 1, 
-         0.47123889803846897 },
-  { 0.18473991408344057, 50, 1, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.18473991408343635, 50, 1, 
+         0.62831853071795862, 0.0 },
   { -0.35083930302013117, 50, 1, 
-         0.78539816339744828 },
-  { -0.10755382110947125, 50, 1, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { -0.10755382110947342, 50, 1, 
+         0.94247779607693793, 0.0 },
   { 0.32822568316499900, 50, 1, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.050286056609797389, 50, 1, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.31935368562159644, 50, 1, 
-         1.4137166941154069 },
-  { -9.8421602686195941e-16, 50, 1, 
-         1.5707963267948966 },
-  { 0.31935368562159716, 50, 1, 
-         1.7278759594743860 },
+         1.4137166941154069, 0.0 },
+  { -9.8421602686195843e-16, 50, 1, 
+         1.5707963267948966, 0.0 },
+  { 0.31935368562159649, 50, 1, 
+         1.7278759594743862, 0.0 },
   { -0.050286056609795446, 50, 1, 
-         1.8849555921538759 },
-  { -0.32822568316499912, 50, 1, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.32822568316499923, 50, 1, 
+         2.0420352248333655, 0.0 },
   { 0.10755382110946902, 50, 1, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.35083930302013205, 50, 1, 
-         2.3561944901923448 },
-  { -0.18473991408343635, 50, 1, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.18473991408344057, 50, 1, 
+         2.5132741228718345, 0.0 },
   { -0.40649930826163011, 50, 1, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 0.32616619317604606, 50, 1, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 0.63751752155228247, 50, 1, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 50, 1, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
 const double toler023 = 1.0000000000000008e-12;
 
 // Test data for l=50, m=2.
-// max(|f - f_GSL|): 7.5495165674510645e-15
-// max(|f - f_GSL| / |f_GSL|): 2.0277903864891892e-14
+// max(|f - f_GSL|): 3.7747582837255322e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.3049193367556654e-14
+// mean(f - f_GSL): 2.4038311024250043e-16
+// variance(f - f_GSL): 3.0336620837175507e-33
+// stddev(f - f_GSL): 5.5078689923758629e-17
 const testcase_sph_legendre<double>
 data024[21] =
 {
   { 0.0000000000000000, 50, 2, 
-         0.0000000000000000 },
-  { -0.37230261163838724, 50, 2, 
-         0.15707963267948966 },
-  { 0.50051599680316194, 50, 2, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -0.37230261163836259, 50, 2, 
+         0.15707963267948966, 0.0 },
+  { 0.50051599680315517, 50, 2, 
+         0.31415926535897931, 0.0 },
   { 0.21724795180329495, 50, 2, 
-         0.47123889803846897 },
-  { -0.37948127307610924, 50, 2, 
-         0.62831853071795862 },
-  { -0.13187372121003396, 50, 2, 
-         0.78539816339744828 },
-  { 0.33959009162400228, 50, 2, 
-         0.94247779607693793 },
+         0.47123889803846897, 0.0 },
+  { -0.37948127307611107, 50, 2, 
+         0.62831853071795862, 0.0 },
+  { -0.13187372121003413, 50, 2, 
+         0.78539816339744828, 0.0 },
+  { 0.33959009162400128, 50, 2, 
+         0.94247779607693793, 0.0 },
   { 0.072537503112489563, 50, 2, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { -0.32310306941855266, 50, 2, 
-         1.2566370614359172 },
-  { -0.023259822816436588, 50, 2, 
-         1.4137166941154069 },
+         1.2566370614359172, 0.0 },
+  { -0.023259822816436636, 50, 2, 
+         1.4137166941154069, 0.0 },
   { 0.31842698506357275, 50, 2, 
-         1.5707963267948966 },
-  { -0.023259822816431196, 50, 2, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { -0.023259822816434638, 50, 2, 
+         1.7278759594743862, 0.0 },
   { -0.32310306941855316, 50, 2, 
-         1.8849555921538759 },
-  { 0.072537503112487453, 50, 2, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 0.072537503112488411, 50, 2, 
+         2.0420352248333655, 0.0 },
   { 0.33959009162400267, 50, 2, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { -0.13187372121003124, 50, 2, 
-         2.3561944901923448 },
-  { -0.37948127307611107, 50, 2, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.37948127307610924, 50, 2, 
+         2.5132741228718345, 0.0 },
   { 0.21724795180329090, 50, 2, 
-         2.6703537555513241 },
-  { 0.50051599680316194, 50, 2, 
-         2.8274333882308138 },
-  { -0.37230261163837081, 50, 2, 
-         2.9845130209103035 },
+         2.6703537555513241, 0.0 },
+  { 0.50051599680316095, 50, 2, 
+         2.8274333882308138, 0.0 },
+  { -0.37230261163836259, 50, 2, 
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 50, 2, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler024 = 2.5000000000000015e-12;
+const double toler024 = 1.0000000000000008e-12;
 
 // Test data for l=50, m=5.
-// max(|f - f_GSL|): 4.3021142204224816e-16
-// max(|f - f_GSL| / |f_GSL|): 8.9548506383410822e-15
+// max(|f - f_GSL|): 6.4254157550180935e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 8.3058098108785765e-14
+// mean(f - f_GSL): 3.9419525844577751e-16
+// variance(f - f_GSL): 8.1579698435094999e-33
+// stddev(f - f_GSL): 9.0321480521022794e-17
 const testcase_sph_legendre<double>
 data025[21] =
 {
   { 0.0000000000000000, 50, 5, 
-         0.0000000000000000 },
-  { -0.57750385903193124, 50, 5, 
-         0.15707963267948966 },
-  { 0.077360497065588632, 50, 5, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -0.57750385903191603, 50, 5, 
+         0.15707963267948966, 0.0 },
+  { 0.077360497065570286, 50, 5, 
+         0.31415926535897931, 0.0 },
   { 0.47707267400540226, 50, 5, 
-         0.47123889803846897 },
-  { 0.055370615126630517, 50, 5, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.055370615126626811, 50, 5, 
+         0.62831853071795862, 0.0 },
   { -0.37629451847202833, 50, 5, 
-         0.78539816339744828 },
-  { -0.048042277801960784, 50, 5, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { -0.048042277801963115, 50, 5, 
+         0.94247779607693793, 0.0 },
   { 0.33619379362228718, 50, 5, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.025265227185718764, 50, 5, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.32083679430964535, 50, 5, 
-         1.4137166941154069 },
-  { -9.8189201019751884e-16, 50, 5, 
-         1.5707963267948966 },
-  { 0.32083679430964579, 50, 5, 
-         1.7278759594743860 },
+         1.4137166941154069, 0.0 },
+  { -9.8189201019751726e-16, 50, 5, 
+         1.5707963267948966, 0.0 },
+  { 0.32083679430964546, 50, 5, 
+         1.7278759594743862, 0.0 },
   { -0.025265227185716790, 50, 5, 
-         1.8849555921538759 },
-  { -0.33619379362228752, 50, 5, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.33619379362228730, 50, 5, 
+         2.0420352248333655, 0.0 },
   { 0.048042277801958064, 50, 5, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.37629451847202872, 50, 5, 
-         2.3561944901923448 },
-  { -0.055370615126626811, 50, 5, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.055370615126630517, 50, 5, 
+         2.5132741228718345, 0.0 },
   { -0.47707267400540176, 50, 5, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { -0.077360497065588632, 50, 5, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 0.57750385903191603, 50, 5, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 50, 5, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler025 = 5.0000000000000039e-13;
+const double toler025 = 5.0000000000000029e-12;
 
 // Test data for l=50, m=10.
-// max(|f - f_GSL|): 1.3322676295501878e-15
-// max(|f - f_GSL| / |f_GSL|): 6.0812430149180488e-15
+// max(|f - f_GSL|): 4.2188474935755949e-15 at index 17
+// max(|f - f_GSL| / |f_GSL|): 8.5566462271658482e-15
+// mean(f - f_GSL): 2.1378401694418937e-16
+// variance(f - f_GSL): 2.3994393097916561e-33
+// stddev(f - f_GSL): 4.8984072000923484e-17
 const testcase_sph_legendre<double>
 data026[21] =
 {
   { 0.0000000000000000, 50, 10, 
-         0.0000000000000000 },
-  { 0.15606941844800776, 50, 10, 
-         0.15707963267948966 },
-  { -0.53748868836814501, 50, 10, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 0.15606941844801256, 50, 10, 
+         0.15707963267948966, 0.0 },
+  { -0.53748868836814168, 50, 10, 
+         0.31415926535897931, 0.0 },
   { -0.49304919025183969, 50, 10, 
-         0.47123889803846897 },
-  { -0.26267582750428364, 50, 10, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { -0.26267582750427920, 50, 10, 
+         0.62831853071795862, 0.0 },
   { 0.22058983666314153, 50, 10, 
-         0.78539816339744828 },
-  { 0.32936725160671754, 50, 10, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.32936725160671843, 50, 10, 
+         0.94247779607693793, 0.0 },
   { -0.092053311559447959, 50, 10, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { -0.32542913495935522, 50, 10, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { 0.025673223789103351, 50, 10, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { 0.32150019350255743, 50, 10, 
-         1.5707963267948966 },
-  { 0.025673223789108836, 50, 10, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { 0.025673223789105259, 50, 10, 
+         1.7278759594743862, 0.0 },
   { -0.32542913495935510, 50, 10, 
-         1.8849555921538759 },
-  { -0.092053311559449819, 50, 10, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.092053311559449028, 50, 10, 
+         2.0420352248333655, 0.0 },
   { 0.32936725160671687, 50, 10, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.22058983666314380, 50, 10, 
-         2.3561944901923448 },
-  { -0.26267582750427920, 50, 10, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.26267582750428364, 50, 10, 
+         2.5132741228718345, 0.0 },
   { -0.49304919025184135, 50, 10, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { -0.53748868836814501, 50, 10, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 0.15606941844801256, 50, 10, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 50, 10, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
 const double toler026 = 5.0000000000000039e-13;
 
 // Test data for l=50, m=20.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 6.0930911637998029e-15
+// max(|f - f_GSL|): 5.3290705182007514e-15 at index 17
+// max(|f - f_GSL| / |f_GSL|): 8.3091988651062939e-15
+// mean(f - f_GSL): -6.3705667112909982e-16
+// variance(f - f_GSL): 2.1306663117079729e-32
+// stddev(f - f_GSL): 1.4596802087128444e-16
 const testcase_sph_legendre<double>
 data027[21] =
 {
   { 0.0000000000000000, 50, 20, 
-         0.0000000000000000 },
-  { 3.0409598712833246e-07, 50, 20, 
-         0.15707963267948966 },
-  { 0.030940518122882274, 50, 20, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 3.0409598712835887e-07, 50, 20, 
+         0.15707963267948966, 0.0 },
+  { 0.030940518122881844, 50, 20, 
+         0.31415926535897931, 0.0 },
   { 0.64134588721659802, 50, 20, 
-         0.47123889803846897 },
-  { 0.29895244392136405, 50, 20, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.29895244392136594, 50, 20, 
+         0.62831853071795862, 0.0 },
   { 0.25309324781873871, 50, 20, 
-         0.78539816339744828 },
-  { 0.34368634714931717, 50, 20, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.34368634714931567, 50, 20, 
+         0.94247779607693793, 0.0 },
   { 0.33996764360663945, 50, 20, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.12866267745104024, 50, 20, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.18201114398922874, 50, 20, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { -0.33216683431510857, 50, 20, 
-         1.5707963267948966 },
-  { -0.18201114398923302, 50, 20, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { -0.18201114398923010, 50, 20, 
+         1.7278759594743862, 0.0 },
   { 0.12866267745103857, 50, 20, 
-         1.8849555921538759 },
+         1.8849555921538759, 0.0 },
   { 0.33996764360663895, 50, 20, 
-         2.0420352248333655 },
+         2.0420352248333655, 0.0 },
   { 0.34368634714931812, 50, 20, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.25309324781874126, 50, 20, 
-         2.3561944901923448 },
-  { 0.29895244392136594, 50, 20, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { 0.29895244392136405, 50, 20, 
+         2.5132741228718345, 0.0 },
   { 0.64134588721659869, 50, 20, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 0.030940518122882274, 50, 20, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 3.0409598712835887e-07, 50, 20, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 50, 20, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
 const double toler027 = 5.0000000000000039e-13;
 
 // Test data for l=50, m=50.
-// max(|f - f_GSL|): 1.2323475573339238e-14
-// max(|f - f_GSL| / |f_GSL|): 1.6099735616249234e-14
+// max(|f - f_GSL|): 8.8817841970012523e-16 at index 10
+// max(|f - f_GSL| / |f_GSL|): 1.6947090122367552e-15
+// mean(f - f_GSL): 8.9876810627650302e-17
+// variance(f - f_GSL): 4.2408665715142198e-34
+// stddev(f - f_GSL): 2.0593364396120950e-17
 const testcase_sph_legendre<double>
 data028[21] =
 {
   { 0.0000000000000000, 50, 50, 
-         0.0000000000000000 },
-  { 4.1649039898151844e-41, 50, 50, 
-         0.15707963267948966 },
-  { 2.5240684647724192e-26, 50, 50, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 4.1649039898161316e-41, 50, 50, 
+         0.15707963267948966, 0.0 },
+  { 2.5240684647722935e-26, 50, 50, 
+         0.31415926535897931, 0.0 },
   { 5.6927376423967334e-18, 50, 50, 
-         0.47123889803846897 },
-  { 2.3116239814797057e-12, 50, 50, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 2.3116239814797222e-12, 50, 50, 
+         0.62831853071795862, 0.0 },
   { 2.3835981241325056e-08, 50, 50, 
-         0.78539816339744828 },
-  { 1.9992410287270356e-05, 50, 50, 
-         0.94247779607693793 },
-  { 0.0024947505670829834, 50, 50, 
-         1.0995574287564276 },
+         0.78539816339744828, 0.0 },
+  { 1.9992410287270217e-05, 50, 50, 
+         0.94247779607693793, 0.0 },
+  { 0.0024947505670829830, 50, 50, 
+         1.0995574287564276, 0.0 },
   { 0.065057774647971231, 50, 50, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { 0.43050607056732243, 50, 50, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { 0.79980281171531975, 50, 50, 
-         1.5707963267948966 },
-  { 0.43050607056732360, 50, 50, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { 0.43050607056732287, 50, 50, 
+         1.7278759594743862, 0.0 },
   { 0.065057774647971398, 50, 50, 
-         1.8849555921538759 },
-  { 0.0024947505670829899, 50, 50, 
-         2.0420352248333655 },
-  { 1.9992410287270427e-05, 50, 50, 
-         2.1991148575128552 },
+         1.8849555921538759, 0.0 },
+  { 0.0024947505670829878, 50, 50, 
+         2.0420352248333655, 0.0 },
+  { 1.9992410287270430e-05, 50, 50, 
+         2.1991148575128552, 0.0 },
   { 2.3835981241325311e-08, 50, 50, 
-         2.3561944901923448 },
-  { 2.3116239814797222e-12, 50, 50, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { 2.3116239814797057e-12, 50, 50, 
+         2.5132741228718345, 0.0 },
   { 5.6927376423968952e-18, 50, 50, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 2.5240684647724192e-26, 50, 50, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 4.1649039898161316e-41, 50, 50, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 50, 50, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler028 = 1.0000000000000008e-12;
+const double toler028 = 2.5000000000000020e-13;
 
 // Test data for l=100, m=0.
-// max(|f - f_GSL|): 7.5495165674510645e-15
-// max(|f - f_GSL| / |f_GSL|): 1.2423065089723510e-14
+// max(|f - f_GSL|): 2.2759572004815709e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.9270578369513465e-15
+// mean(f - f_GSL): -2.0618427600181479e-16
+// variance(f - f_GSL): 2.2318776726956083e-33
+// stddev(f - f_GSL): 4.7242752594399153e-17
 const testcase_sph_legendre<double>
 data029[21] =
 {
   { 3.9993839251484076, 100, 0, 
-         0.0000000000000000 },
-  { -0.60770160285935426, 100, 0, 
-         0.15707963267948966 },
-  { 0.46193027883955923, 100, 0, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -0.60770160285939456, 100, 0, 
+         0.15707963267948966, 0.0 },
+  { 0.46193027883954441, 100, 0, 
+         0.31415926535897931, 0.0 },
   { -0.40218718869815234, 100, 0, 
-         0.47123889803846897 },
-  { 0.36960201406910725, 100, 0, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.36960201406911097, 100, 0, 
+         0.62831853071795862, 0.0 },
   { -0.34953726547378389, 100, 0, 
-         0.78539816339744828 },
-  { 0.33646959352497829, 100, 0, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.33646959352497730, 100, 0, 
+         0.94247779607693793, 0.0 },
   { -0.32784733067663224, 100, 0, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.32235624474047969, 100, 0, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.31929330706601350, 100, 0, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { 0.31830791662110325, 100, 0, 
-         1.5707963267948966 },
-  { -0.31929330706601405, 100, 0, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { -0.31929330706601333, 100, 0, 
+         1.7278759594743862, 0.0 },
   { 0.32235624474048036, 100, 0, 
-         1.8849555921538759 },
-  { -0.32784733067663357, 100, 0, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.32784733067663291, 100, 0, 
+         2.0420352248333655, 0.0 },
   { 0.33646959352498013, 100, 0, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { -0.34953726547378589, 100, 0, 
-         2.3561944901923448 },
-  { 0.36960201406911097, 100, 0, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { 0.36960201406910725, 100, 0, 
+         2.5132741228718345, 0.0 },
   { -0.40218718869815723, 100, 0, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 0.46193027883955923, 100, 0, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { -0.60770160285939456, 100, 0, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 3.9993839251484076, 100, 0, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler029 = 1.0000000000000008e-12;
+const double toler029 = 2.5000000000000020e-13;
 
 // Test data for l=100, m=1.
-// max(|f - f_GSL|): 4.1078251911130792e-15
-// max(|f - f_GSL| / |f_GSL|): 1.5162419336330716e-14
+// max(|f - f_GSL|): 4.7184478546569153e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6136152688198031e-14
+// mean(f - f_GSL): 1.7347234759767562e-17
+// variance(f - f_GSL): 1.5798644075050619e-35
+// stddev(f - f_GSL): 3.9747508192401971e-18
 const testcase_sph_legendre<double>
 data030[21] =
 {
   { 0.0000000000000000, 100, 1, 
-         0.0000000000000000 },
-  { -0.50851949013719866, 100, 1, 
-         0.15707963267948966 },
-  { 0.33129641402221749, 100, 1, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -0.50851949013714159, 100, 1, 
+         0.15707963267948966, 0.0 },
+  { 0.33129641402223092, 100, 1, 
+         0.31415926535897931, 0.0 },
   { -0.24390405750942512, 100, 1, 
-         0.47123889803846897 },
-  { 0.18659755088414104, 100, 1, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.18659755088413388, 100, 1, 
+         0.62831853071795862, 0.0 },
   { -0.14355908970517178, 100, 1, 
-         0.78539816339744828 },
-  { 0.10844906813251107, 100, 1, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.10844906813251505, 100, 1, 
+         0.94247779607693793, 0.0 },
   { -0.078100088690857675, 100, 1, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.050670002998302717, 100, 1, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.024941251747138900, 100, 1, 
-         1.4137166941154069 },
-  { 1.9587949830851623e-15, 100, 1, 
-         1.5707963267948966 },
-  { 0.024941251747127875, 100, 1, 
-         1.7278759594743860 },
+         1.4137166941154069, 0.0 },
+  { 1.9587949830851608e-15, 100, 1, 
+         1.5707963267948966, 0.0 },
+  { 0.024941251747135025, 100, 1, 
+         1.7278759594743862, 0.0 },
   { -0.050670002998298824, 100, 1, 
-         1.8849555921538759 },
-  { 0.078100088690853664, 100, 1, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 0.078100088690855773, 100, 1, 
+         2.0420352248333655, 0.0 },
   { -0.10844906813250622, 100, 1, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.14355908970516626, 100, 1, 
-         2.3561944901923448 },
-  { -0.18659755088413388, 100, 1, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.18659755088414104, 100, 1, 
+         2.5132741228718345, 0.0 },
   { 0.24390405750941679, 100, 1, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { -0.33129641402221749, 100, 1, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 0.50851949013714159, 100, 1, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 100, 1, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
 const double toler030 = 1.0000000000000008e-12;
 
 // Test data for l=100, m=2.
-// max(|f - f_GSL|): 2.7755575615628914e-15
-// max(|f - f_GSL| / |f_GSL|): 5.7552022268705475e-15
+// max(|f - f_GSL|): 9.3258734068513149e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.3884756158405121e-14
+// mean(f - f_GSL): 1.1049362483174177e-15
+// variance(f - f_GSL): 6.4096415924402929e-32
+// stddev(f - f_GSL): 2.5317269980075443e-16
 const testcase_sph_legendre<double>
 data031[21] =
 {
   { 0.0000000000000000, 100, 2, 
-         0.0000000000000000 },
-  { 0.67166274297193962, 100, 2, 
-         0.15707963267948966 },
-  { -0.48226933687995360, 100, 2, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 0.67166274297196848, 100, 2, 
+         0.15707963267948966, 0.0 },
+  { -0.48226933687994433, 100, 2, 
+         0.31415926535897931, 0.0 },
   { 0.41175421895715525, 100, 2, 
-         0.47123889803846897 },
-  { -0.37475021787822438, 100, 2, 
-         0.62831853071795862 },
-  { 0.35242909383605225, 100, 2, 
-         0.78539816339744828 },
-  { -0.33807110409160063, 100, 2, 
-         0.94247779607693793 },
+         0.47123889803846897, 0.0 },
+  { -0.37475021787822776, 100, 2, 
+         0.62831853071795862, 0.0 },
+  { 0.35242909383605286, 100, 2, 
+         0.78539816339744828, 0.0 },
+  { -0.33807110409159863, 100, 2, 
+         0.94247779607693793, 0.0 },
   { 0.32867180390710077, 100, 2, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { -0.32271583790278502, 100, 2, 
-         1.2566370614359172 },
-  { 0.31940354677687444, 100, 2, 
-         1.4137166941154069 },
+         1.2566370614359172, 0.0 },
+  { 0.31940354677687466, 100, 2, 
+         1.4137166941154069, 0.0 },
   { -0.31833943693772526, 100, 2, 
-         1.5707963267948966 },
-  { 0.31940354677687555, 100, 2, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { 0.31940354677687455, 100, 2, 
+         1.7278759594743862, 0.0 },
   { -0.32271583790278552, 100, 2, 
-         1.8849555921538759 },
-  { 0.32867180390710193, 100, 2, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 0.32867180390710116, 100, 2, 
+         2.0420352248333655, 0.0 },
   { -0.33807110409160157, 100, 2, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.35242909383605503, 100, 2, 
-         2.3561944901923448 },
-  { -0.37475021787822776, 100, 2, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.37475021787822438, 100, 2, 
+         2.5132741228718345, 0.0 },
   { 0.41175421895716052, 100, 2, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { -0.48226933687995360, 100, 2, 
-         2.8274333882308138 },
-  { 0.67166274297196660, 100, 2, 
-         2.9845130209103035 },
+         2.8274333882308138, 0.0 },
+  { 0.67166274297196848, 100, 2, 
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 100, 2, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler031 = 5.0000000000000039e-13;
+const double toler031 = 1.0000000000000008e-12;
 
 // Test data for l=100, m=5.
-// max(|f - f_GSL|): 5.9674487573602164e-16
-// max(|f - f_GSL| / |f_GSL|): 8.4413588189215985e-15
+// max(|f - f_GSL|): 1.5432100042289676e-14 at index 1
+// max(|f - f_GSL| / |f_GSL|): 2.4665959612621893e-13
+// mean(f - f_GSL): -8.4885802091131797e-16
+// variance(f - f_GSL): 3.7829396832437676e-32
+// stddev(f - f_GSL): 1.9449780675482609e-16
 const testcase_sph_legendre<double>
 data032[21] =
 {
   { 0.0000000000000000, 100, 5, 
-         0.0000000000000000 },
-  { 0.062564361105902272, 100, 5, 
-         0.15707963267948966 },
-  { 0.14179554455879767, 100, 5, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 0.062564361105954577, 100, 5, 
+         0.15707963267948966, 0.0 },
+  { 0.14179554455882706, 100, 5, 
+         0.31415926535897931, 0.0 },
   { -0.14356866942905960, 100, 5, 
-         0.47123889803846897 },
-  { 0.12355483388448550, 100, 5, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 0.12355483388447824, 100, 5, 
+         0.62831853071795862, 0.0 },
   { -0.10090029999681642, 100, 5, 
-         0.78539816339744828 },
-  { 0.078905134460230675, 100, 5, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.078905134460235241, 100, 5, 
+         0.94247779607693793, 0.0 },
   { -0.058040182398185071, 100, 5, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.038142759389482424, 100, 5, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.018906264170660478, 100, 5, 
-         1.4137166941154069 },
-  { 1.9576303042914544e-15, 100, 5, 
-         1.5707963267948966 },
-  { 0.018906264170649455, 100, 5, 
-         1.7278759594743860 },
+         1.4137166941154069, 0.0 },
+  { 1.9576303042914504e-15, 100, 5, 
+         1.5707963267948966, 0.0 },
+  { 0.018906264170657019, 100, 5, 
+         1.7278759594743862, 0.0 },
   { -0.038142759389478365, 100, 5, 
-         1.8849555921538759 },
-  { 0.058040182398180429, 100, 5, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 0.058040182398183086, 100, 5, 
+         2.0420352248333655, 0.0 },
   { -0.078905134460225707, 100, 5, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.10090029999681013, 100, 5, 
-         2.3561944901923448 },
-  { -0.12355483388447824, 100, 5, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.12355483388448550, 100, 5, 
+         2.5132741228718345, 0.0 },
   { 0.14356866942904906, 100, 5, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { -0.14179554455879767, 100, 5, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { -0.062564361105954577, 100, 5, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 100, 5, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler032 = 5.0000000000000039e-13;
+const double toler032 = 2.5000000000000014e-11;
 
 // Test data for l=100, m=10.
-// max(|f - f_GSL|): 1.7763568394002505e-15
-// max(|f - f_GSL| / |f_GSL|): 4.0853922061744651e-15
+// max(|f - f_GSL|): 6.9944050551384862e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 9.2805170220968737e-15
+// mean(f - f_GSL): -9.1725568939268895e-16
+// variance(f - f_GSL): 4.4171294985470989e-32
+// stddev(f - f_GSL): 2.1016968141354497e-16
 const testcase_sph_legendre<double>
 data033[21] =
 {
   { 0.0000000000000000, 100, 10, 
-         0.0000000000000000 },
-  { -0.75366545187996004, 100, 10, 
-         0.15707963267948966 },
-  { -0.35914570017276798, 100, 10, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { -0.75366545187997991, 100, 10, 
+         0.15707963267948966, 0.0 },
+  { -0.35914570017278186, 100, 10, 
+         0.31415926535897931, 0.0 },
   { 0.43480692911578295, 100, 10, 
-         0.47123889803846897 },
-  { -0.40862111080315755, 100, 10, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { -0.40862111080315500, 100, 10, 
+         0.62831853071795862, 0.0 },
   { 0.37832688692909411, 100, 10, 
-         0.78539816339744828 },
-  { -0.35484056194773445, 100, 10, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { -0.35484056194773494, 100, 10, 
+         0.94247779607693793, 0.0 },
   { 0.33821981171196341, 100, 10, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { -0.32729120767830594, 100, 10, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { 0.32110336937091438, 100, 10, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { -0.31910064020036194, 100, 10, 
-         1.5707963267948966 },
+         1.5707963267948966, 0.0 },
   { 0.32110336937091460, 100, 10, 
-         1.7278759594743860 },
+         1.7278759594743862, 0.0 },
   { -0.32729120767830605, 100, 10, 
-         1.8849555921538759 },
-  { 0.33821981171196341, 100, 10, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 0.33821981171196364, 100, 10, 
+         2.0420352248333655, 0.0 },
   { -0.35484056194773461, 100, 10, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.37832688692909372, 100, 10, 
-         2.3561944901923448 },
-  { -0.40862111080315500, 100, 10, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.40862111080315755, 100, 10, 
+         2.5132741228718345, 0.0 },
   { 0.43480692911577751, 100, 10, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { -0.35914570017276798, 100, 10, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { -0.75366545187997991, 100, 10, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 100, 10, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler033 = 2.5000000000000020e-13;
+const double toler033 = 5.0000000000000039e-13;
 
 // Test data for l=100, m=20.
-// max(|f - f_GSL|): 9.7144514654701197e-16
-// max(|f - f_GSL| / |f_GSL|): 2.8802569343392205e-14
+// max(|f - f_GSL|): 5.2180482157382357e-15 at index 2
+// max(|f - f_GSL| / |f_GSL|): 3.3114331221145530e-14
+// mean(f - f_GSL): -1.7066374768419445e-16
+// variance(f - f_GSL): 1.5291210256147554e-33
+// stddev(f - f_GSL): 3.9103977107383276e-17
 const testcase_sph_legendre<double>
 data034[21] =
 {
   { 0.0000000000000000, 100, 20, 
-         0.0000000000000000 },
-  { 0.053569660841553700, 100, 20, 
-         0.15707963267948966 },
-  { 0.57154926874732348, 100, 20, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 0.053569660841557079, 100, 20, 
+         0.15707963267948966, 0.0 },
+  { 0.57154926874731338, 100, 20, 
+         0.31415926535897931, 0.0 },
   { 0.47536909969585633, 100, 20, 
-         0.47123889803846897 },
-  { -0.28882554564109075, 100, 20, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { -0.28882554564109575, 100, 20, 
+         0.62831853071795862, 0.0 },
   { 0.020116179014043743, 100, 20, 
-         0.78539816339744828 },
-  { 0.14752195931706563, 100, 20, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.14752195931707024, 100, 20, 
+         0.94247779607693793, 0.0 },
   { -0.24069428588868366, 100, 20, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.29031796025014306, 100, 20, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.31437256851143458, 100, 20, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { 0.32153954851141792, 100, 20, 
-         1.5707963267948966 },
-  { -0.31437256851143169, 100, 20, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { -0.31437256851143375, 100, 20, 
+         1.7278759594743862, 0.0 },
   { 0.29031796025014139, 100, 20, 
-         1.8849555921538759 },
-  { -0.24069428588868083, 100, 20, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { -0.24069428588868241, 100, 20, 
+         2.0420352248333655, 0.0 },
   { 0.14752195931706186, 100, 20, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.020116179014049562, 100, 20, 
-         2.3561944901923448 },
-  { -0.28882554564109575, 100, 20, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.28882554564109075, 100, 20, 
+         2.5132741228718345, 0.0 },
   { 0.47536909969585545, 100, 20, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 0.57154926874732348, 100, 20, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 0.053569660841557079, 100, 20, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 100, 20, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
 const double toler034 = 2.5000000000000015e-12;
 
 // Test data for l=100, m=50.
-// max(|f - f_GSL|): 8.3266726846886741e-15
-// max(|f - f_GSL| / |f_GSL|): 1.8981734972089879e-14
+// max(|f - f_GSL|): 2.4980018054066022e-15 at index 15
+// max(|f - f_GSL| / |f_GSL|): 7.4927901205617944e-15
+// mean(f - f_GSL): 1.5662074559583175e-16
+// variance(f - f_GSL): 1.2878280424271984e-33
+// stddev(f - f_GSL): 3.5886321104666028e-17
 const testcase_sph_legendre<double>
 data035[21] =
 {
   { 0.0000000000000000, 100, 50, 
-         0.0000000000000000 },
-  { 3.3047910392590615e-21, 100, 50, 
-         0.15707963267948966 },
-  { 1.0592655372554981e-07, 100, 50, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 3.3047910392597822e-21, 100, 50, 
+         0.15707963267948966, 0.0 },
+  { 1.0592655372554564e-07, 100, 50, 
+         0.31415926535897931, 0.0 },
   { 0.080418744223952773, 100, 50, 
-         0.47123889803846897 },
-  { -0.56450600580393095, 100, 50, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { -0.56450600580392973, 100, 50, 
+         0.62831853071795862, 0.0 },
   { 0.33338739844742110, 100, 50, 
-         0.78539816339744828 },
-  { 0.39741714816514706, 100, 50, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 0.39741714816514678, 100, 50, 
+         0.94247779607693793, 0.0 },
   { 0.35223993750972243, 100, 50, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.17885891940721577, 100, 50, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { -0.15341660126461967, 100, 50, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { -0.34175924303503102, 100, 50, 
-         1.5707963267948966 },
-  { -0.15341660126462869, 100, 50, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { -0.15341660126462270, 100, 50, 
+         1.7278759594743862, 0.0 },
   { 0.17885891940721302, 100, 50, 
-         1.8849555921538759 },
-  { 0.35223993750972105, 100, 50, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 0.35223993750972227, 100, 50, 
+         2.0420352248333655, 0.0 },
   { 0.39741714816514595, 100, 50, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 0.33338739844741666, 100, 50, 
-         2.3561944901923448 },
-  { -0.56450600580392973, 100, 50, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { -0.56450600580393095, 100, 50, 
+         2.5132741228718345, 0.0 },
   { 0.080418744223953911, 100, 50, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 1.0592655372554981e-07, 100, 50, 
-         2.8274333882308138 },
+         2.8274333882308138, 0.0 },
   { 3.3047910392597822e-21, 100, 50, 
-         2.9845130209103035 },
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 100, 50, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler035 = 1.0000000000000008e-12;
+const double toler035 = 5.0000000000000039e-13;
 
 // Test data for l=100, m=100.
-// max(|f - f_GSL|): 2.3314683517128287e-14
-// max(|f - f_GSL| / |f_GSL|): 2.6593512237122742e-14
+// max(|f - f_GSL|): 3.6637359812630166e-15 at index 10
+// max(|f - f_GSL| / |f_GSL|): 3.8591350247394187e-15
+// mean(f - f_GSL): 2.7412914496899967e-16
+// variance(f - f_GSL): 3.9452063763753292e-33
+// stddev(f - f_GSL): 6.2810877850698192e-17
 const testcase_sph_legendre<double>
 data036[21] =
 {
   { 0.0000000000000000, 100, 100, 
-         0.0000000000000000 },
-  { 2.5744136608862186e-81, 100, 100, 
-         0.15707963267948966 },
-  { 9.4551974868956498e-52, 100, 100, 
-         0.31415926535897931 },
+         0.0000000000000000, 0.0 },
+  { 2.5744136608873899e-81, 100, 100, 
+         0.15707963267948966, 0.0 },
+  { 9.4551974868947092e-52, 100, 100, 
+         0.31415926535897931, 0.0 },
   { 4.8096190703397596e-35, 100, 100, 
-         0.47123889803846897 },
-  { 7.9305393636342891e-24, 100, 100, 
-         0.62831853071795862 },
+         0.47123889803846897, 0.0 },
+  { 7.9305393636344023e-24, 100, 100, 
+         0.62831853071795862, 0.0 },
   { 8.4320740610944858e-16, 100, 100, 
-         0.78539816339744828 },
-  { 5.9319660146027522e-10, 100, 100, 
-         0.94247779607693793 },
+         0.78539816339744828, 0.0 },
+  { 5.9319660146026674e-10, 100, 100, 
+         0.94247779607693793, 0.0 },
   { 9.2368225946797243e-06, 100, 100, 
-         1.0995574287564276 },
+         1.0995574287564276, 0.0 },
   { 0.0062815489742044095, 100, 100, 
-         1.2566370614359172 },
+         1.2566370614359172, 0.0 },
   { 0.27505966018176986, 100, 100, 
-         1.4137166941154069 },
+         1.4137166941154069, 0.0 },
   { 0.94936713998764621, 100, 100, 
-         1.5707963267948966 },
-  { 0.27505966018177130, 100, 100, 
-         1.7278759594743860 },
+         1.5707963267948966, 0.0 },
+  { 0.27505966018177036, 100, 100, 
+         1.7278759594743862, 0.0 },
   { 0.0062815489742044433, 100, 100, 
-         1.8849555921538759 },
-  { 9.2368225946797734e-06, 100, 100, 
-         2.0420352248333655 },
+         1.8849555921538759, 0.0 },
+  { 9.2368225946797582e-06, 100, 100, 
+         2.0420352248333655, 0.0 },
   { 5.9319660146027946e-10, 100, 100, 
-         2.1991148575128552 },
+         2.1991148575128552, 0.0 },
   { 8.4320740610946652e-16, 100, 100, 
-         2.3561944901923448 },
-  { 7.9305393636344023e-24, 100, 100, 
-         2.5132741228718345 },
+         2.3561944901923448, 0.0 },
+  { 7.9305393636342891e-24, 100, 100, 
+         2.5132741228718345, 0.0 },
   { 4.8096190703400333e-35, 100, 100, 
-         2.6703537555513241 },
+         2.6703537555513241, 0.0 },
   { 9.4551974868956498e-52, 100, 100, 
-         2.8274333882308138 },
-  { 2.5744136608873895e-81, 100, 100, 
-         2.9845130209103035 },
+         2.8274333882308138, 0.0 },
+  { 2.5744136608873899e-81, 100, 100, 
+         2.9845130209103035, 0.0 },
   { 0.0000000000000000, 100, 100, 
-         3.1415926535897931 },
+         3.1415926535897931, 0.0 },
 };
-const double toler036 = 2.5000000000000015e-12;
+const double toler036 = 2.5000000000000020e-13;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_sph_legendre<Tp> (&data)[Num], Tp toler)
+  test(const testcase_sph_legendre<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
         {
-       const Tp f = std::sph_legendre(data[i].l, data[i].m,
+       const Ret f = std::sph_legendre(data[i].l, data[i].m,
                     data[i].theta);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index a5fa16d..a27c80d 100644 (file)
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for n=0.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.8209634107822837e-15
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 0
+// max(|f - f_GSL| / |f_GSL|): 6.3549063142130099e-15
+// mean(f - f_GSL): 1.5525775109992422e-17
+// variance(f - f_GSL): 1.8100648852545731e-34
+// stddev(f - f_GSL): 1.3453865189062112e-17
 const testcase_sph_neumann<double>
 data001[20] =
 {
-  { -3.8756496868425789, 0, 0.25000000000000000 },
-  { -1.7551651237807455, 0, 0.50000000000000000 },
-  { -0.97558515849842786, 0, 0.75000000000000000 },
-  { -0.54030230586813977, 0, 1.0000000000000000 },
-  { -0.25225788991621495, 0, 1.2500000000000000 },
-  { -0.047158134445135273, 0, 1.5000000000000000 },
-  { 0.10185488894256690, 0, 1.7500000000000000 },
-  { 0.20807341827357120, 0, 2.0000000000000000 },
-  { 0.27918827676566177, 0, 2.2500000000000000 },
-  { 0.32045744621877348, 0, 2.5000000000000000 },
-  { 0.33610995586635040, 0, 2.7500000000000000 },
-  { 0.32999749886681512, 0, 3.0000000000000000 },
-  { 0.30588605417862963, 0, 3.2500000000000000 },
-  { 0.26755905351165610, 0, 3.5000000000000000 },
-  { 0.21881582862388288, 0, 3.7500000000000000 },
-  { 0.16341090521590299, 0, 4.0000000000000000 },
-  { 0.10496176233265714, 0, 4.2500000000000000 },
-  { 0.046843510984617719, 0, 4.5000000000000000 },
-  { -0.0079162427132582220, 0, 4.7500000000000000 },
-  { -0.056732437092645263, 0, 5.0000000000000000 },
+  { -3.8756496868425789, 0, 0.25000000000000000, 0.0 },
+  { -1.7551651237807455, 0, 0.50000000000000000, 0.0 },
+  { -0.97558515849842786, 0, 0.75000000000000000, 0.0 },
+  { -0.54030230586813977, 0, 1.0000000000000000, 0.0 },
+  { -0.25225788991621495, 0, 1.2500000000000000, 0.0 },
+  { -0.047158134445135273, 0, 1.5000000000000000, 0.0 },
+  { 0.10185488894256690, 0, 1.7500000000000000, 0.0 },
+  { 0.20807341827357120, 0, 2.0000000000000000, 0.0 },
+  { 0.27918827676566177, 0, 2.2500000000000000, 0.0 },
+  { 0.32045744621877348, 0, 2.5000000000000000, 0.0 },
+  { 0.33610995586635040, 0, 2.7500000000000000, 0.0 },
+  { 0.32999749886681512, 0, 3.0000000000000000, 0.0 },
+  { 0.30588605417862963, 0, 3.2500000000000000, 0.0 },
+  { 0.26755905351165610, 0, 3.5000000000000000, 0.0 },
+  { 0.21881582862388288, 0, 3.7500000000000000, 0.0 },
+  { 0.16341090521590299, 0, 4.0000000000000000, 0.0 },
+  { 0.10496176233265714, 0, 4.2500000000000000, 0.0 },
+  { 0.046843510984617719, 0, 4.5000000000000000, 0.0 },
+  { -0.0079162427132582220, 0, 4.7500000000000000, 0.0 },
+  { -0.056732437092645263, 0, 5.0000000000000000, 0.0 },
 };
-const double toler001 = 2.5000000000000020e-13;
+const double toler001 = 5.0000000000000039e-13;
 
 // Test data for n=1.
-// max(|f - f_GSL|): 3.5527136788005009e-15
-// max(|f - f_GSL| / |f_GSL|): 3.7472288263398607e-15
+// max(|f - f_GSL|): 3.5527136788005009e-15 at index 0
+// max(|f - f_GSL| / |f_GSL|): 5.0269657509879036e-15
+// mean(f - f_GSL): -2.8727020762175924e-16
+// variance(f - f_GSL): 4.5719762984514500e-33
+// stddev(f - f_GSL): 6.7616390752919144e-17
 const testcase_sph_neumann<double>
 data002[20] =
 {
-  { -16.492214584388407, 1, 0.25000000000000000 },
-  { -4.4691813247698970, 1, 0.50000000000000000 },
-  { -2.2096318913623492, 1, 0.75000000000000000 },
-  { -1.3817732906760363, 1, 1.0000000000000000 },
-  { -0.96099400741744090, 1, 1.2500000000000000 },
-  { -0.69643541403279308, 1, 1.5000000000000000 },
-  { -0.50407489024649721, 1, 1.7500000000000000 },
-  { -0.35061200427605527, 1, 2.0000000000000000 },
-  { -0.22172663116544869, 1, 2.2500000000000000 },
-  { -0.11120587915407318, 1, 2.5000000000000000 },
-  { -0.016564013158538646, 1, 2.7500000000000000 },
-  { 0.062959163602315973, 1, 3.0000000000000000 },
-  { 0.12740959652576553, 1, 3.2500000000000000 },
-  { 0.17666922320036457, 1, 3.5000000000000000 },
-  { 0.21076723929766045, 1, 3.7500000000000000 },
-  { 0.23005335013095779, 1, 4.0000000000000000 },
-  { 0.23528261660264485, 1, 4.2500000000000000 },
-  { 0.22763858414438104, 1, 4.5000000000000000 },
-  { 0.20871085184465679, 1, 4.7500000000000000 },
-  { 0.18043836751409864, 1, 5.0000000000000000 },
+  { -16.492214584388407, 1, 0.25000000000000000, 0.0 },
+  { -4.4691813247698970, 1, 0.50000000000000000, 0.0 },
+  { -2.2096318913623492, 1, 0.75000000000000000, 0.0 },
+  { -1.3817732906760363, 1, 1.0000000000000000, 0.0 },
+  { -0.96099400741744090, 1, 1.2500000000000000, 0.0 },
+  { -0.69643541403279308, 1, 1.5000000000000000, 0.0 },
+  { -0.50407489024649721, 1, 1.7500000000000000, 0.0 },
+  { -0.35061200427605527, 1, 2.0000000000000000, 0.0 },
+  { -0.22172663116544869, 1, 2.2500000000000000, 0.0 },
+  { -0.11120587915407318, 1, 2.5000000000000000, 0.0 },
+  { -0.016564013158538646, 1, 2.7500000000000000, 0.0 },
+  { 0.062959163602315973, 1, 3.0000000000000000, 0.0 },
+  { 0.12740959652576553, 1, 3.2500000000000000, 0.0 },
+  { 0.17666922320036457, 1, 3.5000000000000000, 0.0 },
+  { 0.21076723929766045, 1, 3.7500000000000000, 0.0 },
+  { 0.23005335013095779, 1, 4.0000000000000000, 0.0 },
+  { 0.23528261660264485, 1, 4.2500000000000000, 0.0 },
+  { 0.22763858414438104, 1, 4.5000000000000000, 0.0 },
+  { 0.20871085184465679, 1, 4.7500000000000000, 0.0 },
+  { 0.18043836751409864, 1, 5.0000000000000000, 0.0 },
 };
-const double toler002 = 2.5000000000000020e-13;
+const double toler002 = 5.0000000000000039e-13;
 
 // Test data for n=2.
-// max(|f - f_GSL|): 5.6843418860808015e-14
-// max(|f - f_GSL| / |f_GSL|): 2.4702749396271158e-15
+// max(|f - f_GSL|): 1.0658141036401503e-14 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.4758752580536458e-15
+// mean(f - f_GSL): -7.2060413192076563e-16
+// variance(f - f_GSL): 3.1027271571410419e-32
+// stddev(f - f_GSL): 1.7614559764981474e-16
 const testcase_sph_neumann<double>
 data003[20] =
 {
-  { -194.03092532581832, 2, 0.25000000000000000 },
-  { -25.059922824838637, 2, 0.50000000000000000 },
-  { -7.8629424069509692, 2, 0.75000000000000000 },
-  { -3.6050175661599688, 2, 1.0000000000000000 },
-  { -2.0541277278856431, 2, 1.2500000000000000 },
-  { -1.3457126936204509, 2, 1.5000000000000000 },
-  { -0.96598327222227631, 2, 1.7500000000000000 },
-  { -0.73399142468765399, 2, 2.0000000000000000 },
-  { -0.57482378498626008, 2, 2.2500000000000000 },
-  { -0.45390450120366133, 2, 2.5000000000000000 },
-  { -0.35417978840293796, 2, 2.7500000000000000 },
-  { -0.26703833526449916, 2, 3.0000000000000000 },
-  { -0.18827719584715374, 2, 3.2500000000000000 },
-  { -0.11612829076848646, 2, 3.5000000000000000 },
-  { -0.050202037185754500, 2, 3.7500000000000000 },
-  { 0.0091291073823153435, 2, 4.0000000000000000 },
-  { 0.061120084680974532, 2, 4.2500000000000000 },
-  { 0.10491554511163632, 2, 4.5000000000000000 },
-  { 0.13973362282567303, 2, 4.7500000000000000 },
-  { 0.16499545760110443, 2, 5.0000000000000000 },
+  { -194.03092532581832, 2, 0.25000000000000000, 0.0 },
+  { -25.059922824838637, 2, 0.50000000000000000, 0.0 },
+  { -7.8629424069509692, 2, 0.75000000000000000, 0.0 },
+  { -3.6050175661599688, 2, 1.0000000000000000, 0.0 },
+  { -2.0541277278856431, 2, 1.2500000000000000, 0.0 },
+  { -1.3457126936204509, 2, 1.5000000000000000, 0.0 },
+  { -0.96598327222227631, 2, 1.7500000000000000, 0.0 },
+  { -0.73399142468765399, 2, 2.0000000000000000, 0.0 },
+  { -0.57482378498626008, 2, 2.2500000000000000, 0.0 },
+  { -0.45390450120366133, 2, 2.5000000000000000, 0.0 },
+  { -0.35417978840293796, 2, 2.7500000000000000, 0.0 },
+  { -0.26703833526449916, 2, 3.0000000000000000, 0.0 },
+  { -0.18827719584715374, 2, 3.2500000000000000, 0.0 },
+  { -0.11612829076848646, 2, 3.5000000000000000, 0.0 },
+  { -0.050202037185754500, 2, 3.7500000000000000, 0.0 },
+  { 0.0091291073823153435, 2, 4.0000000000000000, 0.0 },
+  { 0.061120084680974532, 2, 4.2500000000000000, 0.0 },
+  { 0.10491554511163632, 2, 4.5000000000000000, 0.0 },
+  { 0.13973362282567303, 2, 4.7500000000000000, 0.0 },
+  { 0.16499545760110443, 2, 5.0000000000000000, 0.0 },
 };
 const double toler003 = 2.5000000000000020e-13;
 
 // Test data for n=5.
-// max(|f - f_GSL|): 4.6566128730773926e-10
-// max(|f - f_GSL| / |f_GSL|): 6.3451511503162099e-16
+// max(|f - f_GSL|): 4.6566128730773926e-10 at index 0
+// max(|f - f_GSL| / |f_GSL|): 7.9314389378952617e-16
+// mean(f - f_GSL): -2.3717425245983749e-11
+// variance(f - f_GSL): 3.1164189869182792e-23
+// stddev(f - f_GSL): 5.5824895762717548e-12
 const testcase_sph_neumann<double>
 data004[20] =
 {
-  { -3884190.0626637731, 5, 0.25000000000000000 },
-  { -61327.563166980639, 5, 0.50000000000000000 },
-  { -5478.9529323190836, 5, 0.75000000000000000 },
-  { -999.44034339223640, 5, 1.0000000000000000 },
-  { -270.49720502942358, 5, 1.2500000000000000 },
-  { -94.236110085232468, 5, 1.5000000000000000 },
-  { -39.182827786584333, 5, 1.7500000000000000 },
-  { -18.591445311190984, 5, 2.0000000000000000 },
-  { -9.7821420203182274, 5, 2.2500000000000000 },
-  { -5.5991001548063233, 5, 2.5000000000000000 },
-  { -3.4400655233636823, 5, 2.7500000000000000 },
-  { -2.2470233284653904, 5, 3.0000000000000000 },
-  { -1.5491439945779160, 5, 3.2500000000000000 },
-  { -1.1205896325654248, 5, 3.5000000000000000 },
-  { -0.84592255605194844, 5, 3.7500000000000000 },
-  { -0.66280126645045878, 5, 4.0000000000000000 },
-  { -0.53589374436038528, 5, 4.2500000000000000 },
-  { -0.44430324229090551, 5, 4.5000000000000000 },
-  { -0.37520157232899892, 5, 4.7500000000000000 },
-  { -0.32046504674973919, 5, 5.0000000000000000 },
+  { -3884190.0626637731, 5, 0.25000000000000000, 0.0 },
+  { -61327.563166980639, 5, 0.50000000000000000, 0.0 },
+  { -5478.9529323190836, 5, 0.75000000000000000, 0.0 },
+  { -999.44034339223640, 5, 1.0000000000000000, 0.0 },
+  { -270.49720502942358, 5, 1.2500000000000000, 0.0 },
+  { -94.236110085232468, 5, 1.5000000000000000, 0.0 },
+  { -39.182827786584333, 5, 1.7500000000000000, 0.0 },
+  { -18.591445311190984, 5, 2.0000000000000000, 0.0 },
+  { -9.7821420203182274, 5, 2.2500000000000000, 0.0 },
+  { -5.5991001548063233, 5, 2.5000000000000000, 0.0 },
+  { -3.4400655233636823, 5, 2.7500000000000000, 0.0 },
+  { -2.2470233284653904, 5, 3.0000000000000000, 0.0 },
+  { -1.5491439945779160, 5, 3.2500000000000000, 0.0 },
+  { -1.1205896325654248, 5, 3.5000000000000000, 0.0 },
+  { -0.84592255605194844, 5, 3.7500000000000000, 0.0 },
+  { -0.66280126645045878, 5, 4.0000000000000000, 0.0 },
+  { -0.53589374436038528, 5, 4.2500000000000000, 0.0 },
+  { -0.44430324229090551, 5, 4.5000000000000000, 0.0 },
+  { -0.37520157232899892, 5, 4.7500000000000000, 0.0 },
+  { -0.32046504674973919, 5, 5.0000000000000000, 0.0 },
 };
 const double toler004 = 2.5000000000000020e-13;
 
 // Test data for n=10.
-// max(|f - f_GSL|): 0.50000000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.2712694703401436e-15
+// max(|f - f_GSL|): 0.50000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 1.5255233644081723e-15
+// mean(f - f_GSL): -0.025048278210168286
+// variance(f - f_GSL): 3.4761477272673221e-05
+// stddev(f - f_GSL): 0.0058958864704701719
 const testcase_sph_neumann<double>
 data005[20] =
 {
-  { -2750653598174213.5, 10, 0.25000000000000000 },
-  { -1349739281107.0554, 10, 0.50000000000000000 },
-  { -15733380424.953760, 10, 0.75000000000000000 },
-  { -672215008.25620842, 10, 1.0000000000000000 },
-  { -58607405.988679446, 10, 1.2500000000000000 },
-  { -8032728.8148234813, 10, 1.5000000000000000 },
-  { -1505955.5720640516, 10, 1.7500000000000000 },
-  { -355414.72008543846, 10, 2.0000000000000000 },
-  { -100086.80374425423, 10, 2.2500000000000000 },
-  { -32423.794085334419, 10, 2.5000000000000000 },
-  { -11772.863161809979, 10, 2.7500000000000000 },
-  { -4699.8591888113924, 10, 3.0000000000000000 },
-  { -2033.0183273853759, 10, 3.2500000000000000 },
-  { -942.19075028425493, 10, 3.5000000000000000 },
-  { -463.65206971202474, 10, 3.7500000000000000 },
-  { -240.53552987988931, 10, 4.0000000000000000 },
-  { -130.78478404631085, 10, 4.2500000000000000 },
-  { -74.170665501737531, 10, 4.5000000000000000 },
-  { -43.698249898184983, 10, 4.7500000000000000 },
-  { -26.656114405718711, 10, 5.0000000000000000 },
+  { -2750653598174213.5, 10, 0.25000000000000000, 0.0 },
+  { -1349739281107.0554, 10, 0.50000000000000000, 0.0 },
+  { -15733380424.953760, 10, 0.75000000000000000, 0.0 },
+  { -672215008.25620842, 10, 1.0000000000000000, 0.0 },
+  { -58607405.988679446, 10, 1.2500000000000000, 0.0 },
+  { -8032728.8148234813, 10, 1.5000000000000000, 0.0 },
+  { -1505955.5720640516, 10, 1.7500000000000000, 0.0 },
+  { -355414.72008543846, 10, 2.0000000000000000, 0.0 },
+  { -100086.80374425423, 10, 2.2500000000000000, 0.0 },
+  { -32423.794085334419, 10, 2.5000000000000000, 0.0 },
+  { -11772.863161809979, 10, 2.7500000000000000, 0.0 },
+  { -4699.8591888113924, 10, 3.0000000000000000, 0.0 },
+  { -2033.0183273853759, 10, 3.2500000000000000, 0.0 },
+  { -942.19075028425493, 10, 3.5000000000000000, 0.0 },
+  { -463.65206971202474, 10, 3.7500000000000000, 0.0 },
+  { -240.53552987988931, 10, 4.0000000000000000, 0.0 },
+  { -130.78478404631085, 10, 4.2500000000000000, 0.0 },
+  { -74.170665501737531, 10, 4.5000000000000000, 0.0 },
+  { -43.698249898184983, 10, 4.7500000000000000, 0.0 },
+  { -26.656114405718711, 10, 5.0000000000000000, 0.0 },
 };
 const double toler005 = 2.5000000000000020e-13;
 
 // Test data for n=20.
-// max(|f - f_GSL|): 2.9514790517935283e+20
-// max(|f - f_GSL| / |f_GSL|): 1.9896573344672978e-15
+// max(|f - f_GSL|): 2.9514790517935283e+20 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.1705352739643247e-15
+// mean(f - f_GSL): -1.4757416361014618e+19
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_sph_neumann<double>
 data006[20] =
 {
-  { -1.4077591402542251e+36, 20, 0.25000000000000000 },
-  { -6.7288761838234712e+29, 20, 0.50000000000000000 },
-  { -1.3544611382105945e+26, 20, 0.75000000000000000 },
-  { -3.2395922185789833e+23, 20, 1.0000000000000000 },
-  { -3.0096416715953060e+21, 20, 1.2500000000000000 },
-  { -6.5999646851668173e+19, 20, 1.5000000000000000 },
-  { -2.6193364753070735e+18, 20, 1.7500000000000000 },
-  { -1.6054364928152224e+17, 20, 2.0000000000000000 },
-  { -13719071872797762., 20, 2.2500000000000000 },
-  { -1524247248298953.8, 20, 2.5000000000000000 },
-  { -209484650509384.06, 20, 2.7500000000000000 },
-  { -34327545666696.488, 20, 3.0000000000000000 },
-  { -6522260876203.3174, 20, 3.2500000000000000 },
-  { -1406018871897.2307, 20, 3.5000000000000000 },
-  { -338025193731.78882, 20, 3.7500000000000000 },
-  { -89381690326.018677, 20, 4.0000000000000000 },
-  { -25701805899.474934, 20, 4.2500000000000000 },
-  { -7961859734.2407761, 20, 4.5000000000000000 },
-  { -2636237230.0850010, 20, 4.7500000000000000 },
-  { -926795140.30575466, 20, 5.0000000000000000 },
+  { -1.4077591402542251e+36, 20, 0.25000000000000000, 0.0 },
+  { -6.7288761838234712e+29, 20, 0.50000000000000000, 0.0 },
+  { -1.3544611382105945e+26, 20, 0.75000000000000000, 0.0 },
+  { -3.2395922185789833e+23, 20, 1.0000000000000000, 0.0 },
+  { -3.0096416715953060e+21, 20, 1.2500000000000000, 0.0 },
+  { -6.5999646851668173e+19, 20, 1.5000000000000000, 0.0 },
+  { -2.6193364753070735e+18, 20, 1.7500000000000000, 0.0 },
+  { -1.6054364928152224e+17, 20, 2.0000000000000000, 0.0 },
+  { -13719071872797762., 20, 2.2500000000000000, 0.0 },
+  { -1524247248298953.8, 20, 2.5000000000000000, 0.0 },
+  { -209484650509384.06, 20, 2.7500000000000000, 0.0 },
+  { -34327545666696.488, 20, 3.0000000000000000, 0.0 },
+  { -6522260876203.3174, 20, 3.2500000000000000, 0.0 },
+  { -1406018871897.2307, 20, 3.5000000000000000, 0.0 },
+  { -338025193731.78882, 20, 3.7500000000000000, 0.0 },
+  { -89381690326.018677, 20, 4.0000000000000000, 0.0 },
+  { -25701805899.474934, 20, 4.2500000000000000, 0.0 },
+  { -7961859734.2407761, 20, 4.5000000000000000, 0.0 },
+  { -2636237230.0850010, 20, 4.7500000000000000, 0.0 },
+  { -926795140.30575466, 20, 5.0000000000000000, 0.0 },
 };
 const double toler006 = 2.5000000000000020e-13;
 
 // Test data for n=50.
-// max(|f - f_GSL|): 2.0859248397665138e+93
-// max(|f - f_GSL| / |f_GSL|): 7.3237119407125301e-14
+// max(|f - f_GSL|): 2.0859248397665138e+93 at index 0
+// max(|f - f_GSL| / |f_GSL|): 4.2498516526709979e-14
+// mean(f - f_GSL): 1.0429624198832546e+92
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_sph_neumann<double>
 data007[20] =
 {
-  { -1.3823742808004061e+109, 50, 0.25000000000000000 },
-  { -6.1447912922121694e+93, 50, 0.50000000000000000 },
-  { -6.4348494908900529e+84, 50, 0.75000000000000000 },
-  { -2.7391922846297569e+78, 50, 1.0000000000000000 },
-  { -3.1365037573299931e+73, 50, 1.2500000000000000 },
-  { -2.8821098528635756e+69, 50, 1.5000000000000000 },
-  { -1.1148255024189452e+66, 50, 1.7500000000000000 },
-  { -1.2350219443670970e+63, 50, 2.0000000000000000 },
-  { -3.0565226939717125e+60, 50, 2.2500000000000000 },
-  { -1.4262702131152733e+58, 50, 2.5000000000000000 },
-  { -1.1118745474840939e+56, 50, 2.7500000000000000 },
-  { -1.3243260716629126e+54, 50, 3.0000000000000000 },
-  { -2.2519472094129334e+52, 50, 3.2500000000000000 },
-  { -5.1861507201100364e+50, 50, 3.5000000000000000 },
-  { -1.5513212909461383e+49, 50, 3.7500000000000000 },
-  { -5.8276471407899822e+47, 50, 4.0000000000000000 },
-  { -2.6745414086542661e+46, 50, 4.2500000000000000 },
-  { -1.4657308996352322e+45, 50, 4.5000000000000000 },
-  { -9.4102674366685358e+43, 50, 4.7500000000000000 },
-  { -6.9641091882698388e+42, 50, 5.0000000000000000 },
+  { -1.3823742808004061e+109, 50, 0.25000000000000000, 0.0 },
+  { -6.1447912922121694e+93, 50, 0.50000000000000000, 0.0 },
+  { -6.4348494908900529e+84, 50, 0.75000000000000000, 0.0 },
+  { -2.7391922846297569e+78, 50, 1.0000000000000000, 0.0 },
+  { -3.1365037573299931e+73, 50, 1.2500000000000000, 0.0 },
+  { -2.8821098528635756e+69, 50, 1.5000000000000000, 0.0 },
+  { -1.1148255024189452e+66, 50, 1.7500000000000000, 0.0 },
+  { -1.2350219443670970e+63, 50, 2.0000000000000000, 0.0 },
+  { -3.0565226939717125e+60, 50, 2.2500000000000000, 0.0 },
+  { -1.4262702131152733e+58, 50, 2.5000000000000000, 0.0 },
+  { -1.1118745474840939e+56, 50, 2.7500000000000000, 0.0 },
+  { -1.3243260716629503e+54, 50, 3.0000000000000000, 0.0 },
+  { -2.2519472094129329e+52, 50, 3.2500000000000000, 0.0 },
+  { -5.1861507201103288e+50, 50, 3.5000000000000000, 0.0 },
+  { -1.5513212909462263e+49, 50, 3.7500000000000000, 0.0 },
+  { -5.8276471407900649e+47, 50, 4.0000000000000000, 0.0 },
+  { -2.6745414086543416e+46, 50, 4.2500000000000000, 0.0 },
+  { -1.4657308996352946e+45, 50, 4.5000000000000000, 0.0 },
+  { -9.4102674366690647e+43, 50, 4.7500000000000000, 0.0 },
+  { -6.9641091882701322e+42, 50, 5.0000000000000000, 0.0 },
 };
-const double toler007 = 5.0000000000000029e-12;
+const double toler007 = 2.5000000000000015e-12;
 
 // Test data for n=100.
-// max(|f - f_GSL|): 2.4840289476811343e+232
-// max(|f - f_GSL| / |f_GSL|): 9.0555289224453335e-14
+// max(|f - f_GSL|): 2.4840289476811343e+232 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.1411436945786310e-13
+// mean(f - f_GSL): 1.2420144738405672e+231
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_sph_neumann<double>
 data008[20] =
 {
-  { -4.2856109460516407e+247, 100, 0.25000000000000000 },
-  { -1.6911720011753781e+217, 100, 0.50000000000000000 },
-  { -2.7753107402139484e+199, 100, 0.75000000000000000 },
-  { -6.6830794632586774e+186, 100, 1.0000000000000000 },
-  { -1.0906342369729277e+177, 100, 1.2500000000000000 },
-  { -1.0993184254131119e+169, 100, 1.5000000000000000 },
-  { -1.9071480498141315e+162, 100, 1.7500000000000000 },
-  { -2.6559558301924957e+156, 100, 2.0000000000000000 },
-  { -1.8154136926485787e+151, 100, 2.2500000000000000 },
-  { -4.3527631662111383e+146, 100, 2.5000000000000000 },
-  { -2.8809537014100589e+142, 100, 2.7500000000000000 },
-  { -4.4102229953033134e+138, 100, 3.0000000000000000 },
-  { -1.3651904154045514e+135, 100, 3.2500000000000000 },
-  { -7.6980749101080730e+131, 100, 3.5000000000000000 },
-  { -7.2790553499254927e+128, 100, 3.7500000000000000 },
-  { -1.0796647795893970e+126, 100, 4.0000000000000000 },
-  { -2.3785795774445298e+123, 100, 4.2500000000000000 },
-  { -7.4391596631955861e+120, 100, 4.5000000000000000 },
-  { -3.1802258278279400e+118, 100, 4.7500000000000000 },
-  { -1.7997139826259740e+116, 100, 5.0000000000000000 },
+  { -4.2856109460516407e+247, 100, 0.25000000000000000, 0.0 },
+  { -1.6911720011753781e+217, 100, 0.50000000000000000, 0.0 },
+  { -2.7753107402139484e+199, 100, 0.75000000000000000, 0.0 },
+  { -6.6830794632586774e+186, 100, 1.0000000000000000, 0.0 },
+  { -1.0906342369729277e+177, 100, 1.2500000000000000, 0.0 },
+  { -1.0993184254131119e+169, 100, 1.5000000000000000, 0.0 },
+  { -1.9071480498141315e+162, 100, 1.7500000000000000, 0.0 },
+  { -2.6559558301924957e+156, 100, 2.0000000000000000, 0.0 },
+  { -1.8154136926485787e+151, 100, 2.2500000000000000, 0.0 },
+  { -4.3527631662111383e+146, 100, 2.5000000000000000, 0.0 },
+  { -2.8809537014100589e+142, 100, 2.7500000000000000, 0.0 },
+  { -4.4102229953025611e+138, 100, 3.0000000000000000, 0.0 },
+  { -1.3651904154044740e+135, 100, 3.2500000000000000, 0.0 },
+  { -7.6980749101063267e+131, 100, 3.5000000000000000, 0.0 },
+  { -7.2790553499246662e+128, 100, 3.7500000000000000, 0.0 },
+  { -1.0796647795891517e+126, 100, 4.0000000000000000, 0.0 },
+  { -2.3785795774441247e+123, 100, 4.2500000000000000, 0.0 },
+  { -7.4391596631947432e+120, 100, 4.5000000000000000, 0.0 },
+  { -3.1802258278275794e+118, 100, 4.7500000000000000, 0.0 },
+  { -1.7997139826255660e+116, 100, 5.0000000000000000, 0.0 },
 };
-const double toler008 = 5.0000000000000029e-12;
+const double toler008 = 2.5000000000000014e-11;
 //  sph_neumann
 
 // Test data for n=0.
-// max(|f - f_GSL|): 1.0165479569224090e-15
+// max(|f - f_GSL|): 1.0165479569224090e-15 at index 12
 // max(|f - f_GSL| / |f_GSL|): 5.9073915926662418e-13
+// mean(f - f_GSL): 5.6194198599923690e-17
+// variance(f - f_GSL): 3.3904740513577990e-33
+// stddev(f - f_GSL): 5.8227777317684031e-17
 const testcase_sph_neumann<double>
 data009[20] =
 {
-  { -0.056732437092645263, 0, 5.0000000000000000 },
-  { 0.083907152907645249, 0, 10.000000000000000 },
-  { 0.050645860857254747, 0, 15.000000000000000 },
-  { -0.020404103090669597, 0, 20.000000000000000 },
-  { -0.039648112474538942, 0, 25.000000000000000 },
-  { -0.0051417149962528020, 0, 30.000000000000000 },
-  { 0.025819777288328762, 0, 35.000000000000000 },
-  { 0.016673451541306544, 0, 40.000000000000000 },
-  { -0.011673821973727327, 0, 45.000000000000000 },
-  { -0.019299320569842265, 0, 50.000000000000000 },
-  { -0.00040230465930828606, 0, 55.000000000000000 },
-  { 0.015873549673585938, 0, 60.000000000000000 },
-  { 0.0086531361728949541, 0, 65.000000000000000 },
-  { -0.0090474171869471404, 0, 70.000000000000000 },
-  { -0.012290016929663325, 0, 75.000000000000000 },
-  { 0.0013798405479880944, 0, 80.000000000000000 },
-  { 0.011580901686988727, 0, 85.000000000000000 },
-  { 0.0049785957347685574, 0, 90.000000000000000 },
-  { -0.0076860374841559963, 0, 95.000000000000000 },
-  { -0.0086231887228768404, 0, 100.00000000000000 },
+  { -0.056732437092645263, 0, 5.0000000000000000, 0.0 },
+  { 0.083907152907645249, 0, 10.000000000000000, 0.0 },
+  { 0.050645860857254747, 0, 15.000000000000000, 0.0 },
+  { -0.020404103090669597, 0, 20.000000000000000, 0.0 },
+  { -0.039648112474538942, 0, 25.000000000000000, 0.0 },
+  { -0.0051417149962528020, 0, 30.000000000000000, 0.0 },
+  { 0.025819777288328762, 0, 35.000000000000000, 0.0 },
+  { 0.016673451541306544, 0, 40.000000000000000, 0.0 },
+  { -0.011673821973727327, 0, 45.000000000000000, 0.0 },
+  { -0.019299320569842265, 0, 50.000000000000000, 0.0 },
+  { -0.00040230465930828606, 0, 55.000000000000000, 0.0 },
+  { 0.015873549673585938, 0, 60.000000000000000, 0.0 },
+  { 0.0086531361728949541, 0, 65.000000000000000, 0.0 },
+  { -0.0090474171869471404, 0, 70.000000000000000, 0.0 },
+  { -0.012290016929663325, 0, 75.000000000000000, 0.0 },
+  { 0.0013798405479880944, 0, 80.000000000000000, 0.0 },
+  { 0.011580901686988727, 0, 85.000000000000000, 0.0 },
+  { 0.0049785957347685574, 0, 90.000000000000000, 0.0 },
+  { -0.0076860374841559963, 0, 95.000000000000000, 0.0 },
+  { -0.0086231887228768404, 0, 100.00000000000000, 0.0 },
 };
 const double toler009 = 5.0000000000000028e-11;
 
 // Test data for n=1.
-// max(|f - f_GSL|): 1.0529771499179219e-15
+// max(|f - f_GSL|): 1.0486403412279799e-15 at index 14
 // max(|f - f_GSL| / |f_GSL|): 3.5182047773188613e-13
+// mean(f - f_GSL): 3.4759521649885275e-17
+// variance(f - f_GSL): 1.2285787353099413e-32
+// stddev(f - f_GSL): 1.1084127098287629e-16
 const testcase_sph_neumann<double>
 data010[20] =
 {
-  { 0.18043836751409864, 1, 5.0000000000000000 },
-  { 0.062792826379701502, 1, 10.000000000000000 },
-  { -0.039976131953324147, 1, 15.000000000000000 },
-  { -0.046667467690914864, 1, 20.000000000000000 },
-  { 0.0037081455049293634, 1, 25.000000000000000 },
-  { 0.032762996969886965, 1, 30.000000000000000 },
-  { 0.012971498479556563, 1, 35.000000000000000 },
-  { -0.018210992723451058, 1, 40.000000000000000 },
-  { -0.019168385477952129, 1, 45.000000000000000 },
-  { 0.0048615106626817301, 1, 50.000000000000000 },
-  { 0.018170052158169303, 1, 55.000000000000000 },
-  { 0.0053447361795967109, 1, 60.000000000000000 },
-  { -0.012587316051033977, 1, 65.000000000000000 },
-  { -0.011184829982069090, 1, 70.000000000000000 },
-  { 0.0050065549130635621, 1, 75.000000000000000 },
-  { 0.012440856180892041, 1, 80.000000000000000 },
-  { 0.0022077237839479508, 1, 85.000000000000000 },
-  { -0.0098779785318421041, 1, 90.000000000000000 },
-  { -0.0072731342338976518, 1, 95.000000000000000 },
-  { 0.0049774245238688201, 1, 100.00000000000000 },
+  { 0.18043836751409864, 1, 5.0000000000000000, 0.0 },
+  { 0.062792826379701502, 1, 10.000000000000000, 0.0 },
+  { -0.039976131953324147, 1, 15.000000000000000, 0.0 },
+  { -0.046667467690914864, 1, 20.000000000000000, 0.0 },
+  { 0.0037081455049293634, 1, 25.000000000000000, 0.0 },
+  { 0.032762996969886965, 1, 30.000000000000000, 0.0 },
+  { 0.012971498479556563, 1, 35.000000000000000, 0.0 },
+  { -0.018210992723451058, 1, 40.000000000000000, 0.0 },
+  { -0.019168385477952129, 1, 45.000000000000000, 0.0 },
+  { 0.0048615106626817301, 1, 50.000000000000000, 0.0 },
+  { 0.018170052158169303, 1, 55.000000000000000, 0.0 },
+  { 0.0053447361795967109, 1, 60.000000000000000, 0.0 },
+  { -0.012587316051033977, 1, 65.000000000000000, 0.0 },
+  { -0.011184829982069090, 1, 70.000000000000000, 0.0 },
+  { 0.0050065549130635621, 1, 75.000000000000000, 0.0 },
+  { 0.012440856180892041, 1, 80.000000000000000, 0.0 },
+  { 0.0022077237839479508, 1, 85.000000000000000, 0.0 },
+  { -0.0098779785318421041, 1, 90.000000000000000, 0.0 },
+  { -0.0072731342338976518, 1, 95.000000000000000, 0.0 },
+  { 0.0049774245238688201, 1, 100.00000000000000, 0.0 },
 };
 const double toler010 = 2.5000000000000014e-11;
 
 // Test data for n=2.
-// max(|f - f_GSL|): 9.7144514654701197e-16
-// max(|f - f_GSL| / |f_GSL|): 8.9389761338979581e-13
+// max(|f - f_GSL|): 9.6971042307103517e-16 at index 12
+// max(|f - f_GSL| / |f_GSL|): 8.9366019038491149e-13
+// mean(f - f_GSL): -5.2854855908668341e-17
+// variance(f - f_GSL): 2.8843051158545336e-33
+// stddev(f - f_GSL): 5.3705727030313382e-17
 const testcase_sph_neumann<double>
 data011[20] =
 {
-  { 0.16499545760110443, 2, 5.0000000000000000 },
-  { -0.065069304993734783, 2, 10.000000000000000 },
-  { -0.058641087247919575, 2, 15.000000000000000 },
-  { 0.013403982937032370, 2, 20.000000000000000 },
-  { 0.040093089935130458, 2, 25.000000000000000 },
-  { 0.0084180146932414986, 2, 30.000000000000000 },
-  { -0.024707934561509628, 2, 35.000000000000000 },
-  { -0.018039275995565374, 2, 40.000000000000000 },
-  { 0.010395929608530518, 2, 45.000000000000000 },
-  { 0.019591011209603170, 2, 50.000000000000000 },
-  { 0.0013933984133902479, 2, 55.000000000000000 },
-  { -0.015606312864606101, 2, 60.000000000000000 },
-  { -0.0092340892214042153, 2, 65.000000000000000 },
-  { 0.0085680673305727519, 2, 70.000000000000000 },
-  { 0.012490279126185866, 2, 75.000000000000000 },
-  { -0.00091330844120464274, 2, 80.000000000000000 },
-  { -0.011502982024025860, 2, 85.000000000000000 },
-  { -0.0053078616858299611, 2, 90.000000000000000 },
-  { 0.0074563595609802797, 2, 95.000000000000000 },
-  { 0.0087725114585929052, 2, 100.00000000000000 },
+  { 0.16499545760110443, 2, 5.0000000000000000, 0.0 },
+  { -0.065069304993734783, 2, 10.000000000000000, 0.0 },
+  { -0.058641087247919575, 2, 15.000000000000000, 0.0 },
+  { 0.013403982937032370, 2, 20.000000000000000, 0.0 },
+  { 0.040093089935130458, 2, 25.000000000000000, 0.0 },
+  { 0.0084180146932414986, 2, 30.000000000000000, 0.0 },
+  { -0.024707934561509628, 2, 35.000000000000000, 0.0 },
+  { -0.018039275995565374, 2, 40.000000000000000, 0.0 },
+  { 0.010395929608530518, 2, 45.000000000000000, 0.0 },
+  { 0.019591011209603170, 2, 50.000000000000000, 0.0 },
+  { 0.0013933984133902479, 2, 55.000000000000000, 0.0 },
+  { -0.015606312864606101, 2, 60.000000000000000, 0.0 },
+  { -0.0092340892214042153, 2, 65.000000000000000, 0.0 },
+  { 0.0085680673305727519, 2, 70.000000000000000, 0.0 },
+  { 0.012490279126185866, 2, 75.000000000000000, 0.0 },
+  { -0.00091330844120464274, 2, 80.000000000000000, 0.0 },
+  { -0.011502982024025860, 2, 85.000000000000000, 0.0 },
+  { -0.0053078616858299611, 2, 90.000000000000000, 0.0 },
+  { 0.0074563595609802797, 2, 95.000000000000000, 0.0 },
+  { 0.0087725114585929052, 2, 100.00000000000000, 0.0 },
 };
 const double toler011 = 5.0000000000000028e-11;
 
 // Test data for n=5.
-// max(|f - f_GSL|): 1.1327744298128550e-15
-// max(|f - f_GSL| / |f_GSL|): 6.2024335299315527e-13
+// max(|f - f_GSL|): 1.1301723445988898e-15 at index 14
+// max(|f - f_GSL| / |f_GSL|): 6.1915466104958656e-13
+// mean(f - f_GSL): 2.4660178413182797e-17
+// variance(f - f_GSL): 1.4883294310366547e-32
+// stddev(f - f_GSL): 1.2199710779508892e-16
 const testcase_sph_neumann<double>
 data012[20] =
 {
-  { -0.32046504674973919, 5, 5.0000000000000000 },
-  { 0.093833541678691818, 5, 10.000000000000000 },
-  { 0.020475698281859061, 5, 15.000000000000000 },
-  { -0.048172347757372780, 5, 20.000000000000000 },
-  { -0.018309489232548347, 5, 25.000000000000000 },
-  { 0.026639390496569996, 5, 30.000000000000000 },
-  { 0.022006038985576210, 5, 35.000000000000000 },
-  { -0.011268975348057965, 5, 40.000000000000000 },
-  { -0.021770388372274858, 5, 45.000000000000000 },
-  { -0.00069711319645853701, 5, 50.000000000000000 },
-  { 0.017439589450220901, 5, 55.000000000000000 },
-  { 0.0088699170919343089, 5, 60.000000000000000 },
-  { -0.010421334444951861, 5, 65.000000000000000 },
-  { -0.012746769858008553, 5, 70.000000000000000 },
-  { 0.0026282888028967737, 5, 75.000000000000000 },
-  { 0.012477658581324189, 5, 80.000000000000000 },
-  { 0.0040771816818182642, 5, 85.000000000000000 },
-  { -0.0089777759570579818, 5, 90.000000000000000 },
-  { -0.0083184557896676149, 5, 95.000000000000000 },
-  { 0.0037206784862748965, 5, 100.00000000000000 },
+  { -0.32046504674973919, 5, 5.0000000000000000, 0.0 },
+  { 0.093833541678691818, 5, 10.000000000000000, 0.0 },
+  { 0.020475698281859061, 5, 15.000000000000000, 0.0 },
+  { -0.048172347757372780, 5, 20.000000000000000, 0.0 },
+  { -0.018309489232548347, 5, 25.000000000000000, 0.0 },
+  { 0.026639390496569996, 5, 30.000000000000000, 0.0 },
+  { 0.022006038985576210, 5, 35.000000000000000, 0.0 },
+  { -0.011268975348057965, 5, 40.000000000000000, 0.0 },
+  { -0.021770388372274858, 5, 45.000000000000000, 0.0 },
+  { -0.00069711319645853701, 5, 50.000000000000000, 0.0 },
+  { 0.017439589450220901, 5, 55.000000000000000, 0.0 },
+  { 0.0088699170919343089, 5, 60.000000000000000, 0.0 },
+  { -0.010421334444951861, 5, 65.000000000000000, 0.0 },
+  { -0.012746769858008553, 5, 70.000000000000000, 0.0 },
+  { 0.0026282888028967737, 5, 75.000000000000000, 0.0 },
+  { 0.012477658581324189, 5, 80.000000000000000, 0.0 },
+  { 0.0040771816818182642, 5, 85.000000000000000, 0.0 },
+  { -0.0089777759570579818, 5, 90.000000000000000, 0.0 },
+  { -0.0083184557896676149, 5, 95.000000000000000, 0.0 },
+  { 0.0037206784862748965, 5, 100.00000000000000, 0.0 },
 };
 const double toler012 = 5.0000000000000028e-11;
 
 // Test data for n=10.
-// max(|f - f_GSL|): 1.0658141036401503e-14
+// max(|f - f_GSL|): 1.0658141036401503e-14 at index 0
 // max(|f - f_GSL| / |f_GSL|): 7.3655649039219020e-13
+// mean(f - f_GSL): -6.1456915945168329e-16
+// variance(f - f_GSL): 2.1880640749018393e-32
+// stddev(f - f_GSL): 1.4792106256046972e-16
 const testcase_sph_neumann<double>
 data013[20] =
 {
-  { -26.656114405718711, 10, 5.0000000000000000 },
-  { -0.17245367208805784, 10, 10.000000000000000 },
-  { 0.078461689849642580, 10, 15.000000000000000 },
-  { -0.036843410496289961, 10, 20.000000000000000 },
-  { -0.021158339301097475, 10, 25.000000000000000 },
-  { 0.031219591064754939, 10, 30.000000000000000 },
-  { 0.012840593422414807, 10, 35.000000000000000 },
-  { -0.021803068636888072, 10, 40.000000000000000 },
-  { -0.014071636804469044, 10, 45.000000000000000 },
-  { 0.013524687511158758, 10, 50.000000000000000 },
-  { 0.015684932653180595, 10, 55.000000000000000 },
-  { -0.0056356895567262122, 10, 60.000000000000000 },
-  { -0.015364490270315362, 10, 65.000000000000000 },
-  { -0.0014525575672261295, 10, 70.000000000000000 },
-  { 0.012648951699549433, 10, 75.000000000000000 },
-  { 0.0068571608061120367, 10, 80.000000000000000 },
-  { -0.0080151152941401460, 10, 85.000000000000000 },
-  { -0.0098139742219019149, 10, 90.000000000000000 },
-  { 0.0025002854072314951, 10, 95.000000000000000 },
-  { 0.010025777373636155, 10, 100.00000000000000 },
+  { -26.656114405718711, 10, 5.0000000000000000, 0.0 },
+  { -0.17245367208805784, 10, 10.000000000000000, 0.0 },
+  { 0.078461689849642580, 10, 15.000000000000000, 0.0 },
+  { -0.036843410496289961, 10, 20.000000000000000, 0.0 },
+  { -0.021158339301097475, 10, 25.000000000000000, 0.0 },
+  { 0.031219591064754939, 10, 30.000000000000000, 0.0 },
+  { 0.012840593422414807, 10, 35.000000000000000, 0.0 },
+  { -0.021803068636888072, 10, 40.000000000000000, 0.0 },
+  { -0.014071636804469044, 10, 45.000000000000000, 0.0 },
+  { 0.013524687511158758, 10, 50.000000000000000, 0.0 },
+  { 0.015684932653180595, 10, 55.000000000000000, 0.0 },
+  { -0.0056356895567262122, 10, 60.000000000000000, 0.0 },
+  { -0.015364490270315362, 10, 65.000000000000000, 0.0 },
+  { -0.0014525575672261295, 10, 70.000000000000000, 0.0 },
+  { 0.012648951699549433, 10, 75.000000000000000, 0.0 },
+  { 0.0068571608061120367, 10, 80.000000000000000, 0.0 },
+  { -0.0080151152941401460, 10, 85.000000000000000, 0.0 },
+  { -0.0098139742219019149, 10, 90.000000000000000, 0.0 },
+  { 0.0025002854072314951, 10, 95.000000000000000, 0.0 },
+  { 0.010025777373636155, 10, 100.00000000000000, 0.0 },
 };
 const double toler013 = 5.0000000000000028e-11;
 
 // Test data for n=20.
-// max(|f - f_GSL|): 1.0728836059570312e-06
-// max(|f - f_GSL| / |f_GSL|): 1.0496253232407487e-11
+// max(|f - f_GSL|): 8.3446502685546875e-07 at index 0
+// max(|f - f_GSL| / |f_GSL|): 1.0502991318257211e-11
+// mean(f - f_GSL): -4.1723296986858874e-08
+// variance(f - f_GSL): 9.6445067152075506e-17
+// stddev(f - f_GSL): 9.8206449458309775e-09
 const testcase_sph_neumann<double>
 data014[20] =
 {
-  { -926795140.30575466, 20, 5.0000000000000000 },
-  { -1211.2106053526036, 20, 10.000000000000000 },
-  { -1.5559965765652175, 20, 15.000000000000000 },
-  { -0.093401132250914398, 20, 20.000000000000000 },
-  { 0.044031985675276462, 20, 25.000000000000000 },
-  { -0.036078033606613907, 20, 30.000000000000000 },
-  { 0.029828405631319645, 20, 35.000000000000000 },
-  { -0.0048414810986760759, 20, 40.000000000000000 },
-  { -0.020504694681516944, 20, 45.000000000000000 },
-  { 0.013759531302541216, 20, 50.000000000000000 },
-  { 0.012783038861734196, 20, 55.000000000000000 },
-  { -0.013117009421906418, 20, 60.000000000000000 },
-  { -0.010338106075674407, 20, 65.000000000000000 },
-  { 0.010538610814111244, 20, 70.000000000000000 },
-  { 0.010200029094273744, 20, 75.000000000000000 },
-  { -0.0073123450945617122, 20, 80.000000000000000 },
-  { -0.010581510354950906, 20, 85.000000000000000 },
-  { 0.0036866374015298723, 20, 90.000000000000000 },
-  { 0.010498384318338270, 20, 95.000000000000000 },
-  { 5.6317293788334978e-05, 20, 100.00000000000000 },
+  { -926795140.30575466, 20, 5.0000000000000000, 0.0 },
+  { -1211.2106053526036, 20, 10.000000000000000, 0.0 },
+  { -1.5559965765652175, 20, 15.000000000000000, 0.0 },
+  { -0.093401132250914398, 20, 20.000000000000000, 0.0 },
+  { 0.044031985675276462, 20, 25.000000000000000, 0.0 },
+  { -0.036078033606613907, 20, 30.000000000000000, 0.0 },
+  { 0.029828405631319645, 20, 35.000000000000000, 0.0 },
+  { -0.0048414810986760759, 20, 40.000000000000000, 0.0 },
+  { -0.020504694681516944, 20, 45.000000000000000, 0.0 },
+  { 0.013759531302541216, 20, 50.000000000000000, 0.0 },
+  { 0.012783038861734196, 20, 55.000000000000000, 0.0 },
+  { -0.013117009421906418, 20, 60.000000000000000, 0.0 },
+  { -0.010338106075674407, 20, 65.000000000000000, 0.0 },
+  { 0.010538610814111244, 20, 70.000000000000000, 0.0 },
+  { 0.010200029094273744, 20, 75.000000000000000, 0.0 },
+  { -0.0073123450945617122, 20, 80.000000000000000, 0.0 },
+  { -0.010581510354950906, 20, 85.000000000000000, 0.0 },
+  { 0.0036866374015298723, 20, 90.000000000000000, 0.0 },
+  { 0.010498384318338270, 20, 95.000000000000000, 0.0 },
+  { 5.6317293788334978e-05, 20, 100.00000000000000, 0.0 },
 };
 const double toler014 = 1.0000000000000007e-09;
 
 // Test data for n=50.
-// max(|f - f_GSL|): 5.1003129618557667e+29
-// max(|f - f_GSL| / |f_GSL|): 4.9443320929884463e-13
+// max(|f - f_GSL|): 2.1663950687494155e+29 at index 0
+// max(|f - f_GSL| / |f_GSL|): 4.4985159073786982e-13
+// mean(f - f_GSL): -1.0831975343747075e+28
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_sph_neumann<double>
 data015[20] =
 {
-  { -6.9641091882698388e+42, 50, 5.0000000000000000 },
-  { -4.5282272723512023e+27, 50, 10.000000000000000 },
-  { -9.0004902645887037e+18, 50, 15.000000000000000 },
-  { -9542541667002.5117, 50, 20.000000000000000 },
-  { -363518140.71026671, 50, 25.000000000000000 },
-  { -152551.57233157745, 50, 30.000000000000000 },
-  { -386.26599186208625, 50, 35.000000000000000 },
-  { -4.3290507947291035, 50, 40.000000000000000 },
-  { -0.19968460851503758, 50, 45.000000000000000 },
-  { -0.041900001504607758, 50, 50.000000000000000 },
-  { 0.010696040672421902, 50, 55.000000000000000 },
-  { 0.0078198768555267188, 50, 60.000000000000000 },
-  { -0.010088474938191242, 50, 65.000000000000000 },
-  { 0.0062423671279824801, 50, 70.000000000000000 },
-  { 0.0011284242794941733, 50, 75.000000000000000 },
-  { -0.0093934266037485562, 50, 80.000000000000000 },
-  { 0.013108079602843424, 50, 85.000000000000000 },
-  { -0.0075396607225722626, 50, 90.000000000000000 },
-  { -0.0042605703552836558, 50, 95.000000000000000 },
-  { 0.010747822973682470, 50, 100.00000000000000 },
+  { -6.9641091882701322e+42, 50, 5.0000000000000000, 0.0 },
+  { -4.5282272723513309e+27, 50, 10.000000000000000, 0.0 },
+  { -9.0004902645887672e+18, 50, 15.000000000000000, 0.0 },
+  { -9542541667002.5762, 50, 20.000000000000000, 0.0 },
+  { -363518140.71027178, 50, 25.000000000000000, 0.0 },
+  { -152551.57233157742, 50, 30.000000000000000, 0.0 },
+  { -386.26599186208688, 50, 35.000000000000000, 0.0 },
+  { -4.3290507947291097, 50, 40.000000000000000, 0.0 },
+  { -0.19968460851503717, 50, 45.000000000000000, 0.0 },
+  { -0.041900001504607758, 50, 50.000000000000000, 0.0 },
+  { 0.010696040672421926, 50, 55.000000000000000, 0.0 },
+  { 0.0078198768555268281, 50, 60.000000000000000, 0.0 },
+  { -0.010088474938191183, 50, 65.000000000000000, 0.0 },
+  { 0.0062423671279823656, 50, 70.000000000000000, 0.0 },
+  { 0.0011284242794942282, 50, 75.000000000000000, 0.0 },
+  { -0.0093934266037486308, 50, 80.000000000000000, 0.0 },
+  { 0.013108079602843421, 50, 85.000000000000000, 0.0 },
+  { -0.0075396607225721932, 50, 90.000000000000000, 0.0 },
+  { -0.0042605703552837304, 50, 95.000000000000000, 0.0 },
+  { 0.010747822973682467, 50, 100.00000000000000, 0.0 },
 };
 const double toler015 = 2.5000000000000014e-11;
 
 // Test data for n=100.
-// max(|f - f_GSL|): 3.0796490204944808e+102
-// max(|f - f_GSL| / |f_GSL|): 4.6209003006798690e-14
+// max(|f - f_GSL|): 3.7725700501057390e+103 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.0962053340286959e-13
+// mean(f - f_GSL): -1.8862850250528694e+102
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
 const testcase_sph_neumann<double>
 data016[20] =
 {
-  { -1.7997139826259740e+116, 100, 5.0000000000000000 },
-  { -8.5732263093296268e+85, 100, 10.000000000000000 },
-  { -1.9270658593711677e+68, 100, 15.000000000000000 },
-  { -7.2208893582952385e+55, 100, 20.000000000000000 },
-  { -2.0868752613007946e+46, 100, 25.000000000000000 },
-  { -4.2496124023612646e+38, 100, 30.000000000000000 },
-  { -1.7042898348910271e+32, 100, 35.000000000000000 },
-  { -6.3021565260724554e+26, 100, 40.000000000000000 },
-  { -1.3199917400494367e+22, 100, 45.000000000000000 },
-  { -1.1256928913265988e+18, 100, 50.000000000000000 },
-  { -309801083340343.25, 100, 55.000000000000000 },
-  { -232585620046.64737, 100, 60.000000000000000 },
-  { -421135935.93756074, 100, 65.000000000000000 },
-  { -1680637.4531202621, 100, 70.000000000000000 },
-  { -13868.302591128844, 100, 75.000000000000000 },
-  { -227.24385709173322, 100, 80.000000000000000 },
-  { -7.2807038787138731, 100, 85.000000000000000 },
-  { -0.46648154448250878, 100, 90.000000000000000 },
-  { -0.067270772720654556, 100, 95.000000000000000 },
-  { -0.022983850491562267, 100, 100.00000000000000 },
+  { -1.7997139826255660e+116, 100, 5.0000000000000000, 0.0 },
+  { -8.5732263093288939e+85, 100, 10.000000000000000, 0.0 },
+  { -1.9270658593710037e+68, 100, 15.000000000000000, 0.0 },
+  { -7.2208893582950327e+55, 100, 20.000000000000000, 0.0 },
+  { -2.0868752613007361e+46, 100, 25.000000000000000, 0.0 },
+  { -4.2496124023610848e+38, 100, 30.000000000000000, 0.0 },
+  { -1.7042898348910030e+32, 100, 35.000000000000000, 0.0 },
+  { -6.3021565260722767e+26, 100, 40.000000000000000, 0.0 },
+  { -1.3199917400493998e+22, 100, 45.000000000000000, 0.0 },
+  { -1.1256928913265911e+18, 100, 50.000000000000000, 0.0 },
+  { -309801083340345.56, 100, 55.000000000000000, 0.0 },
+  { -232585620046.64404, 100, 60.000000000000000, 0.0 },
+  { -421135935.93755186, 100, 65.000000000000000, 0.0 },
+  { -1680637.4531202628, 100, 70.000000000000000, 0.0 },
+  { -13868.302591128748, 100, 75.000000000000000, 0.0 },
+  { -227.24385709173205, 100, 80.000000000000000, 0.0 },
+  { -7.2807038787138563, 100, 85.000000000000000, 0.0 },
+  { -0.46648154448250850, 100, 90.000000000000000, 0.0 },
+  { -0.067270772720654515, 100, 95.000000000000000, 0.0 },
+  { -0.022983850491562270, 100, 100.00000000000000, 0.0 },
 };
-const double toler016 = 2.5000000000000015e-12;
+const double toler016 = 2.5000000000000014e-11;
 
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
   void
-  test(const testcase_sph_neumann<Tp> (&data)[Num], Tp toler)
+  test(const testcase_sph_neumann<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
     unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::sph_neumann(data[i].n, data[i].x);
-       const Tp f0 = data[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::sph_neumann(data[i].n, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
index 49118ff..af0f2cb 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  assoc_laguerre
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for n=0, m=0.
-testcase_assoc_laguerre<double> data001[] = {
-  { 1.0000000000000000, 0, 0,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0, 0,
-          10.000000000000000 },
-  { 1.0000000000000000, 0, 0,
-          20.000000000000000 },
-  { 1.0000000000000000, 0, 0,
-          30.000000000000000 },
-  { 1.0000000000000000, 0, 0,
-          40.000000000000000 },
-  { 1.0000000000000000, 0, 0,
-          50.000000000000000 },
-  { 1.0000000000000000, 0, 0,
-          60.000000000000000 },
-  { 1.0000000000000000, 0, 0,
-          70.000000000000000 },
-  { 1.0000000000000000, 0, 0,
-          80.000000000000000 },
-  { 1.0000000000000000, 0, 0,
-          90.000000000000000 },
-  { 1.0000000000000000, 0, 0,
-          100.00000000000000 },
-};
-
-// Test function for n=0, m=0.
-template <typename Tp>
-void test001()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data001[i].n), Tp(data001[i].m),
-                   Tp(data001[i].x));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data001[11] =
+{
+  { 1.0000000000000000, 0, 0, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         20.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         30.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         40.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         50.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         60.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         70.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         80.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         90.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         100.00000000000000, 0.0 },
+};
+const double toler001 = 2.5000000000000020e-13;
 
 // Test data for n=0, m=1.
-testcase_assoc_laguerre<double> data002[] = {
-  { 1.0000000000000000, 0, 1,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0, 1,
-          10.000000000000000 },
-  { 1.0000000000000000, 0, 1,
-          20.000000000000000 },
-  { 1.0000000000000000, 0, 1,
-          30.000000000000000 },
-  { 1.0000000000000000, 0, 1,
-          40.000000000000000 },
-  { 1.0000000000000000, 0, 1,
-          50.000000000000000 },
-  { 1.0000000000000000, 0, 1,
-          60.000000000000000 },
-  { 1.0000000000000000, 0, 1,
-          70.000000000000000 },
-  { 1.0000000000000000, 0, 1,
-          80.000000000000000 },
-  { 1.0000000000000000, 0, 1,
-          90.000000000000000 },
-  { 1.0000000000000000, 0, 1,
-          100.00000000000000 },
-};
-
-// Test function for n=0, m=1.
-template <typename Tp>
-void test002()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data002)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data002[i].n), Tp(data002[i].m),
-                   Tp(data002[i].x));
-      const Tp f0 = data002[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data002[11] =
+{
+  { 1.0000000000000000, 0, 1, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 1, 
+         10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 1, 
+         20.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 1, 
+         30.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 1, 
+         40.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 1, 
+         50.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 1, 
+         60.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 1, 
+         70.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 1, 
+         80.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 1, 
+         90.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 1, 
+         100.00000000000000, 0.0 },
+};
+const double toler002 = 2.5000000000000020e-13;
 
 // Test data for n=0, m=2.
-testcase_assoc_laguerre<double> data003[] = {
-  { 1.0000000000000000, 0, 2,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0, 2,
-          10.000000000000000 },
-  { 1.0000000000000000, 0, 2,
-          20.000000000000000 },
-  { 1.0000000000000000, 0, 2,
-          30.000000000000000 },
-  { 1.0000000000000000, 0, 2,
-          40.000000000000000 },
-  { 1.0000000000000000, 0, 2,
-          50.000000000000000 },
-  { 1.0000000000000000, 0, 2,
-          60.000000000000000 },
-  { 1.0000000000000000, 0, 2,
-          70.000000000000000 },
-  { 1.0000000000000000, 0, 2,
-          80.000000000000000 },
-  { 1.0000000000000000, 0, 2,
-          90.000000000000000 },
-  { 1.0000000000000000, 0, 2,
-          100.00000000000000 },
-};
-
-// Test function for n=0, m=2.
-template <typename Tp>
-void test003()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data003)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data003[i].n), Tp(data003[i].m),
-                   Tp(data003[i].x));
-      const Tp f0 = data003[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data003[11] =
+{
+  { 1.0000000000000000, 0, 2, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 2, 
+         10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 2, 
+         20.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 2, 
+         30.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 2, 
+         40.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 2, 
+         50.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 2, 
+         60.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 2, 
+         70.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 2, 
+         80.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 2, 
+         90.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 2, 
+         100.00000000000000, 0.0 },
+};
+const double toler003 = 2.5000000000000020e-13;
 
 // Test data for n=0, m=5.
-testcase_assoc_laguerre<double> data004[] = {
-  { 1.0000000000000000, 0, 5,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0, 5,
-          10.000000000000000 },
-  { 1.0000000000000000, 0, 5,
-          20.000000000000000 },
-  { 1.0000000000000000, 0, 5,
-          30.000000000000000 },
-  { 1.0000000000000000, 0, 5,
-          40.000000000000000 },
-  { 1.0000000000000000, 0, 5,
-          50.000000000000000 },
-  { 1.0000000000000000, 0, 5,
-          60.000000000000000 },
-  { 1.0000000000000000, 0, 5,
-          70.000000000000000 },
-  { 1.0000000000000000, 0, 5,
-          80.000000000000000 },
-  { 1.0000000000000000, 0, 5,
-          90.000000000000000 },
-  { 1.0000000000000000, 0, 5,
-          100.00000000000000 },
-};
-
-// Test function for n=0, m=5.
-template <typename Tp>
-void test004()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data004)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data004[i].n), Tp(data004[i].m),
-                   Tp(data004[i].x));
-      const Tp f0 = data004[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data004[11] =
+{
+  { 1.0000000000000000, 0, 5, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5, 
+         10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5, 
+         20.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5, 
+         30.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5, 
+         40.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5, 
+         50.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5, 
+         60.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5, 
+         70.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5, 
+         80.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5, 
+         90.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5, 
+         100.00000000000000, 0.0 },
+};
+const double toler004 = 2.5000000000000020e-13;
 
 // Test data for n=0, m=10.
-testcase_assoc_laguerre<double> data005[] = {
-  { 1.0000000000000000, 0, 10,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0, 10,
-          10.000000000000000 },
-  { 1.0000000000000000, 0, 10,
-          20.000000000000000 },
-  { 1.0000000000000000, 0, 10,
-          30.000000000000000 },
-  { 1.0000000000000000, 0, 10,
-          40.000000000000000 },
-  { 1.0000000000000000, 0, 10,
-          50.000000000000000 },
-  { 1.0000000000000000, 0, 10,
-          60.000000000000000 },
-  { 1.0000000000000000, 0, 10,
-          70.000000000000000 },
-  { 1.0000000000000000, 0, 10,
-          80.000000000000000 },
-  { 1.0000000000000000, 0, 10,
-          90.000000000000000 },
-  { 1.0000000000000000, 0, 10,
-          100.00000000000000 },
-};
-
-// Test function for n=0, m=10.
-template <typename Tp>
-void test005()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data005)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data005[i].n), Tp(data005[i].m),
-                   Tp(data005[i].x));
-      const Tp f0 = data005[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data005[11] =
+{
+  { 1.0000000000000000, 0, 10, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 10, 
+         10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 10, 
+         20.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 10, 
+         30.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 10, 
+         40.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 10, 
+         50.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 10, 
+         60.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 10, 
+         70.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 10, 
+         80.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 10, 
+         90.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 10, 
+         100.00000000000000, 0.0 },
+};
+const double toler005 = 2.5000000000000020e-13;
 
 // Test data for n=0, m=20.
-testcase_assoc_laguerre<double> data006[] = {
-  { 1.0000000000000000, 0, 20,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0, 20,
-          10.000000000000000 },
-  { 1.0000000000000000, 0, 20,
-          20.000000000000000 },
-  { 1.0000000000000000, 0, 20,
-          30.000000000000000 },
-  { 1.0000000000000000, 0, 20,
-          40.000000000000000 },
-  { 1.0000000000000000, 0, 20,
-          50.000000000000000 },
-  { 1.0000000000000000, 0, 20,
-          60.000000000000000 },
-  { 1.0000000000000000, 0, 20,
-          70.000000000000000 },
-  { 1.0000000000000000, 0, 20,
-          80.000000000000000 },
-  { 1.0000000000000000, 0, 20,
-          90.000000000000000 },
-  { 1.0000000000000000, 0, 20,
-          100.00000000000000 },
-};
-
-// Test function for n=0, m=20.
-template <typename Tp>
-void test006()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data006)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data006[i].n), Tp(data006[i].m),
-                   Tp(data006[i].x));
-      const Tp f0 = data006[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data006[11] =
+{
+  { 1.0000000000000000, 0, 20, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 20, 
+         10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 20, 
+         20.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 20, 
+         30.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 20, 
+         40.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 20, 
+         50.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 20, 
+         60.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 20, 
+         70.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 20, 
+         80.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 20, 
+         90.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 20, 
+         100.00000000000000, 0.0 },
+};
+const double toler006 = 2.5000000000000020e-13;
 
 // Test data for n=0, m=50.
-testcase_assoc_laguerre<double> data007[] = {
-  { 1.0000000000000000, 0, 50,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0, 50,
-          10.000000000000000 },
-  { 1.0000000000000000, 0, 50,
-          20.000000000000000 },
-  { 1.0000000000000000, 0, 50,
-          30.000000000000000 },
-  { 1.0000000000000000, 0, 50,
-          40.000000000000000 },
-  { 1.0000000000000000, 0, 50,
-          50.000000000000000 },
-  { 1.0000000000000000, 0, 50,
-          60.000000000000000 },
-  { 1.0000000000000000, 0, 50,
-          70.000000000000000 },
-  { 1.0000000000000000, 0, 50,
-          80.000000000000000 },
-  { 1.0000000000000000, 0, 50,
-          90.000000000000000 },
-  { 1.0000000000000000, 0, 50,
-          100.00000000000000 },
-};
-
-// Test function for n=0, m=50.
-template <typename Tp>
-void test007()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data007)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data007[i].n), Tp(data007[i].m),
-                   Tp(data007[i].x));
-      const Tp f0 = data007[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data007[11] =
+{
+  { 1.0000000000000000, 0, 50, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 50, 
+         10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 50, 
+         20.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 50, 
+         30.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 50, 
+         40.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 50, 
+         50.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 50, 
+         60.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 50, 
+         70.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 50, 
+         80.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 50, 
+         90.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 50, 
+         100.00000000000000, 0.0 },
+};
+const double toler007 = 2.5000000000000020e-13;
 
 // Test data for n=0, m=100.
-testcase_assoc_laguerre<double> data008[] = {
-  { 1.0000000000000000, 0, 100,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0, 100,
-          10.000000000000000 },
-  { 1.0000000000000000, 0, 100,
-          20.000000000000000 },
-  { 1.0000000000000000, 0, 100,
-          30.000000000000000 },
-  { 1.0000000000000000, 0, 100,
-          40.000000000000000 },
-  { 1.0000000000000000, 0, 100,
-          50.000000000000000 },
-  { 1.0000000000000000, 0, 100,
-          60.000000000000000 },
-  { 1.0000000000000000, 0, 100,
-          70.000000000000000 },
-  { 1.0000000000000000, 0, 100,
-          80.000000000000000 },
-  { 1.0000000000000000, 0, 100,
-          90.000000000000000 },
-  { 1.0000000000000000, 0, 100,
-          100.00000000000000 },
-};
-
-// Test function for n=0, m=100.
-template <typename Tp>
-void test008()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data008)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data008[i].n), Tp(data008[i].m),
-                   Tp(data008[i].x));
-      const Tp f0 = data008[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data008[11] =
+{
+  { 1.0000000000000000, 0, 100, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 100, 
+         10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 100, 
+         20.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 100, 
+         30.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 100, 
+         40.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 100, 
+         50.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 100, 
+         60.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 100, 
+         70.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 100, 
+         80.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 100, 
+         90.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 100, 
+         100.00000000000000, 0.0 },
+};
+const double toler008 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=0.
-testcase_assoc_laguerre<double> data009[] = {
-  { 1.0000000000000000, 1, 0,
-          0.0000000000000000 },
-  { -9.0000000000000000, 1, 0,
-          10.000000000000000 },
-  { -19.000000000000000, 1, 0,
-          20.000000000000000 },
-  { -29.000000000000000, 1, 0,
-          30.000000000000000 },
-  { -39.000000000000000, 1, 0,
-          40.000000000000000 },
-  { -49.000000000000000, 1, 0,
-          50.000000000000000 },
-  { -59.000000000000000, 1, 0,
-          60.000000000000000 },
-  { -69.000000000000000, 1, 0,
-          70.000000000000000 },
-  { -79.000000000000000, 1, 0,
-          80.000000000000000 },
-  { -89.000000000000000, 1, 0,
-          90.000000000000000 },
-  { -99.000000000000000, 1, 0,
-          100.00000000000000 },
-};
-
-// Test function for n=1, m=0.
-template <typename Tp>
-void test009()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data009)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data009[i].n), Tp(data009[i].m),
-                   Tp(data009[i].x));
-      const Tp f0 = data009[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data009[11] =
+{
+  { 1.0000000000000000, 1, 0, 
+         0.0000000000000000, 0.0 },
+  { -9.0000000000000000, 1, 0, 
+         10.000000000000000, 0.0 },
+  { -19.000000000000000, 1, 0, 
+         20.000000000000000, 0.0 },
+  { -29.000000000000000, 1, 0, 
+         30.000000000000000, 0.0 },
+  { -39.000000000000000, 1, 0, 
+         40.000000000000000, 0.0 },
+  { -49.000000000000000, 1, 0, 
+         50.000000000000000, 0.0 },
+  { -59.000000000000000, 1, 0, 
+         60.000000000000000, 0.0 },
+  { -69.000000000000000, 1, 0, 
+         70.000000000000000, 0.0 },
+  { -79.000000000000000, 1, 0, 
+         80.000000000000000, 0.0 },
+  { -89.000000000000000, 1, 0, 
+         90.000000000000000, 0.0 },
+  { -99.000000000000000, 1, 0, 
+         100.00000000000000, 0.0 },
+};
+const double toler009 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=1.
-testcase_assoc_laguerre<double> data010[] = {
-  { 2.0000000000000000, 1, 1,
-          0.0000000000000000 },
-  { -8.0000000000000000, 1, 1,
-          10.000000000000000 },
-  { -18.000000000000000, 1, 1,
-          20.000000000000000 },
-  { -28.000000000000000, 1, 1,
-          30.000000000000000 },
-  { -38.000000000000000, 1, 1,
-          40.000000000000000 },
-  { -48.000000000000000, 1, 1,
-          50.000000000000000 },
-  { -58.000000000000000, 1, 1,
-          60.000000000000000 },
-  { -68.000000000000000, 1, 1,
-          70.000000000000000 },
-  { -78.000000000000000, 1, 1,
-          80.000000000000000 },
-  { -88.000000000000000, 1, 1,
-          90.000000000000000 },
-  { -98.000000000000000, 1, 1,
-          100.00000000000000 },
-};
-
-// Test function for n=1, m=1.
-template <typename Tp>
-void test010()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data010)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data010[i].n), Tp(data010[i].m),
-                   Tp(data010[i].x));
-      const Tp f0 = data010[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data010[11] =
+{
+  { 2.0000000000000000, 1, 1, 
+         0.0000000000000000, 0.0 },
+  { -8.0000000000000000, 1, 1, 
+         10.000000000000000, 0.0 },
+  { -18.000000000000000, 1, 1, 
+         20.000000000000000, 0.0 },
+  { -28.000000000000000, 1, 1, 
+         30.000000000000000, 0.0 },
+  { -38.000000000000000, 1, 1, 
+         40.000000000000000, 0.0 },
+  { -48.000000000000000, 1, 1, 
+         50.000000000000000, 0.0 },
+  { -58.000000000000000, 1, 1, 
+         60.000000000000000, 0.0 },
+  { -68.000000000000000, 1, 1, 
+         70.000000000000000, 0.0 },
+  { -78.000000000000000, 1, 1, 
+         80.000000000000000, 0.0 },
+  { -88.000000000000000, 1, 1, 
+         90.000000000000000, 0.0 },
+  { -98.000000000000000, 1, 1, 
+         100.00000000000000, 0.0 },
+};
+const double toler010 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=2.
-testcase_assoc_laguerre<double> data011[] = {
-  { 3.0000000000000000, 1, 2,
-          0.0000000000000000 },
-  { -7.0000000000000000, 1, 2,
-          10.000000000000000 },
-  { -17.000000000000000, 1, 2,
-          20.000000000000000 },
-  { -27.000000000000000, 1, 2,
-          30.000000000000000 },
-  { -37.000000000000000, 1, 2,
-          40.000000000000000 },
-  { -47.000000000000000, 1, 2,
-          50.000000000000000 },
-  { -57.000000000000000, 1, 2,
-          60.000000000000000 },
-  { -67.000000000000000, 1, 2,
-          70.000000000000000 },
-  { -77.000000000000000, 1, 2,
-          80.000000000000000 },
-  { -87.000000000000000, 1, 2,
-          90.000000000000000 },
-  { -97.000000000000000, 1, 2,
-          100.00000000000000 },
-};
-
-// Test function for n=1, m=2.
-template <typename Tp>
-void test011()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data011)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data011[i].n), Tp(data011[i].m),
-                   Tp(data011[i].x));
-      const Tp f0 = data011[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data011[11] =
+{
+  { 3.0000000000000000, 1, 2, 
+         0.0000000000000000, 0.0 },
+  { -7.0000000000000000, 1, 2, 
+         10.000000000000000, 0.0 },
+  { -17.000000000000000, 1, 2, 
+         20.000000000000000, 0.0 },
+  { -27.000000000000000, 1, 2, 
+         30.000000000000000, 0.0 },
+  { -37.000000000000000, 1, 2, 
+         40.000000000000000, 0.0 },
+  { -47.000000000000000, 1, 2, 
+         50.000000000000000, 0.0 },
+  { -57.000000000000000, 1, 2, 
+         60.000000000000000, 0.0 },
+  { -67.000000000000000, 1, 2, 
+         70.000000000000000, 0.0 },
+  { -77.000000000000000, 1, 2, 
+         80.000000000000000, 0.0 },
+  { -87.000000000000000, 1, 2, 
+         90.000000000000000, 0.0 },
+  { -97.000000000000000, 1, 2, 
+         100.00000000000000, 0.0 },
+};
+const double toler011 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=5.
-testcase_assoc_laguerre<double> data012[] = {
-  { 6.0000000000000000, 1, 5,
-          0.0000000000000000 },
-  { -4.0000000000000000, 1, 5,
-          10.000000000000000 },
-  { -14.000000000000000, 1, 5,
-          20.000000000000000 },
-  { -24.000000000000000, 1, 5,
-          30.000000000000000 },
-  { -34.000000000000000, 1, 5,
-          40.000000000000000 },
-  { -44.000000000000000, 1, 5,
-          50.000000000000000 },
-  { -54.000000000000000, 1, 5,
-          60.000000000000000 },
-  { -64.000000000000000, 1, 5,
-          70.000000000000000 },
-  { -74.000000000000000, 1, 5,
-          80.000000000000000 },
-  { -84.000000000000000, 1, 5,
-          90.000000000000000 },
-  { -94.000000000000000, 1, 5,
-          100.00000000000000 },
-};
-
-// Test function for n=1, m=5.
-template <typename Tp>
-void test012()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data012)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data012[i].n), Tp(data012[i].m),
-                   Tp(data012[i].x));
-      const Tp f0 = data012[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data012[11] =
+{
+  { 6.0000000000000000, 1, 5, 
+         0.0000000000000000, 0.0 },
+  { -4.0000000000000000, 1, 5, 
+         10.000000000000000, 0.0 },
+  { -14.000000000000000, 1, 5, 
+         20.000000000000000, 0.0 },
+  { -24.000000000000000, 1, 5, 
+         30.000000000000000, 0.0 },
+  { -34.000000000000000, 1, 5, 
+         40.000000000000000, 0.0 },
+  { -44.000000000000000, 1, 5, 
+         50.000000000000000, 0.0 },
+  { -54.000000000000000, 1, 5, 
+         60.000000000000000, 0.0 },
+  { -64.000000000000000, 1, 5, 
+         70.000000000000000, 0.0 },
+  { -74.000000000000000, 1, 5, 
+         80.000000000000000, 0.0 },
+  { -84.000000000000000, 1, 5, 
+         90.000000000000000, 0.0 },
+  { -94.000000000000000, 1, 5, 
+         100.00000000000000, 0.0 },
+};
+const double toler012 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=10.
-testcase_assoc_laguerre<double> data013[] = {
-  { 11.000000000000000, 1, 10,
-          0.0000000000000000 },
-  { 1.0000000000000000, 1, 10,
-          10.000000000000000 },
-  { -9.0000000000000000, 1, 10,
-          20.000000000000000 },
-  { -19.000000000000000, 1, 10,
-          30.000000000000000 },
-  { -29.000000000000000, 1, 10,
-          40.000000000000000 },
-  { -39.000000000000000, 1, 10,
-          50.000000000000000 },
-  { -49.000000000000000, 1, 10,
-          60.000000000000000 },
-  { -59.000000000000000, 1, 10,
-          70.000000000000000 },
-  { -69.000000000000000, 1, 10,
-          80.000000000000000 },
-  { -79.000000000000000, 1, 10,
-          90.000000000000000 },
-  { -89.000000000000000, 1, 10,
-          100.00000000000000 },
-};
-
-// Test function for n=1, m=10.
-template <typename Tp>
-void test013()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data013)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data013[i].n), Tp(data013[i].m),
-                   Tp(data013[i].x));
-      const Tp f0 = data013[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data013[11] =
+{
+  { 11.000000000000000, 1, 10, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1, 10, 
+         10.000000000000000, 0.0 },
+  { -9.0000000000000000, 1, 10, 
+         20.000000000000000, 0.0 },
+  { -19.000000000000000, 1, 10, 
+         30.000000000000000, 0.0 },
+  { -29.000000000000000, 1, 10, 
+         40.000000000000000, 0.0 },
+  { -39.000000000000000, 1, 10, 
+         50.000000000000000, 0.0 },
+  { -49.000000000000000, 1, 10, 
+         60.000000000000000, 0.0 },
+  { -59.000000000000000, 1, 10, 
+         70.000000000000000, 0.0 },
+  { -69.000000000000000, 1, 10, 
+         80.000000000000000, 0.0 },
+  { -79.000000000000000, 1, 10, 
+         90.000000000000000, 0.0 },
+  { -89.000000000000000, 1, 10, 
+         100.00000000000000, 0.0 },
+};
+const double toler013 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=20.
-testcase_assoc_laguerre<double> data014[] = {
-  { 21.000000000000000, 1, 20,
-          0.0000000000000000 },
-  { 11.000000000000000, 1, 20,
-          10.000000000000000 },
-  { 1.0000000000000000, 1, 20,
-          20.000000000000000 },
-  { -9.0000000000000000, 1, 20,
-          30.000000000000000 },
-  { -19.000000000000000, 1, 20,
-          40.000000000000000 },
-  { -29.000000000000000, 1, 20,
-          50.000000000000000 },
-  { -39.000000000000000, 1, 20,
-          60.000000000000000 },
-  { -49.000000000000000, 1, 20,
-          70.000000000000000 },
-  { -59.000000000000000, 1, 20,
-          80.000000000000000 },
-  { -69.000000000000000, 1, 20,
-          90.000000000000000 },
-  { -79.000000000000000, 1, 20,
-          100.00000000000000 },
-};
-
-// Test function for n=1, m=20.
-template <typename Tp>
-void test014()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data014)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data014[i].n), Tp(data014[i].m),
-                   Tp(data014[i].x));
-      const Tp f0 = data014[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data014[11] =
+{
+  { 21.000000000000000, 1, 20, 
+         0.0000000000000000, 0.0 },
+  { 11.000000000000000, 1, 20, 
+         10.000000000000000, 0.0 },
+  { 1.0000000000000000, 1, 20, 
+         20.000000000000000, 0.0 },
+  { -9.0000000000000000, 1, 20, 
+         30.000000000000000, 0.0 },
+  { -19.000000000000000, 1, 20, 
+         40.000000000000000, 0.0 },
+  { -29.000000000000000, 1, 20, 
+         50.000000000000000, 0.0 },
+  { -39.000000000000000, 1, 20, 
+         60.000000000000000, 0.0 },
+  { -49.000000000000000, 1, 20, 
+         70.000000000000000, 0.0 },
+  { -59.000000000000000, 1, 20, 
+         80.000000000000000, 0.0 },
+  { -69.000000000000000, 1, 20, 
+         90.000000000000000, 0.0 },
+  { -79.000000000000000, 1, 20, 
+         100.00000000000000, 0.0 },
+};
+const double toler014 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=50.
-testcase_assoc_laguerre<double> data015[] = {
-  { 51.000000000000000, 1, 50,
-          0.0000000000000000 },
-  { 41.000000000000000, 1, 50,
-          10.000000000000000 },
-  { 31.000000000000000, 1, 50,
-          20.000000000000000 },
-  { 21.000000000000000, 1, 50,
-          30.000000000000000 },
-  { 11.000000000000000, 1, 50,
-          40.000000000000000 },
-  { 1.0000000000000000, 1, 50,
-          50.000000000000000 },
-  { -9.0000000000000000, 1, 50,
-          60.000000000000000 },
-  { -19.000000000000000, 1, 50,
-          70.000000000000000 },
-  { -29.000000000000000, 1, 50,
-          80.000000000000000 },
-  { -39.000000000000000, 1, 50,
-          90.000000000000000 },
-  { -49.000000000000000, 1, 50,
-          100.00000000000000 },
-};
-
-// Test function for n=1, m=50.
-template <typename Tp>
-void test015()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data015)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data015[i].n), Tp(data015[i].m),
-                   Tp(data015[i].x));
-      const Tp f0 = data015[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data015[11] =
+{
+  { 51.000000000000000, 1, 50, 
+         0.0000000000000000, 0.0 },
+  { 41.000000000000000, 1, 50, 
+         10.000000000000000, 0.0 },
+  { 31.000000000000000, 1, 50, 
+         20.000000000000000, 0.0 },
+  { 21.000000000000000, 1, 50, 
+         30.000000000000000, 0.0 },
+  { 11.000000000000000, 1, 50, 
+         40.000000000000000, 0.0 },
+  { 1.0000000000000000, 1, 50, 
+         50.000000000000000, 0.0 },
+  { -9.0000000000000000, 1, 50, 
+         60.000000000000000, 0.0 },
+  { -19.000000000000000, 1, 50, 
+         70.000000000000000, 0.0 },
+  { -29.000000000000000, 1, 50, 
+         80.000000000000000, 0.0 },
+  { -39.000000000000000, 1, 50, 
+         90.000000000000000, 0.0 },
+  { -49.000000000000000, 1, 50, 
+         100.00000000000000, 0.0 },
+};
+const double toler015 = 2.5000000000000020e-13;
 
 // Test data for n=1, m=100.
-testcase_assoc_laguerre<double> data016[] = {
-  { 101.00000000000000, 1, 100,
-          0.0000000000000000 },
-  { 91.000000000000000, 1, 100,
-          10.000000000000000 },
-  { 81.000000000000000, 1, 100,
-          20.000000000000000 },
-  { 71.000000000000000, 1, 100,
-          30.000000000000000 },
-  { 61.000000000000000, 1, 100,
-          40.000000000000000 },
-  { 51.000000000000000, 1, 100,
-          50.000000000000000 },
-  { 41.000000000000000, 1, 100,
-          60.000000000000000 },
-  { 31.000000000000000, 1, 100,
-          70.000000000000000 },
-  { 21.000000000000000, 1, 100,
-          80.000000000000000 },
-  { 11.000000000000000, 1, 100,
-          90.000000000000000 },
-  { 1.0000000000000000, 1, 100,
-          100.00000000000000 },
-};
-
-// Test function for n=1, m=100.
-template <typename Tp>
-void test016()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data016)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data016[i].n), Tp(data016[i].m),
-                   Tp(data016[i].x));
-      const Tp f0 = data016[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data016[11] =
+{
+  { 101.00000000000000, 1, 100, 
+         0.0000000000000000, 0.0 },
+  { 91.000000000000000, 1, 100, 
+         10.000000000000000, 0.0 },
+  { 81.000000000000000, 1, 100, 
+         20.000000000000000, 0.0 },
+  { 71.000000000000000, 1, 100, 
+         30.000000000000000, 0.0 },
+  { 61.000000000000000, 1, 100, 
+         40.000000000000000, 0.0 },
+  { 51.000000000000000, 1, 100, 
+         50.000000000000000, 0.0 },
+  { 41.000000000000000, 1, 100, 
+         60.000000000000000, 0.0 },
+  { 31.000000000000000, 1, 100, 
+         70.000000000000000, 0.0 },
+  { 21.000000000000000, 1, 100, 
+         80.000000000000000, 0.0 },
+  { 11.000000000000000, 1, 100, 
+         90.000000000000000, 0.0 },
+  { 1.0000000000000000, 1, 100, 
+         100.00000000000000, 0.0 },
+};
+const double toler016 = 2.5000000000000020e-13;
 
 // Test data for n=2, m=0.
-testcase_assoc_laguerre<double> data017[] = {
-  { 1.0000000000000000, 2, 0,
-          0.0000000000000000 },
-  { 31.000000000000000, 2, 0,
-          10.000000000000000 },
-  { 161.00000000000000, 2, 0,
-          20.000000000000000 },
-  { 391.00000000000000, 2, 0,
-          30.000000000000000 },
-  { 721.00000000000000, 2, 0,
-          40.000000000000000 },
-  { 1151.0000000000000, 2, 0,
-          50.000000000000000 },
-  { 1681.0000000000000, 2, 0,
-          60.000000000000000 },
-  { 2311.0000000000000, 2, 0,
-          70.000000000000000 },
-  { 3041.0000000000000, 2, 0,
-          80.000000000000000 },
-  { 3871.0000000000000, 2, 0,
-          90.000000000000000 },
-  { 4801.0000000000000, 2, 0,
-          100.00000000000000 },
-};
-
-// Test function for n=2, m=0.
-template <typename Tp>
-void test017()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data017)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data017[i].n), Tp(data017[i].m),
-                   Tp(data017[i].x));
-      const Tp f0 = data017[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data017[11] =
+{
+  { 1.0000000000000000, 2, 0, 
+         0.0000000000000000, 0.0 },
+  { 31.000000000000000, 2, 0, 
+         10.000000000000000, 0.0 },
+  { 161.00000000000000, 2, 0, 
+         20.000000000000000, 0.0 },
+  { 391.00000000000000, 2, 0, 
+         30.000000000000000, 0.0 },
+  { 721.00000000000000, 2, 0, 
+         40.000000000000000, 0.0 },
+  { 1151.0000000000000, 2, 0, 
+         50.000000000000000, 0.0 },
+  { 1681.0000000000000, 2, 0, 
+         60.000000000000000, 0.0 },
+  { 2311.0000000000000, 2, 0, 
+         70.000000000000000, 0.0 },
+  { 3041.0000000000000, 2, 0, 
+         80.000000000000000, 0.0 },
+  { 3871.0000000000000, 2, 0, 
+         90.000000000000000, 0.0 },
+  { 4801.0000000000000, 2, 0, 
+         100.00000000000000, 0.0 },
+};
+const double toler017 = 2.5000000000000020e-13;
 
 // Test data for n=2, m=1.
-testcase_assoc_laguerre<double> data018[] = {
-  { 3.0000000000000000, 2, 1,
-          0.0000000000000000 },
-  { 23.000000000000000, 2, 1,
-          10.000000000000000 },
-  { 143.00000000000000, 2, 1,
-          20.000000000000000 },
-  { 363.00000000000000, 2, 1,
-          30.000000000000000 },
-  { 683.00000000000000, 2, 1,
-          40.000000000000000 },
-  { 1103.0000000000000, 2, 1,
-          50.000000000000000 },
-  { 1623.0000000000000, 2, 1,
-          60.000000000000000 },
-  { 2243.0000000000000, 2, 1,
-          70.000000000000000 },
-  { 2963.0000000000000, 2, 1,
-          80.000000000000000 },
-  { 3783.0000000000000, 2, 1,
-          90.000000000000000 },
-  { 4703.0000000000000, 2, 1,
-          100.00000000000000 },
-};
-
-// Test function for n=2, m=1.
-template <typename Tp>
-void test018()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data018)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data018[i].n), Tp(data018[i].m),
-                   Tp(data018[i].x));
-      const Tp f0 = data018[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data018[11] =
+{
+  { 3.0000000000000000, 2, 1, 
+         0.0000000000000000, 0.0 },
+  { 23.000000000000000, 2, 1, 
+         10.000000000000000, 0.0 },
+  { 143.00000000000000, 2, 1, 
+         20.000000000000000, 0.0 },
+  { 363.00000000000000, 2, 1, 
+         30.000000000000000, 0.0 },
+  { 683.00000000000000, 2, 1, 
+         40.000000000000000, 0.0 },
+  { 1103.0000000000000, 2, 1, 
+         50.000000000000000, 0.0 },
+  { 1623.0000000000000, 2, 1, 
+         60.000000000000000, 0.0 },
+  { 2243.0000000000000, 2, 1, 
+         70.000000000000000, 0.0 },
+  { 2963.0000000000000, 2, 1, 
+         80.000000000000000, 0.0 },
+  { 3783.0000000000000, 2, 1, 
+         90.000000000000000, 0.0 },
+  { 4703.0000000000000, 2, 1, 
+         100.00000000000000, 0.0 },
+};
+const double toler018 = 2.5000000000000020e-13;
 
 // Test data for n=2, m=2.
-testcase_assoc_laguerre<double> data019[] = {
-  { 6.0000000000000000, 2, 2,
-          0.0000000000000000 },
-  { 16.000000000000000, 2, 2,
-          10.000000000000000 },
-  { 126.00000000000000, 2, 2,
-          20.000000000000000 },
-  { 336.00000000000000, 2, 2,
-          30.000000000000000 },
-  { 646.00000000000000, 2, 2,
-          40.000000000000000 },
-  { 1056.0000000000000, 2, 2,
-          50.000000000000000 },
-  { 1566.0000000000000, 2, 2,
-          60.000000000000000 },
-  { 2176.0000000000000, 2, 2,
-          70.000000000000000 },
-  { 2886.0000000000000, 2, 2,
-          80.000000000000000 },
-  { 3696.0000000000000, 2, 2,
-          90.000000000000000 },
-  { 4606.0000000000000, 2, 2,
-          100.00000000000000 },
-};
-
-// Test function for n=2, m=2.
-template <typename Tp>
-void test019()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data019)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data019[i].n), Tp(data019[i].m),
-                   Tp(data019[i].x));
-      const Tp f0 = data019[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data019[11] =
+{
+  { 6.0000000000000000, 2, 2, 
+         0.0000000000000000, 0.0 },
+  { 16.000000000000000, 2, 2, 
+         10.000000000000000, 0.0 },
+  { 126.00000000000000, 2, 2, 
+         20.000000000000000, 0.0 },
+  { 336.00000000000000, 2, 2, 
+         30.000000000000000, 0.0 },
+  { 646.00000000000000, 2, 2, 
+         40.000000000000000, 0.0 },
+  { 1056.0000000000000, 2, 2, 
+         50.000000000000000, 0.0 },
+  { 1566.0000000000000, 2, 2, 
+         60.000000000000000, 0.0 },
+  { 2176.0000000000000, 2, 2, 
+         70.000000000000000, 0.0 },
+  { 2886.0000000000000, 2, 2, 
+         80.000000000000000, 0.0 },
+  { 3696.0000000000000, 2, 2, 
+         90.000000000000000, 0.0 },
+  { 4606.0000000000000, 2, 2, 
+         100.00000000000000, 0.0 },
+};
+const double toler019 = 2.5000000000000020e-13;
 
 // Test data for n=2, m=5.
-testcase_assoc_laguerre<double> data020[] = {
-  { 21.000000000000000, 2, 5,
-          0.0000000000000000 },
-  { 0.99999999999999645, 2, 5,
-          10.000000000000000 },
-  { 81.000000000000000, 2, 5,
-          20.000000000000000 },
-  { 261.00000000000000, 2, 5,
-          30.000000000000000 },
-  { 541.00000000000000, 2, 5,
-          40.000000000000000 },
-  { 921.00000000000000, 2, 5,
-          50.000000000000000 },
-  { 1401.0000000000000, 2, 5,
-          60.000000000000000 },
-  { 1981.0000000000000, 2, 5,
-          70.000000000000000 },
-  { 2661.0000000000000, 2, 5,
-          80.000000000000000 },
-  { 3441.0000000000000, 2, 5,
-          90.000000000000000 },
-  { 4321.0000000000000, 2, 5,
-          100.00000000000000 },
-};
-
-// Test function for n=2, m=5.
-template <typename Tp>
-void test020()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data020)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data020[i].n), Tp(data020[i].m),
-                   Tp(data020[i].x));
-      const Tp f0 = data020[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.5519144009631418e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 4.5519144009631623e-15
+// mean(f - f_GSL): 4.1381040008755832e-16
+// variance(f - f_GSL): 1.8836295194268761e-32
+// stddev(f - f_GSL): 1.3724538314372823e-16
+const testcase_assoc_laguerre<double>
+data020[11] =
+{
+  { 21.000000000000000, 2, 5, 
+         0.0000000000000000, 0.0 },
+  { 0.99999999999999545, 2, 5, 
+         10.000000000000000, 0.0 },
+  { 81.000000000000000, 2, 5, 
+         20.000000000000000, 0.0 },
+  { 261.00000000000000, 2, 5, 
+         30.000000000000000, 0.0 },
+  { 541.00000000000000, 2, 5, 
+         40.000000000000000, 0.0 },
+  { 921.00000000000000, 2, 5, 
+         50.000000000000000, 0.0 },
+  { 1401.0000000000000, 2, 5, 
+         60.000000000000000, 0.0 },
+  { 1981.0000000000000, 2, 5, 
+         70.000000000000000, 0.0 },
+  { 2661.0000000000000, 2, 5, 
+         80.000000000000000, 0.0 },
+  { 3441.0000000000000, 2, 5, 
+         90.000000000000000, 0.0 },
+  { 4321.0000000000000, 2, 5, 
+         100.00000000000000, 0.0 },
+};
+const double toler020 = 2.5000000000000020e-13;
 
 // Test data for n=2, m=10.
-testcase_assoc_laguerre<double> data021[] = {
-  { 66.000000000000000, 2, 10,
-          0.0000000000000000 },
-  { -4.0000000000000089, 2, 10,
-          10.000000000000000 },
-  { 25.999999999999964, 2, 10,
-          20.000000000000000 },
-  { 156.00000000000000, 2, 10,
-          30.000000000000000 },
-  { 386.00000000000000, 2, 10,
-          40.000000000000000 },
-  { 716.00000000000000, 2, 10,
-          50.000000000000000 },
-  { 1146.0000000000000, 2, 10,
-          60.000000000000000 },
-  { 1676.0000000000000, 2, 10,
-          70.000000000000000 },
-  { 2306.0000000000000, 2, 10,
-          80.000000000000000 },
-  { 3036.0000000000000, 2, 10,
-          90.000000000000000 },
-  { 3866.0000000000000, 2, 10,
-          100.00000000000000 },
-};
-
-// Test function for n=2, m=10.
-template <typename Tp>
-void test021()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data021)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data021[i].n), Tp(data021[i].m),
-                   Tp(data021[i].x));
-      const Tp f0 = data021[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.5527136788005009e-14 at index 2
+// max(|f - f_GSL| / |f_GSL|): 2.4424906541753385e-15
+// mean(f - f_GSL): 4.1179181277005809e-15
+// variance(f - f_GSL): 1.8652974677089562e-30
+// stddev(f - f_GSL): 1.3657589346985639e-15
+const testcase_assoc_laguerre<double>
+data021[11] =
+{
+  { 66.000000000000000, 2, 10, 
+         0.0000000000000000, 0.0 },
+  { -4.0000000000000098, 2, 10, 
+         10.000000000000000, 0.0 },
+  { 25.999999999999964, 2, 10, 
+         20.000000000000000, 0.0 },
+  { 156.00000000000000, 2, 10, 
+         30.000000000000000, 0.0 },
+  { 386.00000000000000, 2, 10, 
+         40.000000000000000, 0.0 },
+  { 716.00000000000000, 2, 10, 
+         50.000000000000000, 0.0 },
+  { 1146.0000000000000, 2, 10, 
+         60.000000000000000, 0.0 },
+  { 1676.0000000000000, 2, 10, 
+         70.000000000000000, 0.0 },
+  { 2306.0000000000000, 2, 10, 
+         80.000000000000000, 0.0 },
+  { 3036.0000000000000, 2, 10, 
+         90.000000000000000, 0.0 },
+  { 3866.0000000000000, 2, 10, 
+         100.00000000000000, 0.0 },
+};
+const double toler021 = 2.5000000000000020e-13;
 
 // Test data for n=2, m=20.
-testcase_assoc_laguerre<double> data022[] = {
-  { 231.00000000000000, 2, 20,
-          0.0000000000000000 },
-  { 61.000000000000206, 2, 20,
-          10.000000000000000 },
-  { -8.9999999999999982, 2, 20,
-          20.000000000000000 },
-  { 21.000000000000135, 2, 20,
-          30.000000000000000 },
-  { 151.00000000000054, 2, 20,
-          40.000000000000000 },
-  { 381.00000000000000, 2, 20,
-          50.000000000000000 },
-  { 711.00000000000000, 2, 20,
-          60.000000000000000 },
-  { 1141.0000000000000, 2, 20,
-          70.000000000000000 },
-  { 1670.9999999999998, 2, 20,
-          80.000000000000000 },
-  { 2301.0000000000000, 2, 20,
-          90.000000000000000 },
-  { 3031.0000000000000, 2, 20,
-          100.00000000000000 },
-};
-
-// Test function for n=2, m=20.
-template <typename Tp>
-void test022()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data022)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data022[i].n), Tp(data022[i].m),
-                   Tp(data022[i].x));
-      const Tp f0 = data022[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+// max(|f - f_GSL|): 5.6843418860808015e-13 at index 4
+// max(|f - f_GSL| / |f_GSL|): 5.9211894646674663e-15
+// mean(f - f_GSL): -6.0557619525008543e-14
+// variance(f - f_GSL): 4.0339478107892650e-28
+// stddev(f - f_GSL): 2.0084690216155350e-14
+const testcase_assoc_laguerre<double>
+data022[11] =
+{
+  { 231.00000000000000, 2, 20, 
+         0.0000000000000000, 0.0 },
+  { 61.000000000000206, 2, 20, 
+         10.000000000000000, 0.0 },
+  { -9.0000000000000053, 2, 20, 
+         20.000000000000000, 0.0 },
+  { 21.000000000000124, 2, 20, 
+         30.000000000000000, 0.0 },
+  { 151.00000000000057, 2, 20, 
+         40.000000000000000, 0.0 },
+  { 381.00000000000000, 2, 20, 
+         50.000000000000000, 0.0 },
+  { 711.00000000000000, 2, 20, 
+         60.000000000000000, 0.0 },
+  { 1141.0000000000000, 2, 20, 
+         70.000000000000000, 0.0 },
+  { 1670.9999999999998, 2, 20, 
+         80.000000000000000, 0.0 },
+  { 2301.0000000000000, 2, 20, 
+         90.000000000000000, 0.0 },
+  { 3031.0000000000000, 2, 20, 
+         100.00000000000000, 0.0 },
+};
+const double toler022 = 5.0000000000000039e-13;
 
 // Test data for n=2, m=50.
-testcase_assoc_laguerre<double> data023[] = {
-  { 1326.0000000000000, 2, 50,
-          0.0000000000000000 },
-  { 855.99999999999716, 2, 50,
-          10.000000000000000 },
-  { 485.99999999999829, 2, 50,
-          20.000000000000000 },
-  { 215.99999999999935, 2, 50,
-          30.000000000000000 },
-  { 45.999999999999787, 2, 50,
-          40.000000000000000 },
-  { -23.999999999999684, 2, 50,
-          50.000000000000000 },
-  { 6.0000000000001217, 2, 50,
-          60.000000000000000 },
-  { 135.99999999999972, 2, 50,
-          70.000000000000000 },
-  { 365.99999999999892, 2, 50,
-          80.000000000000000 },
-  { 695.99999999999784, 2, 50,
-          90.000000000000000 },
-  { 1125.9999999999964, 2, 50,
-          100.00000000000000 },
-};
-
-// Test function for n=2, m=50.
-template <typename Tp>
-void test023()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data023)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data023[i].n), Tp(data023[i].m),
-                   Tp(data023[i].x));
-      const Tp f0 = data023[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-}
+// max(|f - f_GSL|): 3.6379788070917130e-12 at index 10
+// max(|f - f_GSL| / |f_GSL|): 1.9243865760169750e-14
+// mean(f - f_GSL): 1.1085274112784562e-12
+// variance(f - f_GSL): 7.0379368001597960e-25
+// stddev(f - f_GSL): 8.3892412053533160e-13
+const testcase_assoc_laguerre<double>
+data023[11] =
+{
+  { 1326.0000000000000, 2, 50, 
+         0.0000000000000000, 0.0 },
+  { 855.99999999999693, 2, 50, 
+         10.000000000000000, 0.0 },
+  { 485.99999999999835, 2, 50, 
+         20.000000000000000, 0.0 },
+  { 215.99999999999937, 2, 50, 
+         30.000000000000000, 0.0 },
+  { 45.999999999999829, 2, 50, 
+         40.000000000000000, 0.0 },
+  { -23.999999999999538, 2, 50, 
+         50.000000000000000, 0.0 },
+  { 6.0000000000001057, 2, 50, 
+         60.000000000000000, 0.0 },
+  { 135.99999999999963, 2, 50, 
+         70.000000000000000, 0.0 },
+  { 365.99999999999892, 2, 50, 
+         80.000000000000000, 0.0 },
+  { 695.99999999999784, 2, 50, 
+         90.000000000000000, 0.0 },
+  { 1125.9999999999964, 2, 50, 
+         100.00000000000000, 0.0 },
+};
+const double toler023 = 1.0000000000000008e-12;
 
 // Test data for n=2, m=100.
-testcase_assoc_laguerre<double> data024[] = {
-  { 5151.0000000000000, 2, 100,
-          0.0000000000000000 },
-  { 4181.0000000000655, 2, 100,
-          10.000000000000000 },
-  { 3311.0000000000518, 2, 100,
-          20.000000000000000 },
-  { 2541.0000000000400, 2, 100,
-          30.000000000000000 },
-  { 1871.0000000000291, 2, 100,
-          40.000000000000000 },
-  { 1301.0000000000207, 2, 100,
-          50.000000000000000 },
-  { 831.00000000001364, 2, 100,
-          60.000000000000000 },
-  { 461.00000000000682, 2, 100,
-          70.000000000000000 },
-  { 191.00000000000227, 2, 100,
-          80.000000000000000 },
-  { 21.000000000000128, 2, 100,
-          90.000000000000000 },
-  { -49.000000000000369, 2, 100,
-          100.00000000000000 },
-};
-
-// Test function for n=2, m=100.
-template <typename Tp>
-void test024()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data024)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data024[i].n), Tp(data024[i].m),
-                   Tp(data024[i].x));
-      const Tp f0 = data024[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+// max(|f - f_GSL|): 6.5483618527650833e-11 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.6416871873157281e-14
+// mean(f - f_GSL): -2.0930328177696950e-11
+// variance(f - f_GSL): 4.7796831888707054e-23
+// stddev(f - f_GSL): 6.9135252866180405e-12
+const testcase_assoc_laguerre<double>
+data024[11] =
+{
+  { 5151.0000000000000, 2, 100, 
+         0.0000000000000000, 0.0 },
+  { 4181.0000000000655, 2, 100, 
+         10.000000000000000, 0.0 },
+  { 3311.0000000000518, 2, 100, 
+         20.000000000000000, 0.0 },
+  { 2541.0000000000400, 2, 100, 
+         30.000000000000000, 0.0 },
+  { 1871.0000000000291, 2, 100, 
+         40.000000000000000, 0.0 },
+  { 1301.0000000000207, 2, 100, 
+         50.000000000000000, 0.0 },
+  { 831.00000000001364, 2, 100, 
+         60.000000000000000, 0.0 },
+  { 461.00000000000682, 2, 100, 
+         70.000000000000000, 0.0 },
+  { 191.00000000000250, 2, 100, 
+         80.000000000000000, 0.0 },
+  { 21.000000000000046, 2, 100, 
+         90.000000000000000, 0.0 },
+  { -48.999999999999915, 2, 100, 
+         100.00000000000000, 0.0 },
+};
+const double toler024 = 1.0000000000000008e-12;
 
 // Test data for n=5, m=0.
-testcase_assoc_laguerre<double> data025[] = {
-  { 1.0000000000000000, 5, 0,
-          0.0000000000000000 },
-  { 34.333333333333329, 5, 0,
-          10.000000000000000 },
-  { -4765.6666666666670, 5, 0,
-          20.000000000000000 },
-  { -74399.000000000000, 5, 0,
-          30.000000000000000 },
-  { -418865.66666666663, 5, 0,
-          40.000000000000000 },
-  { -1498165.6666666665, 5, 0,
-          50.000000000000000 },
-  { -4122299.0000000000, 5, 0,
-          60.000000000000000 },
-  { -9551265.6666666679, 5, 0,
-          70.000000000000000 },
-  { -19595065.666666664, 5, 0,
-          80.000000000000000 },
-  { -36713699.000000000, 5, 0,
-          90.000000000000000 },
-  { -64117165.666666664, 5, 0,
-          100.00000000000000 },
-};
-
-// Test function for n=5, m=0.
-template <typename Tp>
-void test025()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data025)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data025[i].n), Tp(data025[i].m),
-                   Tp(data025[i].x));
-      const Tp f0 = data025[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 7.4505805969238281e-09 at index 10
+// max(|f - f_GSL| / |f_GSL|): 1.9501553136894460e-16
+// mean(f - f_GSL): -5.1328573714603078e-10
+// variance(f - f_GSL): 5.2938665968649395e-18
+// stddev(f - f_GSL): 2.3008404109944130e-09
+const testcase_assoc_laguerre<double>
+data025[11] =
+{
+  { 1.0000000000000000, 5, 0, 
+         0.0000000000000000, 0.0 },
+  { 34.333333333333329, 5, 0, 
+         10.000000000000000, 0.0 },
+  { -4765.6666666666670, 5, 0, 
+         20.000000000000000, 0.0 },
+  { -74399.000000000000, 5, 0, 
+         30.000000000000000, 0.0 },
+  { -418865.66666666663, 5, 0, 
+         40.000000000000000, 0.0 },
+  { -1498165.6666666665, 5, 0, 
+         50.000000000000000, 0.0 },
+  { -4122299.0000000000, 5, 0, 
+         60.000000000000000, 0.0 },
+  { -9551265.6666666679, 5, 0, 
+         70.000000000000000, 0.0 },
+  { -19595065.666666664, 5, 0, 
+         80.000000000000000, 0.0 },
+  { -36713699.000000000, 5, 0, 
+         90.000000000000000, 0.0 },
+  { -64117165.666666664, 5, 0, 
+         100.00000000000000, 0.0 },
+};
+const double toler025 = 2.5000000000000020e-13;
 
 // Test data for n=5, m=1.
-testcase_assoc_laguerre<double> data026[] = {
-  { 6.0000000000000000, 5, 1,
-          0.0000000000000000 },
-  { 22.666666666666661, 5, 1,
-          10.000000000000000 },
-  { -2960.6666666666661, 5, 1,
-          20.000000000000000 },
-  { -58944.000000000000, 5, 1,
-          30.000000000000000 },
-  { -357927.33333333326, 5, 1,
-          40.000000000000000 },
-  { -1329910.6666666665, 5, 1,
-          50.000000000000000 },
-  { -3744894.0000000000, 5, 1,
-          60.000000000000000 },
-  { -8812877.3333333321, 5, 1,
-          70.000000000000000 },
-  { -18283860.666666664, 5, 1,
-          80.000000000000000 },
-  { -34547844.000000000, 5, 1,
-          90.000000000000000 },
-  { -60734827.333333336, 5, 1,
-          100.00000000000000 },
-};
-
-// Test function for n=5, m=1.
-template <typename Tp>
-void test026()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data026)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data026[i].n), Tp(data026[i].m),
-                   Tp(data026[i].x));
-      const Tp f0 = data026[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.7252902984619141e-09 at index 8
+// max(|f - f_GSL| / |f_GSL|): 3.1347473636475015e-16
+// mean(f - f_GSL): -3.6516147681388907e-10
+// variance(f - f_GSL): 1.4667719456379050e-20
+// stddev(f - f_GSL): 1.2111036064837331e-10
+const testcase_assoc_laguerre<double>
+data026[11] =
+{
+  { 6.0000000000000000, 5, 1, 
+         0.0000000000000000, 0.0 },
+  { 22.666666666666661, 5, 1, 
+         10.000000000000000, 0.0 },
+  { -2960.6666666666661, 5, 1, 
+         20.000000000000000, 0.0 },
+  { -58944.000000000000, 5, 1, 
+         30.000000000000000, 0.0 },
+  { -357927.33333333326, 5, 1, 
+         40.000000000000000, 0.0 },
+  { -1329910.6666666665, 5, 1, 
+         50.000000000000000, 0.0 },
+  { -3744894.0000000000, 5, 1, 
+         60.000000000000000, 0.0 },
+  { -8812877.3333333321, 5, 1, 
+         70.000000000000000, 0.0 },
+  { -18283860.666666664, 5, 1, 
+         80.000000000000000, 0.0 },
+  { -34547844.000000000, 5, 1, 
+         90.000000000000000, 0.0 },
+  { -60734827.333333336, 5, 1, 
+         100.00000000000000, 0.0 },
+};
+const double toler026 = 2.5000000000000020e-13;
 
 // Test data for n=5, m=2.
-testcase_assoc_laguerre<double> data027[] = {
-  { 21.000000000000000, 5, 2,
-          0.0000000000000000 },
-  { 4.3333333333333339, 5, 2,
-          10.000000000000000 },
-  { -1679.0000000000000, 5, 2,
-          20.000000000000000 },
-  { -46029.000000000000, 5, 2,
-          30.000000000000000 },
-  { -304045.66666666669, 5, 2,
-          40.000000000000000 },
-  { -1176729.0000000002, 5, 2,
-          50.000000000000000 },
-  { -3395079.0000000000, 5, 2,
-          60.000000000000000 },
-  { -8120095.6666666660, 5, 2,
-          70.000000000000000 },
-  { -17042778.999999996, 5, 2,
-          80.000000000000000 },
-  { -32484129.000000000, 5, 2,
-          90.000000000000000 },
-  { -57495145.666666664, 5, 2,
-          100.00000000000000 },
-};
-
-// Test function for n=5, m=2.
-template <typename Tp>
-void test027()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data027)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data027[i].n), Tp(data027[i].m),
-                   Tp(data027[i].x));
-      const Tp f0 = data027[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_laguerre<double>
+data027[11] =
+{
+  { 21.000000000000000, 5, 2, 
+         0.0000000000000000, 0.0 },
+  { 4.3333333333333339, 5, 2, 
+         10.000000000000000, 0.0 },
+  { -1679.0000000000000, 5, 2, 
+         20.000000000000000, 0.0 },
+  { -46029.000000000000, 5, 2, 
+         30.000000000000000, 0.0 },
+  { -304045.66666666669, 5, 2, 
+         40.000000000000000, 0.0 },
+  { -1176729.0000000002, 5, 2, 
+         50.000000000000000, 0.0 },
+  { -3395079.0000000000, 5, 2, 
+         60.000000000000000, 0.0 },
+  { -8120095.6666666660, 5, 2, 
+         70.000000000000000, 0.0 },
+  { -17042778.999999996, 5, 2, 
+         80.000000000000000, 0.0 },
+  { -32484129.000000000, 5, 2, 
+         90.000000000000000, 0.0 },
+  { -57495145.666666664, 5, 2, 
+         100.00000000000000, 0.0 },
+};
+const double toler027 = 2.5000000000000020e-13;
 
 // Test data for n=5, m=5.
-testcase_assoc_laguerre<double> data028[] = {
-  { 252.00000000000000, 5, 5,
-          0.0000000000000000 },
-  { -14.666666666666657, 5, 5,
-          10.000000000000000 },
-  { 51.999999999999957, 5, 5,
-          20.000000000000000 },
-  { -19548.000000000000, 5, 5,
-          30.000000000000000 },
-  { -178814.66666666660, 5, 5,
-          40.000000000000000 },
-  { -797747.99999999977, 5, 5,
-          50.000000000000000 },
-  { -2496348.0000000000, 5, 5,
-          60.000000000000000 },
-  { -6294614.6666666660, 5, 5,
-          70.000000000000000 },
-  { -13712547.999999996, 5, 5,
-          80.000000000000000 },
-  { -26870147.999999993, 5, 5,
-          90.000000000000000 },
-  { -48587414.666666672, 5, 5,
-          100.00000000000000 },
-};
-
-// Test function for n=5, m=5.
-template <typename Tp>
-void test028()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data028)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data028[i].n), Tp(data028[i].m),
-                   Tp(data028[i].x));
-      const Tp f0 = data028[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 7.4505805969238281e-09 at index 9
+// max(|f - f_GSL| / |f_GSL|): 1.7763568394002536e-15
+// mean(f - f_GSL): -1.0450849882462617e-09
+// variance(f - f_GSL): 1.2014228959234583e-19
+// stddev(f - f_GSL): 3.4661547800458338e-10
+const testcase_assoc_laguerre<double>
+data028[11] =
+{
+  { 252.00000000000000, 5, 5, 
+         0.0000000000000000, 0.0 },
+  { -14.666666666666654, 5, 5, 
+         10.000000000000000, 0.0 },
+  { 51.999999999999908, 5, 5, 
+         20.000000000000000, 0.0 },
+  { -19548.000000000000, 5, 5, 
+         30.000000000000000, 0.0 },
+  { -178814.66666666660, 5, 5, 
+         40.000000000000000, 0.0 },
+  { -797747.99999999977, 5, 5, 
+         50.000000000000000, 0.0 },
+  { -2496348.0000000000, 5, 5, 
+         60.000000000000000, 0.0 },
+  { -6294614.6666666660, 5, 5, 
+         70.000000000000000, 0.0 },
+  { -13712547.999999996, 5, 5, 
+         80.000000000000000, 0.0 },
+  { -26870147.999999993, 5, 5, 
+         90.000000000000000, 0.0 },
+  { -48587414.666666672, 5, 5, 
+         100.00000000000000, 0.0 },
+};
+const double toler028 = 2.5000000000000020e-13;
 
 // Test data for n=5, m=10.
-testcase_assoc_laguerre<double> data029[] = {
-  { 3003.0000000000000, 5, 10,
-          0.0000000000000000 },
-  { 19.666666666666668, 5, 10,
-          10.000000000000000 },
-  { 36.333333333333272, 5, 10,
-          20.000000000000000 },
-  { -1947.0000000000000, 5, 10,
-          30.000000000000000 },
-  { -60930.333333333314, 5, 10,
-          40.000000000000000 },
-  { -381913.66666666651, 5, 10,
-          50.000000000000000 },
-  { -1419897.0000000000, 5, 10,
-          60.000000000000000 },
-  { -3979880.3333333330, 5, 10,
-          70.000000000000000 },
-  { -9316863.6666666642, 5, 10,
-          80.000000000000000 },
-  { -19235847.000000000, 5, 10,
-          90.000000000000000 },
-  { -36191830.333333328, 5, 10,
-          100.00000000000000 },
-};
-
-// Test function for n=5, m=10.
-template <typename Tp>
-void test029()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data029)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data029[i].n), Tp(data029[i].m),
-                   Tp(data029[i].x));
-      const Tp f0 = data029[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 7.4505805969238281e-09 at index 10
+// max(|f - f_GSL| / |f_GSL|): 1.9556222085140405e-15
+// mean(f - f_GSL): -9.4849348577306296e-10
+// variance(f - f_GSL): 4.6504850481092197e-18
+// stddev(f - f_GSL): 2.1564983301892953e-09
+const testcase_assoc_laguerre<double>
+data029[11] =
+{
+  { 3003.0000000000000, 5, 10, 
+         0.0000000000000000, 0.0 },
+  { 19.666666666666668, 5, 10, 
+         10.000000000000000, 0.0 },
+  { 36.333333333333272, 5, 10, 
+         20.000000000000000, 0.0 },
+  { -1947.0000000000000, 5, 10, 
+         30.000000000000000, 0.0 },
+  { -60930.333333333314, 5, 10, 
+         40.000000000000000, 0.0 },
+  { -381913.66666666651, 5, 10, 
+         50.000000000000000, 0.0 },
+  { -1419897.0000000000, 5, 10, 
+         60.000000000000000, 0.0 },
+  { -3979880.3333333330, 5, 10, 
+         70.000000000000000, 0.0 },
+  { -9316863.6666666642, 5, 10, 
+         80.000000000000000, 0.0 },
+  { -19235847.000000000, 5, 10, 
+         90.000000000000000, 0.0 },
+  { -36191830.333333328, 5, 10, 
+         100.00000000000000, 0.0 },
+};
+const double toler029 = 2.5000000000000020e-13;
 
 // Test data for n=5, m=20.
-testcase_assoc_laguerre<double> data030[] = {
-  { 53130.000000000000, 5, 20,
-          0.0000000000000000 },
-  { 1213.3333333333335, 5, 20,
-          10.000000000000000 },
-  { 129.99999999999963, 5, 20,
-          20.000000000000000 },
-  { -119.99999999999974, 5, 20,
-          30.000000000000000 },
-  { 463.33333333333320, 5, 20,
-          40.000000000000000 },
-  { -48120.000000000015, 5, 20,
-          50.000000000000000 },
-  { -345870.00000000017, 5, 20,
-          60.000000000000000 },
-  { -1342786.6666666667, 5, 20,
-          70.000000000000000 },
-  { -3838870.0000000009, 5, 20,
-          80.000000000000000 },
-  { -9084120.0000000000, 5, 20,
-          90.000000000000000 },
-  { -18878536.666666668, 5, 20,
-          100.00000000000000 },
-};
-
-// Test function for n=5, m=20.
-template <typename Tp>
-void test030()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data030)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data030[i].n), Tp(data030[i].m),
-                   Tp(data030[i].x));
-      const Tp f0 = data030[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.8626451492309570e-09 at index 8
+// max(|f - f_GSL| / |f_GSL|): 2.8421709430404088e-15
+// mean(f - f_GSL): 1.8654330605469030e-10
+// variance(f - f_GSL): 3.8278245537195241e-21
+// stddev(f - f_GSL): 6.1869415333584047e-11
+const testcase_assoc_laguerre<double>
+data030[11] =
+{
+  { 53130.000000000000, 5, 20, 
+         0.0000000000000000, 0.0 },
+  { 1213.3333333333335, 5, 20, 
+         10.000000000000000, 0.0 },
+  { 129.99999999999963, 5, 20, 
+         20.000000000000000, 0.0 },
+  { -119.99999999999974, 5, 20, 
+         30.000000000000000, 0.0 },
+  { 463.33333333333320, 5, 20, 
+         40.000000000000000, 0.0 },
+  { -48120.000000000015, 5, 20, 
+         50.000000000000000, 0.0 },
+  { -345870.00000000017, 5, 20, 
+         60.000000000000000, 0.0 },
+  { -1342786.6666666667, 5, 20, 
+         70.000000000000000, 0.0 },
+  { -3838870.0000000009, 5, 20, 
+         80.000000000000000, 0.0 },
+  { -9084120.0000000000, 5, 20, 
+         90.000000000000000, 0.0 },
+  { -18878536.666666668, 5, 20, 
+         100.00000000000000, 0.0 },
+};
+const double toler030 = 2.5000000000000020e-13;
 
 // Test data for n=5, m=50.
-testcase_assoc_laguerre<double> data031[] = {
-  { 3478761.0000000000, 5, 50,
-          0.0000000000000000 },
-  { 1154544.3333333335, 5, 50,
-          10.000000000000000 },
-  { 264661.00000000006, 5, 50,
-          20.000000000000000 },
-  { 24111.000000000000, 5, 50,
-          30.000000000000000 },
-  { -2105.6666666666665, 5, 50,
-          40.000000000000000 },
-  { 1011.0000000000000, 5, 50,
-          50.000000000000000 },
-  { -1538.9999999999955, 5, 50,
-          60.000000000000000 },
-  { 5244.3333333333449, 5, 50,
-          70.000000000000000 },
-  { -13639.000000000015, 5, 50,
-          80.000000000000000 },
-  { -243189.00000000006, 5, 50,
-          90.000000000000000 },
-  { -1118405.6666666667, 5, 50,
-          100.00000000000000 },
-};
-
-// Test function for n=5, m=50.
-template <typename Tp>
-void test031()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data031)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data031[i].n), Tp(data031[i].m),
-                   Tp(data031[i].x));
-      const Tp f0 = data031[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 5.8207660913467407e-11 at index 9
+// max(|f - f_GSL| / |f_GSL|): 8.3212917817998576e-15
+// mean(f - f_GSL): 2.5837917664003642e-12
+// variance(f - f_GSL): 7.3435778813301465e-25
+// stddev(f - f_GSL): 8.5694678255596164e-13
+const testcase_assoc_laguerre<double>
+data031[11] =
+{
+  { 3478761.0000000000, 5, 50, 
+         0.0000000000000000, 0.0 },
+  { 1154544.3333333335, 5, 50, 
+         10.000000000000000, 0.0 },
+  { 264661.00000000006, 5, 50, 
+         20.000000000000000, 0.0 },
+  { 24111.000000000033, 5, 50, 
+         30.000000000000000, 0.0 },
+  { -2105.6666666666665, 5, 50, 
+         40.000000000000000, 0.0 },
+  { 1010.9999999999916, 5, 50, 
+         50.000000000000000, 0.0 },
+  { -1538.9999999999955, 5, 50, 
+         60.000000000000000, 0.0 },
+  { 5244.3333333333449, 5, 50, 
+         70.000000000000000, 0.0 },
+  { -13639.000000000011, 5, 50, 
+         80.000000000000000, 0.0 },
+  { -243189.00000000006, 5, 50, 
+         90.000000000000000, 0.0 },
+  { -1118405.6666666667, 5, 50, 
+         100.00000000000000, 0.0 },
+};
+const double toler031 = 5.0000000000000039e-13;
 
 // Test data for n=5, m=100.
-testcase_assoc_laguerre<double> data032[] = {
-  { 96560646.000000000, 5, 100,
-          0.0000000000000000 },
-  { 57264262.666666649, 5, 100,
-          10.000000000000000 },
-  { 31841379.333333332, 5, 100,
-          20.000000000000000 },
-  { 16281996.000000000, 5, 100,
-          30.000000000000000 },
-  { 7426112.6666666670, 5, 100,
-          40.000000000000000 },
-  { 2863729.3333333330, 5, 100,
-          50.000000000000000 },
-  { 834846.00000000000, 5, 100,
-          60.000000000000000 },
-  { 129462.66666666663, 5, 100,
-          70.000000000000000 },
-  { -12420.666666666666, 5, 100,
-          80.000000000000000 },
-  { -804.00000000000000, 5, 100,
-          90.000000000000000 },
-  { 4312.6666666666661, 5, 100,
-          100.00000000000000 },
-};
-
-// Test function for n=5, m=100.
-template <typename Tp>
-void test032()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data032)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data032[i].n), Tp(data032[i].m),
-                   Tp(data032[i].x));
-      const Tp f0 = data032[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.4901161193847656e-08 at index 1
+// max(|f - f_GSL| / |f_GSL|): 4.3934583843896481e-16
+// mean(f - f_GSL): 9.3181866263462735e-10
+// variance(f - f_GSL): 9.5511462203760402e-20
+// stddev(f - f_GSL): 3.0904928766098203e-10
+const testcase_assoc_laguerre<double>
+data032[11] =
+{
+  { 96560646.000000000, 5, 100, 
+         0.0000000000000000, 0.0 },
+  { 57264262.666666649, 5, 100, 
+         10.000000000000000, 0.0 },
+  { 31841379.333333332, 5, 100, 
+         20.000000000000000, 0.0 },
+  { 16281996.000000000, 5, 100, 
+         30.000000000000000, 0.0 },
+  { 7426112.6666666670, 5, 100, 
+         40.000000000000000, 0.0 },
+  { 2863729.3333333330, 5, 100, 
+         50.000000000000000, 0.0 },
+  { 834846.00000000000, 5, 100, 
+         60.000000000000000, 0.0 },
+  { 129462.66666666663, 5, 100, 
+         70.000000000000000, 0.0 },
+  { -12420.666666666668, 5, 100, 
+         80.000000000000000, 0.0 },
+  { -804.00000000000000, 5, 100, 
+         90.000000000000000, 0.0 },
+  { 4312.6666666666670, 5, 100, 
+         100.00000000000000, 0.0 },
+};
+const double toler032 = 2.5000000000000020e-13;
 
 // Test data for n=10, m=0.
-testcase_assoc_laguerre<double> data033[] = {
-  { 1.0000000000000000, 10, 0,
-          0.0000000000000000 },
-  { 27.984126984126981, 10, 0,
-          10.000000000000000 },
-  { 3227.8077601410932, 10, 0,
-          20.000000000000000 },
-  { 15129.571428571489, 10, 0,
-          30.000000000000000 },
-  { 79724066.608465582, 10, 0,
-          40.000000000000000 },
-  { 2037190065.3738980, 10, 0,
-          50.000000000000000 },
-  { 21804200401.000000, 10, 0,
-          60.000000000000000 },
-  { 144688291819.51855, 10, 0,
-          70.000000000000000 },
-  { 703324772760.08276, 10, 0,
-          80.000000000000000 },
-  { 2741055412243.8569, 10, 0,
-          90.000000000000000 },
-  { 9051283795429.5723, 10, 0,
-          100.00000000000000 },
-};
-
-// Test function for n=10, m=0.
-template <typename Tp>
-void test033()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data033)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data033[i].n), Tp(data033[i].m),
-                   Tp(data033[i].x));
-      const Tp f0 = data033[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+// max(|f - f_GSL|): 6.1035156250000000e-05 at index 7
+// max(|f - f_GSL| / |f_GSL|): 6.1315986390500118e-15
+// mean(f - f_GSL): -5.5892985322068194e-06
+// variance(f - f_GSL): 3.4364283890538241e-12
+// stddev(f - f_GSL): 1.8537606072667053e-06
+const testcase_assoc_laguerre<double>
+data033[11] =
+{
+  { 1.0000000000000000, 10, 0, 
+         0.0000000000000000, 0.0 },
+  { 27.984126984126977, 10, 0, 
+         10.000000000000000, 0.0 },
+  { 3227.8077601410932, 10, 0, 
+         20.000000000000000, 0.0 },
+  { 15129.571428571455, 10, 0, 
+         30.000000000000000, 0.0 },
+  { 79724066.608465582, 10, 0, 
+         40.000000000000000, 0.0 },
+  { 2037190065.3738980, 10, 0, 
+         50.000000000000000, 0.0 },
+  { 21804200401.000000, 10, 0, 
+         60.000000000000000, 0.0 },
+  { 144688291819.51855, 10, 0, 
+         70.000000000000000, 0.0 },
+  { 703324772760.08276, 10, 0, 
+         80.000000000000000, 0.0 },
+  { 2741055412243.8569, 10, 0, 
+         90.000000000000000, 0.0 },
+  { 9051283795429.5723, 10, 0, 
+         100.00000000000000, 0.0 },
+};
+const double toler033 = 5.0000000000000039e-13;
 
 // Test data for n=10, m=1.
-testcase_assoc_laguerre<double> data034[] = {
-  { 11.000000000000000, 10, 1,
-          0.0000000000000000 },
-  { 14.791887125220455, 10, 1,
-          10.000000000000000 },
-  { 2704.6507936507933, 10, 1,
-          20.000000000000000 },
-  { -182924.71428571426, 10, 1,
-          30.000000000000000 },
-  { 48066036.749559075, 10, 1,
-          40.000000000000000 },
-  { 1486264192.2169311, 10, 1,
-          50.000000000000000 },
-  { 17239562282.428574, 10, 1,
-          60.000000000000000 },
-  { 119837491630.13579, 10, 1,
-          70.000000000000000 },
-  { 600681375251.21167, 10, 1,
-          80.000000000000000 },
-  { 2392908405632.4287, 10, 1,
-          90.000000000000000 },
-  { 8033035722509.2373, 10, 1,
-          100.00000000000000 },
-};
-
-// Test function for n=10, m=1.
-template <typename Tp>
-void test034()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data034)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data034[i].n), Tp(data034[i].m),
-                   Tp(data034[i].x));
-      const Tp f0 = data034[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0019531250000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 3.2082933888884751e-16
+// mean(f - f_GSL): -0.00017647174536266681
+// variance(f - f_GSL): 3.4721464659347714e-07
+// stddev(f - f_GSL): 0.00058924922281957846
+const testcase_assoc_laguerre<double>
+data034[11] =
+{
+  { 11.000000000000000, 10, 1, 
+         0.0000000000000000, 0.0 },
+  { 14.791887125220455, 10, 1, 
+         10.000000000000000, 0.0 },
+  { 2704.6507936507933, 10, 1, 
+         20.000000000000000, 0.0 },
+  { -182924.71428571423, 10, 1, 
+         30.000000000000000, 0.0 },
+  { 48066036.749559075, 10, 1, 
+         40.000000000000000, 0.0 },
+  { 1486264192.2169311, 10, 1, 
+         50.000000000000000, 0.0 },
+  { 17239562282.428574, 10, 1, 
+         60.000000000000000, 0.0 },
+  { 119837491630.13579, 10, 1, 
+         70.000000000000000, 0.0 },
+  { 600681375251.21167, 10, 1, 
+         80.000000000000000, 0.0 },
+  { 2392908405632.4287, 10, 1, 
+         90.000000000000000, 0.0 },
+  { 8033035722509.2373, 10, 1, 
+         100.00000000000000, 0.0 },
+};
+const double toler034 = 2.5000000000000020e-13;
 
 // Test data for n=10, m=2.
-testcase_assoc_laguerre<double> data035[] = {
-  { 66.000000000000000, 10, 2,
-          0.0000000000000000 },
-  { -14.511463844797174, 10, 2,
-          10.000000000000000 },
-  { 1064.5890652557318, 10, 2,
-          20.000000000000000 },
-  { -194569.71428571426, 10, 2,
-          30.000000000000000 },
-  { 27343569.350970022, 10, 2,
-          40.000000000000000 },
-  { 1067807661.6790125, 10, 2,
-          50.000000000000000 },
-  { 13529451580.285713, 10, 2,
-          60.000000000000000 },
-  { 98812724224.641937, 10, 2,
-          70.000000000000000 },
-  { 511482736187.34021, 10, 2,
-          80.000000000000000 },
-  { 2084478393087.4285, 10, 2,
-          90.000000000000000 },
-  { 7117724862237.0752, 10, 2,
-          100.00000000000000 },
-};
-
-// Test function for n=10, m=2.
-template <typename Tp>
-void test035()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data035)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data035[i].n), Tp(data035[i].m),
-                   Tp(data035[i].x));
-      const Tp f0 = data035[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.00012207031250000000 at index 8
+// max(|f - f_GSL| / |f_GSL|): 3.0884259455918855e-16
+// mean(f - f_GSL): 1.4045021730039894e-05
+// variance(f - f_GSL): 2.1698889894483716e-11
+// stddev(f - f_GSL): 4.6582067251769446e-06
+const testcase_assoc_laguerre<double>
+data035[11] =
+{
+  { 66.000000000000000, 10, 2, 
+         0.0000000000000000, 0.0 },
+  { -14.511463844797181, 10, 2, 
+         10.000000000000000, 0.0 },
+  { 1064.5890652557316, 10, 2, 
+         20.000000000000000, 0.0 },
+  { -194569.71428571429, 10, 2, 
+         30.000000000000000, 0.0 },
+  { 27343569.350970022, 10, 2, 
+         40.000000000000000, 0.0 },
+  { 1067807661.6790125, 10, 2, 
+         50.000000000000000, 0.0 },
+  { 13529451580.285711, 10, 2, 
+         60.000000000000000, 0.0 },
+  { 98812724224.641937, 10, 2, 
+         70.000000000000000, 0.0 },
+  { 511482736187.34021, 10, 2, 
+         80.000000000000000, 0.0 },
+  { 2084478393087.4285, 10, 2, 
+         90.000000000000000, 0.0 },
+  { 7117724862237.0752, 10, 2, 
+         100.00000000000000, 0.0 },
+};
+const double toler035 = 2.5000000000000020e-13;
 
 // Test data for n=10, m=5.
-testcase_assoc_laguerre<double> data036[] = {
-  { 3003.0000000000000, 10, 5,
-          0.0000000000000000 },
-  { 11.641975308642024, 10, 5,
-          10.000000000000000 },
-  { -1137.5643738977069, 10, 5,
-          20.000000000000000 },
-  { -9254.1428571428605, 10, 5,
-          30.000000000000000 },
-  { 2121878.8377425023, 10, 5,
-          40.000000000000000 },
-  { 352060171.43033499, 10, 5,
-          50.000000000000000 },
-  { 6212028560.1428576, 10, 5,
-          60.000000000000000 },
-  { 53782171674.604919, 10, 5,
-          70.000000000000000 },
-  { 309720255837.56775, 10, 5,
-          80.000000000000000 },
-  { 1359043035731.5713, 10, 5,
-          90.000000000000000 },
-  { 4900625954398.9434, 10, 5,
-          100.00000000000000 },
-};
-
-// Test function for n=10, m=5.
-template <typename Tp>
-void test036()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data036)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data036[i].n), Tp(data036[i].m),
-                   Tp(data036[i].x));
-      const Tp f0 = data036[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0019531250000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 5.4929549774030811e-15
+// mean(f - f_GSL): 0.00020540323628249655
+// variance(f - f_GSL): 3.3599844999940669e-07
+// stddev(f - f_GSL): 0.00057965373284350253
+const testcase_assoc_laguerre<double>
+data036[11] =
+{
+  { 3003.0000000000000, 10, 5, 
+         0.0000000000000000, 0.0 },
+  { 11.641975308642031, 10, 5, 
+         10.000000000000000, 0.0 },
+  { -1137.5643738977069, 10, 5, 
+         20.000000000000000, 0.0 },
+  { -9254.1428571428605, 10, 5, 
+         30.000000000000000, 0.0 },
+  { 2121878.8377425023, 10, 5, 
+         40.000000000000000, 0.0 },
+  { 352060171.43033499, 10, 5, 
+         50.000000000000000, 0.0 },
+  { 6212028560.1428576, 10, 5, 
+         60.000000000000000, 0.0 },
+  { 53782171674.604919, 10, 5, 
+         70.000000000000000, 0.0 },
+  { 309720255837.56775, 10, 5, 
+         80.000000000000000, 0.0 },
+  { 1359043035731.5713, 10, 5, 
+         90.000000000000000, 0.0 },
+  { 4900625954398.9434, 10, 5, 
+         100.00000000000000, 0.0 },
+};
+const double toler036 = 5.0000000000000039e-13;
 
 // Test data for n=10, m=10.
-testcase_assoc_laguerre<double> data037[] = {
-  { 184756.00000000000, 10, 10,
-          0.0000000000000000 },
-  { -210.84303350970018, 10, 10,
-          10.000000000000000 },
-  { 508.38095238095184, 10, 10,
-          20.000000000000000 },
-  { 2098.8571428571431, 10, 10,
-          30.000000000000000 },
-  { -536338.88536155189, 10, 10,
-          40.000000000000000 },
-  { 24865988.804232784, 10, 10,
-          50.000000000000000 },
-  { 1343756013.1428571, 10, 10,
-          60.000000000000000 },
-  { 17298791247.358025, 10, 10,
-          70.000000000000000 },
-  { 124528450897.79892, 10, 10,
-          80.000000000000000 },
-  { 632674413641.71423, 10, 10,
-          90.000000000000000 },
-  { 2533008935405.0298, 10, 10,
-          100.00000000000000 },
-};
-
-// Test function for n=10, m=10.
-template <typename Tp>
-void test037()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data037)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data037[i].n), Tp(data037[i].m),
-                   Tp(data037[i].x));
-      const Tp f0 = data037[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.00048828125000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 1.2999856205575476e-15
+// mean(f - f_GSL): 3.5049890987631279e-05
+// variance(f - f_GSL): 2.2596053129284716e-08
+// stddev(f - f_GSL): 0.00015031983611381671
+const testcase_assoc_laguerre<double>
+data037[11] =
+{
+  { 184756.00000000000, 10, 10, 
+         0.0000000000000000, 0.0 },
+  { -210.84303350970018, 10, 10, 
+         10.000000000000000, 0.0 },
+  { 508.38095238095184, 10, 10, 
+         20.000000000000000, 0.0 },
+  { 2098.8571428571431, 10, 10, 
+         30.000000000000000, 0.0 },
+  { -536338.88536155177, 10, 10, 
+         40.000000000000000, 0.0 },
+  { 24865988.804232784, 10, 10, 
+         50.000000000000000, 0.0 },
+  { 1343756013.1428571, 10, 10, 
+         60.000000000000000, 0.0 },
+  { 17298791247.358025, 10, 10, 
+         70.000000000000000, 0.0 },
+  { 124528450897.79892, 10, 10, 
+         80.000000000000000, 0.0 },
+  { 632674413641.71423, 10, 10, 
+         90.000000000000000, 0.0 },
+  { 2533008935405.0298, 10, 10, 
+         100.00000000000000, 0.0 },
+};
+const double toler037 = 2.5000000000000020e-13;
 
 // Test data for n=10, m=20.
-testcase_assoc_laguerre<double> data038[] = {
-  { 30045014.999999993, 10, 20,
-          0.0000000000000000 },
-  { -23087.733686067022, 10, 20,
-          10.000000000000000 },
-  { 207.23985890652347, 10, 20,
-          20.000000000000000 },
-  { 1407.8571428571497, 10, 20,
-          30.000000000000000 },
-  { -44618.156966490329, 10, 20,
-          40.000000000000000 },
-  { 158690.04409171085, 10, 20,
-          50.000000000000000 },
-  { -6870413.5714285728, 10, 20,
-          60.000000000000000 },
-  { 793841351.41975331, 10, 20,
-          70.000000000000000 },
-  { 13358288958.562618, 10, 20,
-          80.000000000000000 },
-  { 106073722407.85715, 10, 20,
-          90.000000000000000 },
-  { 566337213392.42493, 10, 20,
-          100.00000000000000 },
-};
-
-// Test function for n=10, m=20.
-template <typename Tp>
-void test038()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data038)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data038[i].n), Tp(data038[i].m),
-                   Tp(data038[i].x));
-      const Tp f0 = data038[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+// max(|f - f_GSL|): 1.1444091796875000e-05 at index 8
+// max(|f - f_GSL| / |f_GSL|): 1.3165826881543491e-14
+// mean(f - f_GSL): -1.0290407937480433e-06
+// variance(f - f_GSL): 1.1648174507175886e-13
+// stddev(f - f_GSL): 3.4129422068320885e-07
+const testcase_assoc_laguerre<double>
+data038[11] =
+{
+  { 30045014.999999993, 10, 20, 
+         0.0000000000000000, 0.0 },
+  { -23087.733686067022, 10, 20, 
+         10.000000000000000, 0.0 },
+  { 207.23985890652330, 10, 20, 
+         20.000000000000000, 0.0 },
+  { 1407.8571428571508, 10, 20, 
+         30.000000000000000, 0.0 },
+  { -44618.156966490322, 10, 20, 
+         40.000000000000000, 0.0 },
+  { 158690.04409171100, 10, 20, 
+         50.000000000000000, 0.0 },
+  { -6870413.5714285728, 10, 20, 
+         60.000000000000000, 0.0 },
+  { 793841351.41975331, 10, 20, 
+         70.000000000000000, 0.0 },
+  { 13358288958.562618, 10, 20, 
+         80.000000000000000, 0.0 },
+  { 106073722407.85715, 10, 20, 
+         90.000000000000000, 0.0 },
+  { 566337213392.42493, 10, 20, 
+         100.00000000000000, 0.0 },
+};
+const double toler038 = 1.0000000000000008e-12;
 
 // Test data for n=10, m=50.
-testcase_assoc_laguerre<double> data039[] = {
-  { 75394027566.000000, 10, 50,
-          0.0000000000000000 },
-  { 8048106183.3721361, 10, 50,
-          10.000000000000000 },
-  { 328045023.84832466, 10, 50,
-          20.000000000000000 },
-  { -2568769.7142857141, 10, 50,
-          30.000000000000000 },
-  { 6971.9964726631733, 10, 50,
-          40.000000000000000 },
-  { 136111.41446208110, 10, 50,
-          50.000000000000000 },
-  { -62462.571428570242, 10, 50,
-          60.000000000000000 },
-  { -248167.95061728527, 10, 50,
-          70.000000000000000 },
-  { 1941270.4091710777, 10, 50,
-          80.000000000000000 },
-  { -8643512.5714285783, 10, 50,
-          90.000000000000000 },
-  { -140863522.18342155, 10, 50,
-          100.00000000000000 },
-};
-
-// Test function for n=10, m=50.
-template <typename Tp>
-void test039()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data039)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data039[i].n), Tp(data039[i].m),
-                   Tp(data039[i].x));
-      const Tp f0 = data039[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+// max(|f - f_GSL|): 1.7881393432617188e-07 at index 2
+// max(|f - f_GSL| / |f_GSL|): 1.9220038158581863e-14
+// mean(f - f_GSL): -1.7959874557246538e-08
+// variance(f - f_GSL): 1.5426792767859101e-17
+// stddev(f - f_GSL): 3.9276956052956932e-09
+const testcase_assoc_laguerre<double>
+data039[11] =
+{
+  { 75394027566.000000, 10, 50, 
+         0.0000000000000000, 0.0 },
+  { 8048106183.3721361, 10, 50, 
+         10.000000000000000, 0.0 },
+  { 328045023.84832460, 10, 50, 
+         20.000000000000000, 0.0 },
+  { -2568769.7142857178, 10, 50, 
+         30.000000000000000, 0.0 },
+  { 6971.9964726631533, 10, 50, 
+         40.000000000000000, 0.0 },
+  { 136111.41446207993, 10, 50, 
+         50.000000000000000, 0.0 },
+  { -62462.571428570242, 10, 50, 
+         60.000000000000000, 0.0 },
+  { -248167.95061728527, 10, 50, 
+         70.000000000000000, 0.0 },
+  { 1941270.4091710770, 10, 50, 
+         80.000000000000000, 0.0 },
+  { -8643512.5714285765, 10, 50, 
+         90.000000000000000, 0.0 },
+  { -140863522.18342152, 10, 50, 
+         100.00000000000000, 0.0 },
+};
+const double toler039 = 1.0000000000000008e-12;
 
 // Test data for n=10, m=100.
-testcase_assoc_laguerre<double> data040[] = {
-  { 46897636623981.000, 10, 100,
-          0.0000000000000000 },
-  { 16444031323272.084, 10, 100,
-          10.000000000000000 },
-  { 5020343986463.5391, 10, 100,
-          20.000000000000000 },
-  { 1270977490645.2859, 10, 100,
-          30.000000000000000 },
-  { 244835756822.62262, 10, 100,
-          40.000000000000000 },
-  { 29786827693.962963, 10, 100,
-          50.000000000000000 },
-  { 1127612095.2857144, 10, 100,
-          60.000000000000000 },
-  { -66370555.419753075, 10, 100,
-          70.000000000000000 },
-  { 10420852.957671957, 10, 100,
-          80.000000000000000 },
-  { -3373097.5714285718, 10, 100,
-          90.000000000000000 },
-  { 2065423.6807760142, 10, 100,
-          100.00000000000000 },
-};
-
-// Test function for n=10, m=100.
-template <typename Tp>
-void test040()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data040)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data040[i].n), Tp(data040[i].m),
-                   Tp(data040[i].x));
-      const Tp f0 = data040[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0019531250000000000 at index 1
+// max(|f - f_GSL| / |f_GSL|): 8.5796208358610616e-15
+// mean(f - f_GSL): 0.00016085392880168828
+// variance(f - f_GSL): 2.8461549974308565e-09
+// stddev(f - f_GSL): 5.3349367357362886e-05
+const testcase_assoc_laguerre<double>
+data040[11] =
+{
+  { 46897636623981.000, 10, 100, 
+         0.0000000000000000, 0.0 },
+  { 16444031323272.084, 10, 100, 
+         10.000000000000000, 0.0 },
+  { 5020343986463.5391, 10, 100, 
+         20.000000000000000, 0.0 },
+  { 1270977490645.2859, 10, 100, 
+         30.000000000000000, 0.0 },
+  { 244835756822.62262, 10, 100, 
+         40.000000000000000, 0.0 },
+  { 29786827693.962959, 10, 100, 
+         50.000000000000000, 0.0 },
+  { 1127612095.2857144, 10, 100, 
+         60.000000000000000, 0.0 },
+  { -66370555.419753075, 10, 100, 
+         70.000000000000000, 0.0 },
+  { 10420852.957671870, 10, 100, 
+         80.000000000000000, 0.0 },
+  { -3373097.5714285718, 10, 100, 
+         90.000000000000000, 0.0 },
+  { 2065423.6807760145, 10, 100, 
+         100.00000000000000, 0.0 },
+};
+const double toler040 = 5.0000000000000039e-13;
 
 // Test data for n=20, m=0.
-testcase_assoc_laguerre<double> data041[] = {
-  { 1.0000000000000000, 20, 0,
-          0.0000000000000000 },
-  { -11.961333867812119, 20, 0,
-          10.000000000000000 },
-  { 2829.4728613531738, 20, 0,
-          20.000000000000000 },
-  { -18439.424502520938, 20, 0,
-          30.000000000000000 },
-  { 24799805.877530701, 20, 0,
-          40.000000000000000 },
-  { 7551960453.7672529, 20, 0,
-          50.000000000000000 },
-  { -1379223608444.9155, 20, 0,
-          60.000000000000000 },
-  { 165423821874449.94, 20, 0,
-          70.000000000000000 },
-  { 29500368536981676., 20, 0,
-          80.000000000000000 },
-  { 1.1292309514432899e+18, 20, 0,
-          90.000000000000000 },
-  { 2.2061882785931735e+19, 20, 0,
-          100.00000000000000 },
-};
-
-// Test function for n=20, m=0.
-template <typename Tp>
-void test041()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data041)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data041[i].n), Tp(data041[i].m),
-                   Tp(data041[i].x));
-      const Tp f0 = data041[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 20.000000000000000 at index 8
+// max(|f - f_GSL| / |f_GSL|): 4.7350442720305269e-15
+// mean(f - f_GSL): -1.8323417989965736
+// variance(f - f_GSL): 2754690.9677631622
+// stddev(f - f_GSL): 1659.7261725246012
+const testcase_assoc_laguerre<double>
+data041[11] =
+{
+  { 1.0000000000000000, 20, 0, 
+         0.0000000000000000, 0.0 },
+  { -11.961333867812119, 20, 0, 
+         10.000000000000000, 0.0 },
+  { 2829.4728613531743, 20, 0, 
+         20.000000000000000, 0.0 },
+  { -18439.424502520938, 20, 0, 
+         30.000000000000000, 0.0 },
+  { 24799805.877530713, 20, 0, 
+         40.000000000000000, 0.0 },
+  { 7551960453.7672548, 20, 0, 
+         50.000000000000000, 0.0 },
+  { -1379223608444.9155, 20, 0, 
+         60.000000000000000, 0.0 },
+  { 165423821874449.94, 20, 0, 
+         70.000000000000000, 0.0 },
+  { 29500368536981676., 20, 0, 
+         80.000000000000000, 0.0 },
+  { 1.1292309514432901e+18, 20, 0, 
+         90.000000000000000, 0.0 },
+  { 2.2061882785931735e+19, 20, 0, 
+         100.00000000000000, 0.0 },
+};
+const double toler041 = 2.5000000000000020e-13;
 
 // Test data for n=20, m=1.
-testcase_assoc_laguerre<double> data042[] = {
-  { 21.000000000000000, 20, 1,
-          0.0000000000000000 },
-  { 19.900488129734079, 20, 1,
-          10.000000000000000 },
-  { 2208.0318569557589, 20, 1,
-          20.000000000000000 },
-  { 263690.96303121914, 20, 1,
-          30.000000000000000 },
-  { 40667285.630564235, 20, 1,
-          40.000000000000000 },
-  { 1737442572.8115418, 20, 1,
-          50.000000000000000 },
-  { -588280953643.28125, 20, 1,
-          60.000000000000000 },
-  { 45617733778241.359, 20, 1,
-          70.000000000000000 },
-  { 17293487114876860., 20, 1,
-          80.000000000000000 },
-  { 7.6219135858585024e+17, 20, 1,
-          90.000000000000000 },
-  { 1.6037288204336759e+19, 20, 1,
-          100.00000000000000 },
-};
-
-// Test function for n=20, m=1.
-template <typename Tp>
-void test042()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data042)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data042[i].n), Tp(data042[i].m),
-                   Tp(data042[i].x));
-      const Tp f0 = data042[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8192.0000000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 2.0583579235866667e-15
+// mean(f - f_GSL): -744.54973777790485
+// variance(f - f_GSL): 6101096.7248424273
+// stddev(f - f_GSL): 2470.0398225215777
+const testcase_assoc_laguerre<double>
+data042[11] =
+{
+  { 21.000000000000000, 20, 1, 
+         0.0000000000000000, 0.0 },
+  { 19.900488129734079, 20, 1, 
+         10.000000000000000, 0.0 },
+  { 2208.0318569557585, 20, 1, 
+         20.000000000000000, 0.0 },
+  { 263690.96303121914, 20, 1, 
+         30.000000000000000, 0.0 },
+  { 40667285.630564235, 20, 1, 
+         40.000000000000000, 0.0 },
+  { 1737442572.8115399, 20, 1, 
+         50.000000000000000, 0.0 },
+  { -588280953643.28125, 20, 1, 
+         60.000000000000000, 0.0 },
+  { 45617733778241.328, 20, 1, 
+         70.000000000000000, 0.0 },
+  { 17293487114876864., 20, 1, 
+         80.000000000000000, 0.0 },
+  { 7.6219135858585062e+17, 20, 1, 
+         90.000000000000000, 0.0 },
+  { 1.6037288204336759e+19, 20, 1, 
+         100.00000000000000, 0.0 },
+};
+const double toler042 = 2.5000000000000020e-13;
 
 // Test data for n=20, m=2.
-testcase_assoc_laguerre<double> data043[] = {
-  { 231.00000000000003, 20, 2,
-          0.0000000000000000 },
-  { 47.009338065112935, 20, 2,
-          10.000000000000000 },
-  { -652.51305461728566, 20, 2,
-          20.000000000000000 },
-  { 285388.25895069109, 20, 2,
-          30.000000000000000 },
-  { 28664069.685624726, 20, 2,
-          40.000000000000000 },
-  { -1399631966.3144732, 20, 2,
-          50.000000000000000 },
-  { -115357373248.28198, 20, 2,
-          60.000000000000000 },
-  { -3357730872975.8545, 20, 2,
-          70.000000000000000 },
-  { 9765808962855122.0, 20, 2,
-          80.000000000000000 },
-  { 5.0717292945559181e+17, 20, 2,
-          90.000000000000000 },
-  { 1.1564665701334458e+19, 20, 2,
-          100.00000000000000 },
-};
-
-// Test function for n=20, m=2.
-template <typename Tp>
-void test043()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data043)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data043[i].n), Tp(data043[i].m),
-                   Tp(data043[i].x));
-      const Tp f0 = data043[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 6144.0000000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 9.3068805041852228e-15
+// mean(f - f_GSL): 610.73011506755233
+// variance(f - f_GSL): 995562063.33027601
+// stddev(f - f_GSL): 31552.528636074101
+const testcase_assoc_laguerre<double>
+data043[11] =
+{
+  { 231.00000000000003, 20, 2, 
+         0.0000000000000000, 0.0 },
+  { 47.009338065112921, 20, 2, 
+         10.000000000000000, 0.0 },
+  { -652.51305461728589, 20, 2, 
+         20.000000000000000, 0.0 },
+  { 285388.25895069109, 20, 2, 
+         30.000000000000000, 0.0 },
+  { 28664069.685624730, 20, 2, 
+         40.000000000000000, 0.0 },
+  { -1399631966.3144732, 20, 2, 
+         50.000000000000000, 0.0 },
+  { -115357373248.28194, 20, 2, 
+         60.000000000000000, 0.0 },
+  { -3357730872975.8750, 20, 2, 
+         70.000000000000000, 0.0 },
+  { 9765808962855122.0, 20, 2, 
+         80.000000000000000, 0.0 },
+  { 5.0717292945559181e+17, 20, 2, 
+         90.000000000000000, 0.0 },
+  { 1.1564665701334456e+19, 20, 2, 
+         100.00000000000000, 0.0 },
+};
+const double toler043 = 5.0000000000000039e-13;
 
 // Test data for n=20, m=5.
-testcase_assoc_laguerre<double> data044[] = {
-  { 53130.000000000000, 20, 5,
-          0.0000000000000000 },
-  { -158.69554500944145, 20, 5,
-          10.000000000000000 },
-  { 334.08012288038969, 20, 5,
-          20.000000000000000 },
-  { -198372.47662554169, 20, 5,
-          30.000000000000000 },
-  { -13627144.088579427, 20, 5,
-          40.000000000000000 },
-  { -780579985.44731593, 20, 5,
-          50.000000000000000 },
-  { 116648634237.73526, 20, 5,
-          60.000000000000000 },
-  { -12347348707739.742, 20, 5,
-          70.000000000000000 },
-  { 1199516248034090.8, 20, 5,
-          80.000000000000000 },
-  { 1.3451503195078531e+17, 20, 5,
-          90.000000000000000 },
-  { 4.1058904276111483e+18, 20, 5,
-          100.00000000000000 },
-};
-
-// Test function for n=20, m=5.
-template <typename Tp>
-void test044()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data044)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data044[i].n), Tp(data044[i].m),
-                   Tp(data044[i].x));
-      const Tp f0 = data044[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 16.000000000000000 at index 9
+// max(|f - f_GSL| / |f_GSL|): 3.5731302592472765e-15
+// mean(f - f_GSL): -1.4092810048974798
+// variance(f - f_GSL): 598.27450725320409
+// stddev(f - f_GSL): 24.459650595484884
+const testcase_assoc_laguerre<double>
+data044[11] =
+{
+  { 53130.000000000000, 20, 5, 
+         0.0000000000000000, 0.0 },
+  { -158.69554500944142, 20, 5, 
+         10.000000000000000, 0.0 },
+  { 334.08012288038952, 20, 5, 
+         20.000000000000000, 0.0 },
+  { -198372.47662554163, 20, 5, 
+         30.000000000000000, 0.0 },
+  { -13627144.088579426, 20, 5, 
+         40.000000000000000, 0.0 },
+  { -780579985.44731510, 20, 5, 
+         50.000000000000000, 0.0 },
+  { 116648634237.73535, 20, 5, 
+         60.000000000000000, 0.0 },
+  { -12347348707739.742, 20, 5, 
+         70.000000000000000, 0.0 },
+  { 1199516248034090.8, 20, 5, 
+         80.000000000000000, 0.0 },
+  { 1.3451503195078531e+17, 20, 5, 
+         90.000000000000000, 0.0 },
+  { 4.1058904276111483e+18, 20, 5, 
+         100.00000000000000, 0.0 },
+};
+const double toler044 = 2.5000000000000020e-13;
 
 // Test data for n=20, m=10.
-testcase_assoc_laguerre<double> data045[] = {
-  { 30045015.000000000, 20, 10,
-          0.0000000000000000 },
-  { -1755.6226861258590, 20, 10,
-          10.000000000000000 },
-  { -9081.6726644737901, 20, 10,
-          20.000000000000000 },
-  { 95771.650912113109, 20, 10,
-          30.000000000000000 },
-  { 5089151.9272779226, 20, 10,
-          40.000000000000000 },
-  { 97400399.450206712, 20, 10,
-          50.000000000000000 },
-  { -16009352450.477026, 20, 10,
-          60.000000000000000 },
-  { 842271286905.01038, 20, 10,
-          70.000000000000000 },
-  { -79901725466796.938, 20, 10,
-          80.000000000000000 },
-  { 7944103675858638.0, 20, 10,
-          90.000000000000000 },
-  { 5.7429821893388288e+17, 20, 10,
-          100.00000000000000 },
-};
-
-// Test function for n=20, m=10.
-template <typename Tp>
-void test045()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data045)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data045[i].n), Tp(data045[i].m),
-                   Tp(data045[i].x));
-      const Tp f0 = data045[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 64.000000000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 1.0709209504860220e-15
+// mean(f - f_GSL): -5.5440786440316181
+// variance(f - f_GSL): 376.60778837733284
+// stddev(f - f_GSL): 19.406385247575933
+const testcase_assoc_laguerre<double>
+data045[11] =
+{
+  { 30045015.000000000, 20, 10, 
+         0.0000000000000000, 0.0 },
+  { -1755.6226861258601, 20, 10, 
+         10.000000000000000, 0.0 },
+  { -9081.6726644737901, 20, 10, 
+         20.000000000000000, 0.0 },
+  { 95771.650912113109, 20, 10, 
+         30.000000000000000, 0.0 },
+  { 5089151.9272779236, 20, 10, 
+         40.000000000000000, 0.0 },
+  { 97400399.450206712, 20, 10, 
+         50.000000000000000, 0.0 },
+  { -16009352450.477026, 20, 10, 
+         60.000000000000000, 0.0 },
+  { 842271286905.01050, 20, 10, 
+         70.000000000000000, 0.0 },
+  { -79901725466796.938, 20, 10, 
+         80.000000000000000, 0.0 },
+  { 7944103675858637.0, 20, 10, 
+         90.000000000000000, 0.0 },
+  { 5.7429821893388288e+17, 20, 10, 
+         100.00000000000000, 0.0 },
+};
+const double toler045 = 2.5000000000000020e-13;
 
 // Test data for n=20, m=20.
-testcase_assoc_laguerre<double> data046[] = {
-  { 137846528819.99994, 20, 20,
-          0.0000000000000000 },
-  { -136976.49571333214, 20, 20,
-          10.000000000000000 },
-  { 113878.49908041637, 20, 20,
-          20.000000000000000 },
-  { -342529.21778796182, 20, 20,
-          30.000000000000000 },
-  { -350112.66981443466, 20, 20,
-          40.000000000000000 },
-  { -10791735.172977794, 20, 20,
-          50.000000000000000 },
-  { -1038073940.0811402, 20, 20,
-          60.000000000000000 },
-  { 667312550.63616371, 20, 20,
-          70.000000000000000 },
-  { 741537869902.29028, 20, 20,
-          80.000000000000000 },
-  { -32378376755737.418, 20, 20,
-          90.000000000000000 },
-  { -601760332167934.75, 20, 20,
-          100.00000000000000 },
-};
-
-// Test function for n=20, m=20.
-template <typename Tp>
-void test046()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data046)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data046[i].n), Tp(data046[i].m),
-                   Tp(data046[i].x));
-      const Tp f0 = data046[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+// max(|f - f_GSL|): 2.1250000000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 1.1968937782285294e-14
+// mean(f - f_GSL): 0.19344895682429938
+// variance(f - f_GSL): 0.41039783756558101
+// stddev(f - f_GSL): 0.64062300736515931
+const testcase_assoc_laguerre<double>
+data046[11] =
+{
+  { 137846528819.99994, 20, 20, 
+         0.0000000000000000, 0.0 },
+  { -136976.49571333229, 20, 20, 
+         10.000000000000000, 0.0 },
+  { 113878.49908041643, 20, 20, 
+         20.000000000000000, 0.0 },
+  { -342529.21778796182, 20, 20, 
+         30.000000000000000, 0.0 },
+  { -350112.66981443466, 20, 20, 
+         40.000000000000000, 0.0 },
+  { -10791735.172977809, 20, 20, 
+         50.000000000000000, 0.0 },
+  { -1038073940.0811402, 20, 20, 
+         60.000000000000000, 0.0 },
+  { 667312550.63616335, 20, 20, 
+         70.000000000000000, 0.0 },
+  { 741537869902.29028, 20, 20, 
+         80.000000000000000, 0.0 },
+  { -32378376755737.418, 20, 20, 
+         90.000000000000000, 0.0 },
+  { -601760332167937.62, 20, 20, 
+         100.00000000000000, 0.0 },
+};
+const double toler046 = 1.0000000000000008e-12;
 
 // Test data for n=20, m=50.
-testcase_assoc_laguerre<double> data047[] = {
-  { 1.6188460366265789e+17, 20, 50,
-          0.0000000000000000 },
-  { 1599011936804291.5, 20, 50,
-          10.000000000000000 },
-  { -131273880831.42412, 20, 50,
-          20.000000000000000 },
-  { -3133213093.6903501, 20, 50,
-          30.000000000000000 },
-  { -213935628.04985175, 20, 50,
-          40.000000000000000 },
-  { -47375578.495921209, 20, 50,
-          50.000000000000000 },
-  { -115731015.14034875, 20, 50,
-          60.000000000000000 },
-  { -737415147.29420292, 20, 50,
-          70.000000000000000 },
-  { -2123455626.8621781, 20, 50,
-          80.000000000000000 },
-  { 29801266858.608925, 20, 50,
-          90.000000000000000 },
-  { -132886631026.82561, 20, 50,
-          100.00000000000000 },
-};
-
-// Test function for n=20, m=50.
-template <typename Tp>
-void test047()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data047)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data047[i].n), Tp(data047[i].m),
-                   Tp(data047[i].x));
-      const Tp f0 = data047[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+// max(|f - f_GSL|): 0.25000000000000000 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.2103144092558234e-14
+// mean(f - f_GSL): -0.022849527272311123
+// variance(f - f_GSL): 5.7130155161570465e-05
+// stddev(f - f_GSL): 0.0075584492563997852
+const testcase_assoc_laguerre<double>
+data047[11] =
+{
+  { 1.6188460366265789e+17, 20, 50, 
+         0.0000000000000000, 0.0 },
+  { 1599011936804291.5, 20, 50, 
+         10.000000000000000, 0.0 },
+  { -131273880831.42432, 20, 50, 
+         20.000000000000000, 0.0 },
+  { -3133213093.6903548, 20, 50, 
+         30.000000000000000, 0.0 },
+  { -213935628.04985175, 20, 50, 
+         40.000000000000000, 0.0 },
+  { -47375578.495921060, 20, 50, 
+         50.000000000000000, 0.0 },
+  { -115731015.14034876, 20, 50, 
+         60.000000000000000, 0.0 },
+  { -737415147.29420292, 20, 50, 
+         70.000000000000000, 0.0 },
+  { -2123455626.8621769, 20, 50, 
+         80.000000000000000, 0.0 },
+  { 29801266858.608929, 20, 50, 
+         90.000000000000000, 0.0 },
+  { -132886631026.82553, 20, 50, 
+         100.00000000000000, 0.0 },
+};
+const double toler047 = 1.0000000000000008e-12;
 
 // Test data for n=20, m=100.
-testcase_assoc_laguerre<double> data048[] = {
-  { 2.9462227291176643e+22, 20, 100,
-          0.0000000000000000 },
-  { 3.5777890748701244e+21, 20, 100,
-          10.000000000000000 },
-  { 3.1584925521456765e+20, 20, 100,
-          20.000000000000000 },
-  { 1.7389599388424860e+19, 20, 100,
-          30.000000000000000 },
-  { 4.1401342745980646e+17, 20, 100,
-          40.000000000000000 },
-  { -79359706102062.672, 20, 100,
-          50.000000000000000 },
-  { 22736203650743.145, 20, 100,
-          60.000000000000000 },
-  { 65679006380.095215, 20, 100,
-          70.000000000000000 },
-  { -236263257610.77969, 20, 100,
-          80.000000000000000 },
-  { -38072644585.303085, 20, 100,
-          90.000000000000000 },
-  { 68236474365.173950, 20, 100,
-          100.00000000000000 },
-};
-
-// Test function for n=20, m=100.
-template <typename Tp>
-void test048()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data048)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data048[i].n), Tp(data048[i].m),
-                   Tp(data048[i].x));
-      const Tp f0 = data048[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-}
+// max(|f - f_GSL|): 1572864.0000000000 at index 1
+// max(|f - f_GSL| / |f_GSL|): 3.6621229371267356e-14
+// mean(f - f_GSL): 137262.28072981400
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_assoc_laguerre<double>
+data048[11] =
+{
+  { 2.9462227291176643e+22, 20, 100, 
+         0.0000000000000000, 0.0 },
+  { 3.5777890748701244e+21, 20, 100, 
+         10.000000000000000, 0.0 },
+  { 3.1584925521456759e+20, 20, 100, 
+         20.000000000000000, 0.0 },
+  { 1.7389599388424864e+19, 20, 100, 
+         30.000000000000000, 0.0 },
+  { 4.1401342745980634e+17, 20, 100, 
+         40.000000000000000, 0.0 },
+  { -79359706102062.594, 20, 100, 
+         50.000000000000000, 0.0 },
+  { 22736203650743.145, 20, 100, 
+         60.000000000000000, 0.0 },
+  { 65679006380.095703, 20, 100, 
+         70.000000000000000, 0.0 },
+  { -236263257610.77792, 20, 100, 
+         80.000000000000000, 0.0 },
+  { -38072644585.303101, 20, 100, 
+         90.000000000000000, 0.0 },
+  { 68236474365.173973, 20, 100, 
+         100.00000000000000, 0.0 },
+};
+const double toler048 = 2.5000000000000015e-12;
 
 // Test data for n=50, m=0.
-testcase_assoc_laguerre<double> data049[] = {
-  { 1.0000000000000000, 50, 0,
-          0.0000000000000000 },
-  { 17.534183446338233, 50, 0,
-          10.000000000000000 },
-  { 980.26961889790766, 50, 0,
-          20.000000000000000 },
-  { 293000.50735962350, 50, 0,
-          30.000000000000000 },
-  { -14896937.968694847, 50, 0,
-          40.000000000000000 },
-  { 2513677852.6916885, 50, 0,
-          50.000000000000000 },
-  { -883876565337.99207, 50, 0,
-          60.000000000000000 },
-  { -80967880733583.219, 50, 0,
-          70.000000000000000 },
-  { -8217471769564850.0, 50, 0,
-          80.000000000000000 },
-  { -2.1140031308048906e+18, 50, 0,
-          90.000000000000000 },
-  { -3.9710103487094673e+20, 50, 0,
-          100.00000000000000 },
-};
-
-// Test function for n=50, m=0.
-template <typename Tp>
-void test049()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data049)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data049[i].n), Tp(data049[i].m),
-                   Tp(data049[i].x));
-      const Tp f0 = data049[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 196608.00000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 4.2910775919271532e-15
+// mean(f - f_GSL): -17990.447398879332
+// variance(f - f_GSL): 27618453284.204639
+// stddev(f - f_GSL): 166188.00583737876
+const testcase_assoc_laguerre<double>
+data049[11] =
+{
+  { 1.0000000000000000, 50, 0, 
+         0.0000000000000000, 0.0 },
+  { 17.534183446338233, 50, 0, 
+         10.000000000000000, 0.0 },
+  { 980.26961889791028, 50, 0, 
+         20.000000000000000, 0.0 },
+  { 293000.50735962362, 50, 0, 
+         30.000000000000000, 0.0 },
+  { -14896937.968694873, 50, 0, 
+         40.000000000000000, 0.0 },
+  { 2513677852.6916871, 50, 0, 
+         50.000000000000000, 0.0 },
+  { -883876565337.99219, 50, 0, 
+         60.000000000000000, 0.0 },
+  { -80967880733583.234, 50, 0, 
+         70.000000000000000, 0.0 },
+  { -8217471769564841.0, 50, 0, 
+         80.000000000000000, 0.0 },
+  { -2.1140031308048891e+18, 50, 0, 
+         90.000000000000000, 0.0 },
+  { -3.9710103487094692e+20, 50, 0, 
+         100.00000000000000, 0.0 },
+};
+const double toler049 = 2.5000000000000020e-13;
 
 // Test data for n=50, m=1.
-testcase_assoc_laguerre<double> data050[] = {
-  { 51.000000000000021, 50, 1,
-          0.0000000000000000 },
-  { 1.4214573271640045, 50, 1,
-          10.000000000000000 },
-  { -2574.8072295127863, 50, 1,
-          20.000000000000000 },
-  { 35846.479728359256, 50, 1,
-          30.000000000000000 },
-  { -48263698.768318526, 50, 1,
-          40.000000000000000 },
-  { 6161525870.2738571, 50, 1,
-          50.000000000000000 },
-  { -382655486658.47101, 50, 1,
-          60.000000000000000 },
-  { -109635579833241.69, 50, 1,
-          70.000000000000000 },
-  { -14623805817283476., 50, 1,
-          80.000000000000000 },
-  { -2.0666847190878118e+18, 50, 1,
-          90.000000000000000 },
-  { -1.4385187953997626e+20, 50, 1,
-          100.00000000000000 },
-};
-
-// Test function for n=50, m=1.
-template <typename Tp>
-void test050()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data050)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data050[i].n), Tp(data050[i].m),
-                   Tp(data050[i].x));
-      const Tp f0 = data050[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
-}
+// max(|f - f_GSL|): 311296.00000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 4.3113718426975911e-14
+// mean(f - f_GSL): 28417.096591423862
+// variance(f - f_GSL): 32927254885.825413
+// stddev(f - f_GSL): 181458.68644356879
+const testcase_assoc_laguerre<double>
+data050[11] =
+{
+  { 51.000000000000021, 50, 1, 
+         0.0000000000000000, 0.0 },
+  { 1.4214573271639575, 50, 1, 
+         10.000000000000000, 0.0 },
+  { -2574.8072295127827, 50, 1, 
+         20.000000000000000, 0.0 },
+  { 35846.479728359205, 50, 1, 
+         30.000000000000000, 0.0 },
+  { -48263698.768318526, 50, 1, 
+         40.000000000000000, 0.0 },
+  { 6161525870.2738533, 50, 1, 
+         50.000000000000000, 0.0 },
+  { -382655486658.47125, 50, 1, 
+         60.000000000000000, 0.0 },
+  { -109635579833241.72, 50, 1, 
+         70.000000000000000, 0.0 },
+  { -14623805817283490., 50, 1, 
+         80.000000000000000, 0.0 },
+  { -2.0666847190878152e+18, 50, 1, 
+         90.000000000000000, 0.0 },
+  { -1.4385187953997626e+20, 50, 1, 
+         100.00000000000000, 0.0 },
+};
+const double toler050 = 2.5000000000000015e-12;
 
 // Test data for n=50, m=2.
-testcase_assoc_laguerre<double> data051[] = {
-  { 1326.0000000000000, 50, 2,
-          0.0000000000000000 },
-  { -87.860732516444671, 50, 2,
-          10.000000000000000 },
-  { -5203.2351191780890, 50, 2,
-          20.000000000000000 },
-  { -461059.50012538873, 50, 2,
-          30.000000000000000 },
-  { -30476695.327440601, 50, 2,
-          40.000000000000000 },
-  { 3720804977.9338136, 50, 2,
-          50.000000000000000 },
-  { 362262002434.51440, 50, 2,
-          60.000000000000000 },
-  { -52210917867820.273, 50, 2,
-          70.000000000000000 },
-  { -9567965136901918.0, 50, 2,
-          80.000000000000000 },
-  { -8.9171277517712806e+17, 50, 2,
-          90.000000000000000 },
-  { 5.7231129448807039e+19, 50, 2,
-          100.00000000000000 },
-};
-
-// Test function for n=50, m=2.
-template <typename Tp>
-void test051()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data051)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data051[i].n), Tp(data051[i].m),
-                   Tp(data051[i].x));
-      const Tp f0 = data051[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 139264.00000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 2.5437687254653283e-15
+// mean(f - f_GSL): 12649.078840684118
+// variance(f - f_GSL): 1765904219.6855280
+// stddev(f - f_GSL): 42022.663167456769
+const testcase_assoc_laguerre<double>
+data051[11] =
+{
+  { 1326.0000000000000, 50, 2, 
+         0.0000000000000000, 0.0 },
+  { -87.860732516444529, 50, 2, 
+         10.000000000000000, 0.0 },
+  { -5203.2351191780917, 50, 2, 
+         20.000000000000000, 0.0 },
+  { -461059.50012538867, 50, 2, 
+         30.000000000000000, 0.0 },
+  { -30476695.327440590, 50, 2, 
+         40.000000000000000, 0.0 },
+  { 3720804977.9338136, 50, 2, 
+         50.000000000000000, 0.0 },
+  { 362262002434.51453, 50, 2, 
+         60.000000000000000, 0.0 },
+  { -52210917867820.227, 50, 2, 
+         70.000000000000000, 0.0 },
+  { -9567965136901914.0, 50, 2, 
+         80.000000000000000, 0.0 },
+  { -8.9171277517712883e+17, 50, 2, 
+         90.000000000000000, 0.0 },
+  { 5.7231129448806982e+19, 50, 2, 
+         100.00000000000000, 0.0 },
+};
+const double toler051 = 2.5000000000000020e-13;
 
 // Test data for n=50, m=5.
-testcase_assoc_laguerre<double> data052[] = {
-  { 3478761.0000000000, 50, 5,
-          0.0000000000000000 },
-  { 1055.8381917651493, 50, 5,
-          10.000000000000000 },
-  { 15264.646660345048, 50, 5,
-          20.000000000000000 },
-  { 1229651.8966600855, 50, 5,
-          30.000000000000000 },
-  { 39270451.823656857, 50, 5,
-          40.000000000000000 },
-  { -4424062601.1152067, 50, 5,
-          50.000000000000000 },
-  { -186017434284.19220, 50, 5,
-          60.000000000000000 },
-  { 50972853949302.602, 50, 5,
-          70.000000000000000 },
-  { 6530702754012518.0, 50, 5,
-          80.000000000000000 },
-  { 6.8387592714678016e+17, 50, 5,
-          90.000000000000000 },
-  { 3.9198742504338366e+19, 50, 5,
-          100.00000000000000 },
-};
-
-// Test function for n=50, m=5.
-template <typename Tp>
-void test052()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data052)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data052[i].n), Tp(data052[i].m),
-                   Tp(data052[i].x));
-      const Tp f0 = data052[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 81920.000000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 2.6215979818234617e-15
+// mean(f - f_GSL): -7423.7222822287622
+// variance(f - f_GSL): 648926959.11275744
+// stddev(f - f_GSL): 25474.044812568685
+const testcase_assoc_laguerre<double>
+data052[11] =
+{
+  { 3478761.0000000000, 50, 5, 
+         0.0000000000000000, 0.0 },
+  { 1055.8381917651498, 50, 5, 
+         10.000000000000000, 0.0 },
+  { 15264.646660345055, 50, 5, 
+         20.000000000000000, 0.0 },
+  { 1229651.8966600848, 50, 5, 
+         30.000000000000000, 0.0 },
+  { 39270451.823656842, 50, 5, 
+         40.000000000000000, 0.0 },
+  { -4424062601.1152029, 50, 5, 
+         50.000000000000000, 0.0 },
+  { -186017434284.19223, 50, 5, 
+         60.000000000000000, 0.0 },
+  { 50972853949302.609, 50, 5, 
+         70.000000000000000, 0.0 },
+  { 6530702754012517.0, 50, 5, 
+         80.000000000000000, 0.0 },
+  { 6.8387592714678029e+17, 50, 5, 
+         90.000000000000000, 0.0 },
+  { 3.9198742504338391e+19, 50, 5, 
+         100.00000000000000, 0.0 },
+};
+const double toler052 = 2.5000000000000020e-13;
 
 // Test data for n=50, m=10.
-testcase_assoc_laguerre<double> data053[] = {
-  { 75394027565.999985, 50, 10,
-          0.0000000000000000 },
-  { 91833.924098770134, 50, 10,
-          10.000000000000000 },
-  { 330501.87929778261, 50, 10,
-          20.000000000000000 },
-  { 3625088.1635972545, 50, 10,
-          30.000000000000000 },
-  { 213954727.28632003, 50, 10,
-          40.000000000000000 },
-  { -9381006937.7517643, 50, 10,
-          50.000000000000000 },
-  { 535333683777.48627, 50, 10,
-          60.000000000000000 },
-  { 18824406573722.156, 50, 10,
-          70.000000000000000 },
-  { -533858276780012.81, 50, 10,
-          80.000000000000000 },
-  { -52995774666704024., 50, 10,
-          90.000000000000000 },
-  { 6.0504182862448855e+18, 50, 10,
-          100.00000000000000 },
-};
-
-// Test function for n=50, m=10.
-template <typename Tp>
-void test053()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data053)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data053[i].n), Tp(data053[i].m),
-                   Tp(data053[i].x));
-      const Tp f0 = data053[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 192.00000000000000 at index 9
+// max(|f - f_GSL| / |f_GSL|): 3.6229303412867937e-15
+// mean(f - f_GSL): -17.490024036237049
+// variance(f - f_GSL): 12219580.275082903
+// stddev(f - f_GSL): 3495.6516238153513
+const testcase_assoc_laguerre<double>
+data053[11] =
+{
+  { 75394027565.999985, 50, 10, 
+         0.0000000000000000, 0.0 },
+  { 91833.924098770178, 50, 10, 
+         10.000000000000000, 0.0 },
+  { 330501.87929778261, 50, 10, 
+         20.000000000000000, 0.0 },
+  { 3625088.1635972536, 50, 10, 
+         30.000000000000000, 0.0 },
+  { 213954727.28632012, 50, 10, 
+         40.000000000000000, 0.0 },
+  { -9381006937.7517681, 50, 10, 
+         50.000000000000000, 0.0 },
+  { 535333683777.48615, 50, 10, 
+         60.000000000000000, 0.0 },
+  { 18824406573722.172, 50, 10, 
+         70.000000000000000, 0.0 },
+  { -533858276780013.12, 50, 10, 
+         80.000000000000000, 0.0 },
+  { -52995774666704016., 50, 10, 
+         90.000000000000000, 0.0 },
+  { 6.0504182862448783e+18, 50, 10, 
+         100.00000000000000, 0.0 },
+};
+const double toler053 = 2.5000000000000020e-13;
 
 // Test data for n=50, m=20.
-testcase_assoc_laguerre<double> data054[] = {
-  { 1.6188460366265779e+17, 50, 20,
-          0.0000000000000000 },
-  { -307637087.25169420, 50, 20,
-          10.000000000000000 },
-  { 12524651.102974579, 50, 20,
-          20.000000000000000 },
-  { -315460483.86210549, 50, 20,
-          30.000000000000000 },
-  { -1889683587.3459976, 50, 20,
-          40.000000000000000 },
-  { 37457044404.200340, 50, 20,
-          50.000000000000000 },
-  { -843831858224.71826, 50, 20,
-          60.000000000000000 },
-  { -92231643172.313248, 50, 20,
-          70.000000000000000 },
-  { 904211757769501.25, 50, 20,
-          80.000000000000000 },
-  { 46508193600283288., 50, 20,
-          90.000000000000000 },
-  { 2.3216887928162714e+18, 50, 20,
-          100.00000000000000 },
-};
-
-// Test function for n=50, m=20.
-template <typename Tp>
-void test054()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data054)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data054[i].n), Tp(data054[i].m),
-                   Tp(data054[i].x));
-      const Tp f0 = data054[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-}
+// max(|f - f_GSL|): 512.00000000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 9.6616871455409171e-14
+// mean(f - f_GSL): -47.364405233074315
+// variance(f - f_GSL): 23782.450110032125
+// stddev(f - f_GSL): 154.21559619581973
+const testcase_assoc_laguerre<double>
+data054[11] =
+{
+  { 1.6188460366265779e+17, 50, 20, 
+         0.0000000000000000, 0.0 },
+  { -307637087.25169408, 50, 20, 
+         10.000000000000000, 0.0 },
+  { 12524651.102974586, 50, 20, 
+         20.000000000000000, 0.0 },
+  { -315460483.86210561, 50, 20, 
+         30.000000000000000, 0.0 },
+  { -1889683587.3459988, 50, 20, 
+         40.000000000000000, 0.0 },
+  { 37457044404.200348, 50, 20, 
+         50.000000000000000, 0.0 },
+  { -843831858224.71802, 50, 20, 
+         60.000000000000000, 0.0 },
+  { -92231643172.307495, 50, 20, 
+         70.000000000000000, 0.0 },
+  { 904211757769501.00, 50, 20, 
+         80.000000000000000, 0.0 },
+  { 46508193600283272., 50, 20, 
+         90.000000000000000, 0.0 },
+  { 2.3216887928162719e+18, 50, 20, 
+         100.00000000000000, 0.0 },
+};
+const double toler054 = 5.0000000000000029e-12;
 
 // Test data for n=50, m=50.
-testcase_assoc_laguerre<double> data055[] = {
-  { 1.0089134454556417e+29, 50, 50,
-          0.0000000000000000 },
-  { 1.3822795753070569e+23, 50, 50,
-          10.000000000000000 },
-  { 95817260381628416., 50, 50,
-          20.000000000000000 },
-  { -910798580856013.88, 50, 50,
-          30.000000000000000 },
-  { 50513254049166.719, 50, 50,
-          40.000000000000000 },
-  { 84159703903349.859, 50, 50,
-          50.000000000000000 },
-  { -138805244691822.69, 50, 50,
-          60.000000000000000 },
-  { 181046391269246.25, 50, 50,
-          70.000000000000000 },
-  { 2086884905317107.2, 50, 50,
-          80.000000000000000 },
-  { -2765620139862432.5, 50, 50,
-          90.000000000000000 },
-  { -1.3706751678146291e+17, 50, 50,
-          100.00000000000000 },
-};
-
-// Test function for n=50, m=50.
-template <typename Tp>
-void test055()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data055)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data055[i].n), Tp(data055[i].m),
-                   Tp(data055[i].x));
-      const Tp f0 = data055[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+// max(|f - f_GSL|): 989855744.00000000 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.1139535389485780e-14
+// mean(f - f_GSL): 89986812.018465906
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_assoc_laguerre<double>
+data055[11] =
+{
+  { 1.0089134454556417e+29, 50, 50, 
+         0.0000000000000000, 0.0 },
+  { 1.3822795753070493e+23, 50, 50, 
+         10.000000000000000, 0.0 },
+  { 95817260381628336., 50, 50, 
+         20.000000000000000, 0.0 },
+  { -910798580856015.38, 50, 50, 
+         30.000000000000000, 0.0 },
+  { 50513254049166.922, 50, 50, 
+         40.000000000000000, 0.0 },
+  { 84159703903348.938, 50, 50, 
+         50.000000000000000, 0.0 },
+  { -138805244691822.72, 50, 50, 
+         60.000000000000000, 0.0 },
+  { 181046391269246.25, 50, 50, 
+         70.000000000000000, 0.0 },
+  { 2086884905317107.5, 50, 50, 
+         80.000000000000000, 0.0 },
+  { -2765620139862428.0, 50, 50, 
+         90.000000000000000, 0.0 },
+  { -1.3706751678146290e+17, 50, 50, 
+         100.00000000000000, 0.0 },
+};
+const double toler055 = 1.0000000000000008e-12;
 
 // Test data for n=50, m=100.
-testcase_assoc_laguerre<double> data056[] = {
-  { 2.0128660909731929e+40, 50, 100,
-          0.0000000000000000 },
-  { 9.3675094807695474e+37, 50, 100,
-          10.000000000000000 },
-  { 1.3009321481877196e+35, 50, 100,
-          20.000000000000000 },
-  { 7.3720026893233823e+30, 50, 100,
-          30.000000000000000 },
-  { -6.0824679079634607e+25, 50, 100,
-          40.000000000000000 },
-  { -6.0053188793543624e+23, 50, 100,
-          50.000000000000000 },
-  { 1.4178129287264701e+22, 50, 100,
-          60.000000000000000 },
-  { -5.4652099341566765e+20, 50, 100,
-          70.000000000000000 },
-  { -1.0817271759263398e+20, 50, 100,
-          80.000000000000000 },
-  { 3.8058734007924187e+19, 50, 100,
-          90.000000000000000 },
-  { 4.7439240848028353e+19, 50, 100,
-          100.00000000000000 },
-};
-
-// Test function for n=50, m=100.
-template <typename Tp>
-void test056()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data056)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data056[i].n), Tp(data056[i].m),
-                   Tp(data056[i].x));
-      const Tp f0 = data056[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-}
+// max(|f - f_GSL|): 1.8889465931478581e+22 at index 1
+// max(|f - f_GSL| / |f_GSL|): 2.2737143709403468e-14
+// mean(f - f_GSL): -1.7004551248566624e+21
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_assoc_laguerre<double>
+data056[11] =
+{
+  { 2.0128660909731929e+40, 50, 100, 
+         0.0000000000000000, 0.0 },
+  { 9.3675094807695474e+37, 50, 100, 
+         10.000000000000000, 0.0 },
+  { 1.3009321481877196e+35, 50, 100, 
+         20.000000000000000, 0.0 },
+  { 7.3720026893233823e+30, 50, 100, 
+         30.000000000000000, 0.0 },
+  { -6.0824679079634667e+25, 50, 100, 
+         40.000000000000000, 0.0 },
+  { -6.0053188793543450e+23, 50, 100, 
+         50.000000000000000, 0.0 },
+  { 1.4178129287264692e+22, 50, 100, 
+         60.000000000000000, 0.0 },
+  { -5.4652099341566706e+20, 50, 100, 
+         70.000000000000000, 0.0 },
+  { -1.0817271759263274e+20, 50, 100, 
+         80.000000000000000, 0.0 },
+  { 3.8058734007924195e+19, 50, 100, 
+         90.000000000000000, 0.0 },
+  { 4.7439240848028344e+19, 50, 100, 
+         100.00000000000000, 0.0 },
+};
+const double toler056 = 2.5000000000000015e-12;
 
 // Test data for n=100, m=0.
-testcase_assoc_laguerre<double> data057[] = {
-  { 1.0000000000000000, 100, 0,
-          0.0000000000000000 },
-  { 13.277662844303402, 100, 0,
-          10.000000000000000 },
-  { 1854.0367283243393, 100, 0,
-          20.000000000000000 },
-  { 170141.86987046539, 100, 0,
-          30.000000000000000 },
-  { -7272442.3156007063, 100, 0,
-          40.000000000000000 },
-  { 4847420871.2690468, 100, 0,
-          50.000000000000000 },
-  { 693492765740.29736, 100, 0,
-          60.000000000000000 },
-  { 17125518672239.707, 100, 0,
-          70.000000000000000 },
-  { -13763178176383754., 100, 0,
-          80.000000000000000 },
-  { 2.1307220490380198e+18, 100, 0,
-          90.000000000000000 },
-  { -2.6292260693068920e+20, 100, 0,
-          100.00000000000000 },
-};
-
-// Test function for n=100, m=0.
-template <typename Tp>
-void test057()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data057)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data057[i].n), Tp(data057[i].m),
-                   Tp(data057[i].x));
-      const Tp f0 = data057[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 98304.000000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 3.8776197831393928e-15
+// mean(f - f_GSL): -8865.4606155926431
+// variance(f - f_GSL): 4058808072.1721206
+// stddev(f - f_GSL): 63708.775472238682
+const testcase_assoc_laguerre<double>
+data057[11] =
+{
+  { 1.0000000000000000, 100, 0, 
+         0.0000000000000000, 0.0 },
+  { 13.277662844303450, 100, 0, 
+         10.000000000000000, 0.0 },
+  { 1854.0367283243388, 100, 0, 
+         20.000000000000000, 0.0 },
+  { 170141.86987046551, 100, 0, 
+         30.000000000000000, 0.0 },
+  { -7272442.3156006960, 100, 0, 
+         40.000000000000000, 0.0 },
+  { 4847420871.2690506, 100, 0, 
+         50.000000000000000, 0.0 },
+  { 693492765740.29688, 100, 0, 
+         60.000000000000000, 0.0 },
+  { 17125518672239.770, 100, 0, 
+         70.000000000000000, 0.0 },
+  { -13763178176383768., 100, 0, 
+         80.000000000000000, 0.0 },
+  { 2.1307220490380173e+18, 100, 0, 
+         90.000000000000000, 0.0 },
+  { -2.6292260693068916e+20, 100, 0, 
+         100.00000000000000, 0.0 },
+};
+const double toler057 = 2.5000000000000020e-13;
 
 // Test data for n=100, m=1.
-testcase_assoc_laguerre<double> data058[] = {
-  { 101.00000000000003, 100, 1,
-          0.0000000000000000 },
-  { -14.650661983680466, 100, 1,
-          10.000000000000000 },
-  { 1626.5010939361609, 100, 1,
-          20.000000000000000 },
-  { 417884.77658268705, 100, 1,
-          30.000000000000000 },
-  { -55617646.951649830, 100, 1,
-          40.000000000000000 },
-  { 884829874.26626098, 100, 1,
-          50.000000000000000 },
-  { 154466082750.32114, 100, 1,
-          60.000000000000000 },
-  { -101423973484646.05, 100, 1,
-          70.000000000000000 },
-  { -1388352348671755.5, 100, 1,
-          80.000000000000000 },
-  { 7.8048705513268326e+17, 100, 1,
-          90.000000000000000 },
-  { 1.6948925059042787e+19, 100, 1,
-          100.00000000000000 },
-};
-
-// Test function for n=100, m=1.
-template <typename Tp>
-void test058()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data058)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data058[i].n), Tp(data058[i].m),
-                   Tp(data058[i].x));
-      const Tp f0 = data058[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+// max(|f - f_GSL|): 245760.00000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 1.4500034612453474e-14
+// mean(f - f_GSL): 22224.249977270934
+// variance(f - f_GSL): 29644360933.494530
+// stddev(f - f_GSL): 172175.37841832824
+const testcase_assoc_laguerre<double>
+data058[11] =
+{
+  { 101.00000000000003, 100, 1, 
+         0.0000000000000000, 0.0 },
+  { -14.650661983680420, 100, 1, 
+         10.000000000000000, 0.0 },
+  { 1626.5010939361582, 100, 1, 
+         20.000000000000000, 0.0 },
+  { 417884.77658268728, 100, 1, 
+         30.000000000000000, 0.0 },
+  { -55617646.951649837, 100, 1, 
+         40.000000000000000, 0.0 },
+  { 884829874.26626217, 100, 1, 
+         50.000000000000000, 0.0 },
+  { 154466082750.32202, 100, 1, 
+         60.000000000000000, 0.0 },
+  { -101423973484646.00, 100, 1, 
+         70.000000000000000, 0.0 },
+  { -1388352348671756.8, 100, 1, 
+         80.000000000000000, 0.0 },
+  { 7.8048705513268582e+17, 100, 1, 
+         90.000000000000000, 0.0 },
+  { 1.6948925059042755e+19, 100, 1, 
+         100.00000000000000, 0.0 },
+};
+const double toler058 = 1.0000000000000008e-12;
 
 // Test data for n=100, m=2.
-testcase_assoc_laguerre<double> data059[] = {
-  { 5151.0000000000055, 100, 2,
-          0.0000000000000000 },
-  { -150.22012290951341, 100, 2,
-          10.000000000000000 },
-  { -7655.0593294049440, 100, 2,
-          20.000000000000000 },
-  { -140996.69276179170, 100, 2,
-          30.000000000000000 },
-  { -38645171.278549291, 100, 2,
-          40.000000000000000 },
-  { -8889263688.2118778, 100, 2,
-          50.000000000000000 },
-  { -1010338971533.3397, 100, 2,
-          60.000000000000000 },
-  { -127582564332943.91, 100, 2,
-          70.000000000000000 },
-  { 15970305694654336., 100, 2,
-          80.000000000000000 },
-  { -1.6019844992862840e+18, 100, 2,
-          90.000000000000000 },
-  { 2.8267024730962919e+20, 100, 2,
-          100.00000000000000 },
-};
-
-// Test function for n=100, m=2.
-template <typename Tp>
-void test059()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data059)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data059[i].n), Tp(data059[i].m),
-                   Tp(data059[i].x));
-      const Tp f0 = data059[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 557056.00000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 5.1603746667135714e-15
+// mean(f - f_GSL): 50294.883489425141
+// variance(f - f_GSL): 2009492413242.1035
+// stddev(f - f_GSL): 1417565.6645256698
+const testcase_assoc_laguerre<double>
+data059[11] =
+{
+  { 5151.0000000000055, 100, 2, 
+         0.0000000000000000, 0.0 },
+  { -150.22012290951324, 100, 2, 
+         10.000000000000000, 0.0 },
+  { -7655.0593294049449, 100, 2, 
+         20.000000000000000, 0.0 },
+  { -140996.69276179091, 100, 2, 
+         30.000000000000000, 0.0 },
+  { -38645171.278549351, 100, 2, 
+         40.000000000000000, 0.0 },
+  { -8889263688.2118931, 100, 2, 
+         50.000000000000000, 0.0 },
+  { -1010338971533.3400, 100, 2, 
+         60.000000000000000, 0.0 },
+  { -127582564332943.91, 100, 2, 
+         70.000000000000000, 0.0 },
+  { 15970305694654312., 100, 2, 
+         80.000000000000000, 0.0 },
+  { -1.6019844992862820e+18, 100, 2, 
+         90.000000000000000, 0.0 },
+  { 2.8267024730962955e+20, 100, 2, 
+         100.00000000000000, 0.0 },
+};
+const double toler059 = 5.0000000000000039e-13;
 
 // Test data for n=100, m=5.
-testcase_assoc_laguerre<double> data060[] = {
-  { 96560646.000000030, 100, 5,
-          0.0000000000000000 },
-  { 2430.6732236677576, 100, 5,
-          10.000000000000000 },
-  { 111162.32026994640, 100, 5,
-          20.000000000000000 },
-  { 4036708.2599413753, 100, 5,
-          30.000000000000000 },
-  { -34055982.664405435, 100, 5,
-          40.000000000000000 },
-  { 30110688343.562344, 100, 5,
-          50.000000000000000 },
-  { 2651429940558.2920, 100, 5,
-          60.000000000000000 },
-  { 192108556058942.84, 100, 5,
-          70.000000000000000 },
-  { -25410533973455528., 100, 5,
-          80.000000000000000 },
-  { 2.1072955633564431e+18, 100, 5,
-          90.000000000000000 },
-  { -2.9434005355877260e+20, 100, 5,
-          100.00000000000000 },
-};
-
-// Test function for n=100, m=5.
-template <typename Tp>
-void test060()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data060)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data060[i].n), Tp(data060[i].m),
-                   Tp(data060[i].x));
-      const Tp f0 = data060[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+// max(|f - f_GSL|): 393216.00000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 8.0946565190235238e-15
+// mean(f - f_GSL): 35883.277835871675
+// variance(f - f_GSL): 72845813363.438187
+// stddev(f - f_GSL): 269899.63572305575
+const testcase_assoc_laguerre<double>
+data060[11] =
+{
+  { 96560646.000000030, 100, 5, 
+         0.0000000000000000, 0.0 },
+  { 2430.6732236677612, 100, 5, 
+         10.000000000000000, 0.0 },
+  { 111162.32026994647, 100, 5, 
+         20.000000000000000, 0.0 },
+  { 4036708.2599413628, 100, 5, 
+         30.000000000000000, 0.0 },
+  { -34055982.664405443, 100, 5, 
+         40.000000000000000, 0.0 },
+  { 30110688343.562328, 100, 5, 
+         50.000000000000000, 0.0 },
+  { 2651429940558.2974, 100, 5, 
+         60.000000000000000, 0.0 },
+  { 192108556058943.09, 100, 5, 
+         70.000000000000000, 0.0 },
+  { -25410533973455528., 100, 5, 
+         80.000000000000000, 0.0 },
+  { 2.1072955633564431e+18, 100, 5, 
+         90.000000000000000, 0.0 },
+  { -2.9434005355877289e+20, 100, 5, 
+         100.00000000000000, 0.0 },
+};
+const double toler060 = 5.0000000000000039e-13;
 
 // Test data for n=100, m=10.
-testcase_assoc_laguerre<double> data061[] = {
-  { 46897636623981.039, 100, 10,
-          0.0000000000000000 },
-  { 529208.11550990446, 100, 10,
-          10.000000000000000 },
-  { 7402892.1748803742, 100, 10,
-          20.000000000000000 },
-  { 88369632.083243459, 100, 10,
-          30.000000000000000 },
-  { 822187797.59096730, 100, 10,
-          40.000000000000000 },
-  { 180231446033.06866, 100, 10,
-          50.000000000000000 },
-  { 7922942703798.1309, 100, 10,
-          60.000000000000000 },
-  { 784424250559043.38, 100, 10,
-          70.000000000000000 },
-  { -16325634720239362., 100, 10,
-          80.000000000000000 },
-  { -1.0879588307443181e+18, 100, 10,
-          90.000000000000000 },
-  { 3.0114394463610495e+19, 100, 10,
-          100.00000000000000 },
-};
-
-// Test function for n=100, m=10.
-template <typename Tp>
-void test061()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data061)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data061[i].n), Tp(data061[i].m),
-                   Tp(data061[i].x));
-      const Tp f0 = data061[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+// max(|f - f_GSL|): 155648.00000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 5.1685581852917721e-15
+// mean(f - f_GSL): 13707.238286828961
+// variance(f - f_GSL): 5037793089646.2549
+// stddev(f - f_GSL): 2244502.8602446141
+const testcase_assoc_laguerre<double>
+data061[11] =
+{
+  { 46897636623981.039, 100, 10, 
+         0.0000000000000000, 0.0 },
+  { 529208.11550990329, 100, 10, 
+         10.000000000000000, 0.0 },
+  { 7402892.1748803817, 100, 10, 
+         20.000000000000000, 0.0 },
+  { 88369632.083243579, 100, 10, 
+         30.000000000000000, 0.0 },
+  { 822187797.59096563, 100, 10, 
+         40.000000000000000, 0.0 },
+  { 180231446033.06866, 100, 10, 
+         50.000000000000000, 0.0 },
+  { 7922942703798.1309, 100, 10, 
+         60.000000000000000, 0.0 },
+  { 784424250559042.12, 100, 10, 
+         70.000000000000000, 0.0 },
+  { -16325634720239370., 100, 10, 
+         80.000000000000000, 0.0 },
+  { -1.0879588307443162e+18, 100, 10, 
+         90.000000000000000, 0.0 },
+  { 3.0114394463610642e+19, 100, 10, 
+         100.00000000000000, 0.0 },
+};
+const double toler061 = 5.0000000000000039e-13;
 
 // Test data for n=100, m=20.
-testcase_assoc_laguerre<double> data062[] = {
-  { 2.9462227291176614e+22, 100, 20,
-          0.0000000000000000 },
-  { 313694958939.90436, 100, 20,
-          10.000000000000000 },
-  { 45396489338.096252, 100, 20,
-          20.000000000000000 },
-  { -7215826758.0078783, 100, 20,
-          30.000000000000000 },
-  { 825949194005.88831, 100, 20,
-          40.000000000000000 },
-  { -2764742119971.0747, 100, 20,
-          50.000000000000000 },
-  { -219802198273516.03, 100, 20,
-          60.000000000000000 },
-  { -1699053306145266.0, 100, 20,
-          70.000000000000000 },
-  { 3.5495709345023853e+17, 100, 20,
-          80.000000000000000 },
-  { -9.6128675110292439e+18, 100, 20,
-          90.000000000000000 },
-  { 4.3619868422072153e+20, 100, 20,
-          100.00000000000000 },
-};
-
-// Test function for n=100, m=20.
-template <typename Tp>
-void test062()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data062)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data062[i].n), Tp(data062[i].m),
-                   Tp(data062[i].x));
-      const Tp f0 = data062[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 524288.00000000000 at index 10
+// max(|f - f_GSL| / |f_GSL|): 3.7005989410347388e-14
+// mean(f - f_GSL): -46766.623212640938
+// variance(f - f_GSL): 55764004614002920.
+// stddev(f - f_GSL): 236144033.61932081
+const testcase_assoc_laguerre<double>
+data062[11] =
+{
+  { 2.9462227291176614e+22, 100, 20, 
+         0.0000000000000000, 0.0 },
+  { 313694958939.90405, 100, 20, 
+         10.000000000000000, 0.0 },
+  { 45396489338.096191, 100, 20, 
+         20.000000000000000, 0.0 },
+  { -7215826758.0081253, 100, 20, 
+         30.000000000000000, 0.0 },
+  { 825949194005.88855, 100, 20, 
+         40.000000000000000, 0.0 },
+  { -2764742119971.0811, 100, 20, 
+         50.000000000000000, 0.0 },
+  { -219802198273516.03, 100, 20, 
+         60.000000000000000, 0.0 },
+  { -1699053306145262.0, 100, 20, 
+         70.000000000000000, 0.0 },
+  { 3.5495709345023846e+17, 100, 20, 
+         80.000000000000000, 0.0 },
+  { -9.6128675110292419e+18, 100, 20, 
+         90.000000000000000, 0.0 },
+  { 4.3619868422072212e+20, 100, 20, 
+         100.00000000000000, 0.0 },
+};
+const double toler062 = 2.5000000000000015e-12;
 
 // Test data for n=100, m=50.
-testcase_assoc_laguerre<double> data063[] = {
-  { 2.0128660909731931e+40, 100, 50,
-          0.0000000000000000 },
-  { -4.0151443913473681e+28, 100, 50,
-          10.000000000000000 },
-  { 3.2199632594552201e+22, 100, 50,
-          20.000000000000000 },
-  { -2.7568702092659717e+20, 100, 50,
-          30.000000000000000 },
-  { 7.5553066015421530e+19, 100, 50,
-          40.000000000000000 },
-  { -2.7651625252388041e+19, 100, 50,
-          50.000000000000000 },
-  { -5.8963680147283821e+19, 100, 50,
-          60.000000000000000 },
-  { -1.8082798163033126e+20, 100, 50,
-          70.000000000000000 },
-  { -3.9044276986817249e+20, 100, 50,
-          80.000000000000000 },
-  { 6.9926310700401904e+21, 100, 50,
-          90.000000000000000 },
-  { -5.5727272809923697e+22, 100, 50,
-          100.00000000000000 },
-};
-
-// Test function for n=100, m=50.
-template <typename Tp>
-void test063()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data063)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data063[i].n), Tp(data063[i].m),
-                   Tp(data063[i].x));
-      const Tp f0 = data063[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+// max(|f - f_GSL|): 316659348799488.00 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.1554040570270351e-14
+// mean(f - f_GSL): -28787238841995.637
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_assoc_laguerre<double>
+data063[11] =
+{
+  { 2.0128660909731931e+40, 100, 50, 
+         0.0000000000000000, 0.0 },
+  { -4.0151443913473373e+28, 100, 50, 
+         10.000000000000000, 0.0 },
+  { 3.2199632594551924e+22, 100, 50, 
+         20.000000000000000, 0.0 },
+  { -2.7568702092659756e+20, 100, 50, 
+         30.000000000000000, 0.0 },
+  { 7.5553066015421563e+19, 100, 50, 
+         40.000000000000000, 0.0 },
+  { -2.7651625252387734e+19, 100, 50, 
+         50.000000000000000, 0.0 },
+  { -5.8963680147283804e+19, 100, 50, 
+         60.000000000000000, 0.0 },
+  { -1.8082798163033106e+20, 100, 50, 
+         70.000000000000000, 0.0 },
+  { -3.9044276986817249e+20, 100, 50, 
+         80.000000000000000, 0.0 },
+  { 6.9926310700401904e+21, 100, 50, 
+         90.000000000000000, 0.0 },
+  { -5.5727272809923646e+22, 100, 50, 
+         100.00000000000000, 0.0 },
+};
+const double toler063 = 1.0000000000000008e-12;
 
 // Test data for n=100, m=100.
-testcase_assoc_laguerre<double> data064[] = {
-  { 9.0548514656103225e+58, 100, 100,
-          0.0000000000000000 },
-  { 1.3334078033060576e+54, 100, 100,
-          10.000000000000000 },
-  { 2.1002639254211231e+46, 100, 100,
-          20.000000000000000 },
-  { -1.1073158068796240e+39, 100, 100,
-          30.000000000000000 },
-  { -8.3640937363981405e+35, 100, 100,
-          40.000000000000000 },
-  { -6.5879339429312671e+32, 100, 100,
-          50.000000000000000 },
-  { -2.4190645077698453e+30, 100, 100,
-          60.000000000000000 },
-  { -7.9224960465662002e+29, 100, 100,
-          70.000000000000000 },
-  { -2.8605772478408853e+29, 100, 100,
-          80.000000000000000 },
-  { 2.4149589189610125e+28, 100, 100,
-          90.000000000000000 },
-  { 5.1146476014859003e+28, 100, 100,
-          100.00000000000000 },
-};
-
-// Test function for n=100, m=100.
-template <typename Tp>
-void test064()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data064)
-                         / sizeof(testcase_assoc_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_laguerre(Tp(data064[i].n), Tp(data064[i].m),
-                   Tp(data064[i].x));
-      const Tp f0 = data064[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-}
+// max(|f - f_GSL|): 2.3819765684465692e+39 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.9897039067343855e-14
+// mean(f - f_GSL): 2.1654330573519588e+38
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_assoc_laguerre<double>
+data064[11] =
+{
+  { 9.0548514656103225e+58, 100, 100, 
+         0.0000000000000000, 0.0 },
+  { 1.3334078033060556e+54, 100, 100, 
+         10.000000000000000, 0.0 },
+  { 2.1002639254211340e+46, 100, 100, 
+         20.000000000000000, 0.0 },
+  { -1.1073158068796292e+39, 100, 100, 
+         30.000000000000000, 0.0 },
+  { -8.3640937363981346e+35, 100, 100, 
+         40.000000000000000, 0.0 },
+  { -6.5879339429312686e+32, 100, 100, 
+         50.000000000000000, 0.0 },
+  { -2.4190645077698771e+30, 100, 100, 
+         60.000000000000000, 0.0 },
+  { -7.9224960465662171e+29, 100, 100, 
+         70.000000000000000, 0.0 },
+  { -2.8605772478408694e+29, 100, 100, 
+         80.000000000000000, 0.0 },
+  { 2.4149589189609957e+28, 100, 100, 
+         90.000000000000000, 0.0 },
+  { 5.1146476014859021e+28, 100, 100, 
+         100.00000000000000, 0.0 },
+};
+const double toler064 = 1.0000000000000008e-12;
+
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_assoc_laguerre<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+        {
+       const Ret f = std::tr1::assoc_laguerre(data[i].n, data[i].m,
+                    data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
-{
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
-  test015<double>();
-  test016<double>();
-  test017<double>();
-  test018<double>();
-  test019<double>();
-  test020<double>();
-  test021<double>();
-  test022<double>();
-  test023<double>();
-  test024<double>();
-  test025<double>();
-  test026<double>();
-  test027<double>();
-  test028<double>();
-  test029<double>();
-  test030<double>();
-  test031<double>();
-  test032<double>();
-  test033<double>();
-  test034<double>();
-  test035<double>();
-  test036<double>();
-  test037<double>();
-  test038<double>();
-  test039<double>();
-  test040<double>();
-  test041<double>();
-  test042<double>();
-  test043<double>();
-  test044<double>();
-  test045<double>();
-  test046<double>();
-  test047<double>();
-  test048<double>();
-  test049<double>();
-  test050<double>();
-  test051<double>();
-  test052<double>();
-  test053<double>();
-  test054<double>();
-  test055<double>();
-  test056<double>();
-  test057<double>();
-  test058<double>();
-  test059<double>();
-  test060<double>();
-  test061<double>();
-  test062<double>();
-  test063<double>();
-  test064<double>();
+int
+main()
+{
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
+  test(data016, toler016);
+  test(data017, toler017);
+  test(data018, toler018);
+  test(data019, toler019);
+  test(data020, toler020);
+  test(data021, toler021);
+  test(data022, toler022);
+  test(data023, toler023);
+  test(data024, toler024);
+  test(data025, toler025);
+  test(data026, toler026);
+  test(data027, toler027);
+  test(data028, toler028);
+  test(data029, toler029);
+  test(data030, toler030);
+  test(data031, toler031);
+  test(data032, toler032);
+  test(data033, toler033);
+  test(data034, toler034);
+  test(data035, toler035);
+  test(data036, toler036);
+  test(data037, toler037);
+  test(data038, toler038);
+  test(data039, toler039);
+  test(data040, toler040);
+  test(data041, toler041);
+  test(data042, toler042);
+  test(data043, toler043);
+  test(data044, toler044);
+  test(data045, toler045);
+  test(data046, toler046);
+  test(data047, toler047);
+  test(data048, toler048);
+  test(data049, toler049);
+  test(data050, toler050);
+  test(data051, toler051);
+  test(data052, toler052);
+  test(data053, toler053);
+  test(data054, toler054);
+  test(data055, toler055);
+  test(data056, toler056);
+  test(data057, toler057);
+  test(data058, toler058);
+  test(data059, toler059);
+  test(data060, toler060);
+  test(data061, toler061);
+  test(data062, toler062);
+  test(data063, toler063);
+  test(data064, toler064);
   return 0;
 }
index 7c5f086..538ffac 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  assoc_legendre
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for l=0, m=0.
-testcase_assoc_legendre<double> data001[] = {
-  { 1.0000000000000000, 0, 0,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0, 0,
-          -0.90000000000000002 },
-  { 1.0000000000000000, 0, 0,
-          -0.80000000000000004 },
-  { 1.0000000000000000, 0, 0,
-          -0.69999999999999996 },
-  { 1.0000000000000000, 0, 0,
-          -0.59999999999999998 },
-  { 1.0000000000000000, 0, 0,
-          -0.50000000000000000 },
-  { 1.0000000000000000, 0, 0,
-          -0.40000000000000002 },
-  { 1.0000000000000000, 0, 0,
-          -0.30000000000000004 },
-  { 1.0000000000000000, 0, 0,
-          -0.19999999999999996 },
-  { 1.0000000000000000, 0, 0,
-          -0.099999999999999978 },
-  { 1.0000000000000000, 0, 0,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0, 0,
-          0.10000000000000009 },
-  { 1.0000000000000000, 0, 0,
-          0.19999999999999996 },
-  { 1.0000000000000000, 0, 0,
-          0.30000000000000004 },
-  { 1.0000000000000000, 0, 0,
-          0.39999999999999991 },
-  { 1.0000000000000000, 0, 0,
-          0.50000000000000000 },
-  { 1.0000000000000000, 0, 0,
-          0.60000000000000009 },
-  { 1.0000000000000000, 0, 0,
-          0.69999999999999996 },
-  { 1.0000000000000000, 0, 0,
-          0.80000000000000004 },
-  { 1.0000000000000000, 0, 0,
-          0.89999999999999991 },
-  { 1.0000000000000000, 0, 0,
-          1.0000000000000000 },
-};
-
-// Test function for l=0, m=0.
-template <typename Tp>
-void test001()
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_legendre<double>
+data001[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data001[i].l), Tp(data001[i].m),
-                   Tp(data001[i].x));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=1, m=0.
-testcase_assoc_legendre<double> data002[] = {
-  { -1.0000000000000000, 1, 0,
-          -1.0000000000000000 },
-  { -0.90000000000000002, 1, 0,
-          -0.90000000000000002 },
-  { -0.80000000000000004, 1, 0,
-          -0.80000000000000004 },
-  { -0.69999999999999996, 1, 0,
-          -0.69999999999999996 },
-  { -0.59999999999999998, 1, 0,
-          -0.59999999999999998 },
-  { -0.50000000000000000, 1, 0,
-          -0.50000000000000000 },
-  { -0.40000000000000002, 1, 0,
-          -0.40000000000000002 },
-  { -0.30000000000000004, 1, 0,
-          -0.30000000000000004 },
-  { -0.19999999999999996, 1, 0,
-          -0.19999999999999996 },
-  { -0.099999999999999978, 1, 0,
-          -0.099999999999999978 },
-  { 0.0000000000000000, 1, 0,
-          0.0000000000000000 },
-  { 0.10000000000000009, 1, 0,
-          0.10000000000000009 },
-  { 0.19999999999999996, 1, 0,
-          0.19999999999999996 },
-  { 0.30000000000000004, 1, 0,
-          0.30000000000000004 },
-  { 0.39999999999999991, 1, 0,
-          0.39999999999999991 },
-  { 0.50000000000000000, 1, 0,
-          0.50000000000000000 },
-  { 0.60000000000000009, 1, 0,
-          0.60000000000000009 },
-  { 0.69999999999999996, 1, 0,
-          0.69999999999999996 },
-  { 0.80000000000000004, 1, 0,
-          0.80000000000000004 },
-  { 0.89999999999999991, 1, 0,
-          0.89999999999999991 },
-  { 1.0000000000000000, 1, 0,
-          1.0000000000000000 },
+  { 1.0000000000000000, 0, 0, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 0, 0, 
+         1.0000000000000000, 0.0 },
 };
+const double toler001 = 2.5000000000000020e-13;
 
-// Test function for l=1, m=0.
-template <typename Tp>
-void test002()
+// Test data for l=1, m=0.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_legendre<double>
+data002[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data002)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data002[i].l), Tp(data002[i].m),
-                   Tp(data002[i].x));
-      const Tp f0 = data002[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=1, m=1.
-testcase_assoc_legendre<double> data003[] = {
-  { -0.0000000000000000, 1, 1,
-          -1.0000000000000000 },
-  { -0.43588989435406728, 1, 1,
-          -0.90000000000000002 },
-  { -0.59999999999999987, 1, 1,
-          -0.80000000000000004 },
-  { -0.71414284285428509, 1, 1,
-          -0.69999999999999996 },
-  { -0.80000000000000004, 1, 1,
-          -0.59999999999999998 },
-  { -0.86602540378443860, 1, 1,
-          -0.50000000000000000 },
-  { -0.91651513899116799, 1, 1,
-          -0.40000000000000002 },
-  { -0.95393920141694577, 1, 1,
-          -0.30000000000000004 },
-  { -0.97979589711327120, 1, 1,
-          -0.19999999999999996 },
-  { -0.99498743710661997, 1, 1,
-          -0.099999999999999978 },
-  { -1.0000000000000000, 1, 1,
-          0.0000000000000000 },
-  { -0.99498743710661997, 1, 1,
-          0.10000000000000009 },
-  { -0.97979589711327120, 1, 1,
-          0.19999999999999996 },
-  { -0.95393920141694577, 1, 1,
-          0.30000000000000004 },
-  { -0.91651513899116799, 1, 1,
-          0.39999999999999991 },
-  { -0.86602540378443860, 1, 1,
-          0.50000000000000000 },
-  { -0.79999999999999993, 1, 1,
-          0.60000000000000009 },
-  { -0.71414284285428509, 1, 1,
-          0.69999999999999996 },
-  { -0.59999999999999987, 1, 1,
-          0.80000000000000004 },
-  { -0.43588989435406750, 1, 1,
-          0.89999999999999991 },
-  { -0.0000000000000000, 1, 1,
-          1.0000000000000000 },
+  { -1.0000000000000000, 1, 0, 
+         -1.0000000000000000, 0.0 },
+  { -0.90000000000000002, 1, 0, 
+         -0.90000000000000002, 0.0 },
+  { -0.80000000000000004, 1, 0, 
+         -0.80000000000000004, 0.0 },
+  { -0.69999999999999996, 1, 0, 
+         -0.69999999999999996, 0.0 },
+  { -0.59999999999999998, 1, 0, 
+         -0.59999999999999998, 0.0 },
+  { -0.50000000000000000, 1, 0, 
+         -0.50000000000000000, 0.0 },
+  { -0.39999999999999991, 1, 0, 
+         -0.39999999999999991, 0.0 },
+  { -0.29999999999999993, 1, 0, 
+         -0.29999999999999993, 0.0 },
+  { -0.19999999999999996, 1, 0, 
+         -0.19999999999999996, 0.0 },
+  { -0.099999999999999978, 1, 0, 
+         -0.099999999999999978, 0.0 },
+  { 0.0000000000000000, 1, 0, 
+         0.0000000000000000, 0.0 },
+  { 0.10000000000000009, 1, 0, 
+         0.10000000000000009, 0.0 },
+  { 0.20000000000000018, 1, 0, 
+         0.20000000000000018, 0.0 },
+  { 0.30000000000000004, 1, 0, 
+         0.30000000000000004, 0.0 },
+  { 0.40000000000000013, 1, 0, 
+         0.40000000000000013, 0.0 },
+  { 0.50000000000000000, 1, 0, 
+         0.50000000000000000, 0.0 },
+  { 0.60000000000000009, 1, 0, 
+         0.60000000000000009, 0.0 },
+  { 0.70000000000000018, 1, 0, 
+         0.70000000000000018, 0.0 },
+  { 0.80000000000000004, 1, 0, 
+         0.80000000000000004, 0.0 },
+  { 0.90000000000000013, 1, 0, 
+         0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 1, 0, 
+         1.0000000000000000, 0.0 },
 };
+const double toler002 = 2.5000000000000020e-13;
 
-// Test function for l=1, m=1.
-template <typename Tp>
-void test003()
+// Test data for l=1, m=1.
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 12
+// max(|f - f_GSL| / |f_GSL|): 2.4227052612512390e-16
+// mean(f - f_GSL): 1.0573552615477681e-17
+// variance(f - f_GSL): 5.8695007828944331e-36
+// stddev(f - f_GSL): 2.4227052612512388e-18
+const testcase_assoc_legendre<double>
+data003[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data003)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data003[i].l), Tp(data003[i].m),
-                   Tp(data003[i].x));
-      const Tp f0 = data003[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=2, m=0.
-testcase_assoc_legendre<double> data004[] = {
-  { 1.0000000000000000, 2, 0,
-          -1.0000000000000000 },
-  { 0.71500000000000008, 2, 0,
-          -0.90000000000000002 },
-  { 0.46000000000000019, 2, 0,
-          -0.80000000000000004 },
-  { 0.23499999999999982, 2, 0,
-          -0.69999999999999996 },
-  { 0.039999999999999925, 2, 0,
-          -0.59999999999999998 },
-  { -0.12500000000000000, 2, 0,
-          -0.50000000000000000 },
-  { -0.25999999999999995, 2, 0,
-          -0.40000000000000002 },
-  { -0.36499999999999994, 2, 0,
-          -0.30000000000000004 },
-  { -0.44000000000000000, 2, 0,
-          -0.19999999999999996 },
-  { -0.48499999999999999, 2, 0,
-          -0.099999999999999978 },
-  { -0.50000000000000000, 2, 0,
-          0.0000000000000000 },
-  { -0.48499999999999999, 2, 0,
-          0.10000000000000009 },
-  { -0.44000000000000000, 2, 0,
-          0.19999999999999996 },
-  { -0.36499999999999994, 2, 0,
-          0.30000000000000004 },
-  { -0.26000000000000012, 2, 0,
-          0.39999999999999991 },
-  { -0.12500000000000000, 2, 0,
-          0.50000000000000000 },
-  { 0.040000000000000160, 2, 0,
-          0.60000000000000009 },
-  { 0.23499999999999982, 2, 0,
-          0.69999999999999996 },
-  { 0.46000000000000019, 2, 0,
-          0.80000000000000004 },
-  { 0.71499999999999975, 2, 0,
-          0.89999999999999991 },
-  { 1.0000000000000000, 2, 0,
-          1.0000000000000000 },
+  { -0.0000000000000000, 1, 1, 
+         -1.0000000000000000, 0.0 },
+  { -0.43588989435406728, 1, 1, 
+         -0.90000000000000002, 0.0 },
+  { -0.59999999999999987, 1, 1, 
+         -0.80000000000000004, 0.0 },
+  { -0.71414284285428509, 1, 1, 
+         -0.69999999999999996, 0.0 },
+  { -0.80000000000000004, 1, 1, 
+         -0.59999999999999998, 0.0 },
+  { -0.86602540378443860, 1, 1, 
+         -0.50000000000000000, 0.0 },
+  { -0.91651513899116799, 1, 1, 
+         -0.39999999999999991, 0.0 },
+  { -0.95393920141694555, 1, 1, 
+         -0.29999999999999993, 0.0 },
+  { -0.97979589711327120, 1, 1, 
+         -0.19999999999999996, 0.0 },
+  { -0.99498743710661997, 1, 1, 
+         -0.099999999999999978, 0.0 },
+  { -1.0000000000000000, 1, 1, 
+         0.0000000000000000, 0.0 },
+  { -0.99498743710661997, 1, 1, 
+         0.10000000000000009, 0.0 },
+  { -0.97979589711327120, 1, 1, 
+         0.20000000000000018, 0.0 },
+  { -0.95393920141694577, 1, 1, 
+         0.30000000000000004, 0.0 },
+  { -0.91651513899116788, 1, 1, 
+         0.40000000000000013, 0.0 },
+  { -0.86602540378443860, 1, 1, 
+         0.50000000000000000, 0.0 },
+  { -0.79999999999999993, 1, 1, 
+         0.60000000000000009, 0.0 },
+  { -0.71414284285428475, 1, 1, 
+         0.70000000000000018, 0.0 },
+  { -0.59999999999999987, 1, 1, 
+         0.80000000000000004, 0.0 },
+  { -0.43588989435406711, 1, 1, 
+         0.90000000000000013, 0.0 },
+  { -0.0000000000000000, 1, 1, 
+         1.0000000000000000, 0.0 },
 };
+const double toler003 = 2.5000000000000020e-13;
 
-// Test function for l=2, m=0.
-template <typename Tp>
-void test004()
+// Test data for l=2, m=0.
+// max(|f - f_GSL|): 1.1102230246251565e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.3877787807814482e-15
+// mean(f - f_GSL): 1.8503717077085941e-17
+// variance(f - f_GSL): 1.7975346147614202e-35
+// stddev(f - f_GSL): 4.2397342071896678e-18
+const testcase_assoc_legendre<double>
+data004[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data004)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data004[i].l), Tp(data004[i].m),
-                   Tp(data004[i].x));
-      const Tp f0 = data004[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=2, m=1.
-testcase_assoc_legendre<double> data005[] = {
-  { 0.0000000000000000, 2, 1,
-          -1.0000000000000000 },
-  { 1.1769027147559816, 2, 1,
-          -0.90000000000000002 },
-  { 1.4399999999999999, 2, 1,
-          -0.80000000000000004 },
-  { 1.4996999699939983, 2, 1,
-          -0.69999999999999996 },
-  { 1.4399999999999999, 2, 1,
-          -0.59999999999999998 },
-  { 1.2990381056766580, 2, 1,
-          -0.50000000000000000 },
-  { 1.0998181667894018, 2, 1,
-          -0.40000000000000002 },
-  { 0.85854528127525132, 2, 1,
-          -0.30000000000000004 },
-  { 0.58787753826796263, 2, 1,
-          -0.19999999999999996 },
-  { 0.29849623113198592, 2, 1,
-          -0.099999999999999978 },
-  { -0.0000000000000000, 2, 1,
-          0.0000000000000000 },
-  { -0.29849623113198626, 2, 1,
-          0.10000000000000009 },
-  { -0.58787753826796263, 2, 1,
-          0.19999999999999996 },
-  { -0.85854528127525132, 2, 1,
-          0.30000000000000004 },
-  { -1.0998181667894014, 2, 1,
-          0.39999999999999991 },
-  { -1.2990381056766580, 2, 1,
-          0.50000000000000000 },
-  { -1.4400000000000002, 2, 1,
-          0.60000000000000009 },
-  { -1.4996999699939983, 2, 1,
-          0.69999999999999996 },
-  { -1.4399999999999999, 2, 1,
-          0.80000000000000004 },
-  { -1.1769027147559821, 2, 1,
-          0.89999999999999991 },
-  { -0.0000000000000000, 2, 1,
-          1.0000000000000000 },
+  { 1.0000000000000000, 2, 0, 
+         -1.0000000000000000, 0.0 },
+  { 0.71500000000000008, 2, 0, 
+         -0.90000000000000002, 0.0 },
+  { 0.46000000000000019, 2, 0, 
+         -0.80000000000000004, 0.0 },
+  { 0.23499999999999988, 2, 0, 
+         -0.69999999999999996, 0.0 },
+  { 0.039999999999999925, 2, 0, 
+         -0.59999999999999998, 0.0 },
+  { -0.12500000000000000, 2, 0, 
+         -0.50000000000000000, 0.0 },
+  { -0.26000000000000012, 2, 0, 
+         -0.39999999999999991, 0.0 },
+  { -0.36500000000000005, 2, 0, 
+         -0.29999999999999993, 0.0 },
+  { -0.44000000000000006, 2, 0, 
+         -0.19999999999999996, 0.0 },
+  { -0.48499999999999999, 2, 0, 
+         -0.099999999999999978, 0.0 },
+  { -0.50000000000000000, 2, 0, 
+         0.0000000000000000, 0.0 },
+  { -0.48499999999999999, 2, 0, 
+         0.10000000000000009, 0.0 },
+  { -0.43999999999999989, 2, 0, 
+         0.20000000000000018, 0.0 },
+  { -0.36499999999999999, 2, 0, 
+         0.30000000000000004, 0.0 },
+  { -0.25999999999999984, 2, 0, 
+         0.40000000000000013, 0.0 },
+  { -0.12500000000000000, 2, 0, 
+         0.50000000000000000, 0.0 },
+  { 0.040000000000000147, 2, 0, 
+         0.60000000000000009, 0.0 },
+  { 0.23500000000000032, 2, 0, 
+         0.70000000000000018, 0.0 },
+  { 0.46000000000000019, 2, 0, 
+         0.80000000000000004, 0.0 },
+  { 0.71500000000000030, 2, 0, 
+         0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 2, 0, 
+         1.0000000000000000, 0.0 },
 };
+const double toler004 = 2.5000000000000020e-13;
 
-// Test function for l=2, m=1.
-template <typename Tp>
-void test005()
+// Test data for l=2, m=1.
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 3
+// max(|f - f_GSL| / |f_GSL|): 3.7770554319736585e-16
+// mean(f - f_GSL): -1.0573552615477681e-17
+// variance(f - f_GSL): 5.8695007828944331e-36
+// stddev(f - f_GSL): 2.4227052612512388e-18
+const testcase_assoc_legendre<double>
+data005[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data005)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data005[i].l), Tp(data005[i].m),
-                   Tp(data005[i].x));
-      const Tp f0 = data005[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=2, m=2.
-testcase_assoc_legendre<double> data006[] = {
-  { 0.0000000000000000, 2, 2,
-          -1.0000000000000000 },
-  { 0.56999999999999984, 2, 2,
-          -0.90000000000000002 },
-  { 1.0799999999999996, 2, 2,
-          -0.80000000000000004 },
-  { 1.5300000000000005, 2, 2,
-          -0.69999999999999996 },
-  { 1.9200000000000004, 2, 2,
-          -0.59999999999999998 },
-  { 2.2500000000000000, 2, 2,
-          -0.50000000000000000 },
-  { 2.5200000000000000, 2, 2,
-          -0.40000000000000002 },
-  { 2.7300000000000004, 2, 2,
-          -0.30000000000000004 },
-  { 2.8799999999999999, 2, 2,
-          -0.19999999999999996 },
-  { 2.9700000000000002, 2, 2,
-          -0.099999999999999978 },
-  { 3.0000000000000000, 2, 2,
-          0.0000000000000000 },
-  { 2.9700000000000002, 2, 2,
-          0.10000000000000009 },
-  { 2.8799999999999999, 2, 2,
-          0.19999999999999996 },
-  { 2.7300000000000004, 2, 2,
-          0.30000000000000004 },
-  { 2.5200000000000000, 2, 2,
-          0.39999999999999991 },
-  { 2.2500000000000000, 2, 2,
-          0.50000000000000000 },
-  { 1.9199999999999997, 2, 2,
-          0.60000000000000009 },
-  { 1.5300000000000005, 2, 2,
-          0.69999999999999996 },
-  { 1.0799999999999996, 2, 2,
-          0.80000000000000004 },
-  { 0.57000000000000040, 2, 2,
-          0.89999999999999991 },
-  { 0.0000000000000000, 2, 2,
-          1.0000000000000000 },
+  { 0.0000000000000000, 2, 1, 
+         -1.0000000000000000, 0.0 },
+  { 1.1769027147559816, 2, 1, 
+         -0.90000000000000002, 0.0 },
+  { 1.4399999999999999, 2, 1, 
+         -0.80000000000000004, 0.0 },
+  { 1.4996999699939983, 2, 1, 
+         -0.69999999999999996, 0.0 },
+  { 1.4399999999999999, 2, 1, 
+         -0.59999999999999998, 0.0 },
+  { 1.2990381056766580, 2, 1, 
+         -0.50000000000000000, 0.0 },
+  { 1.0998181667894014, 2, 1, 
+         -0.39999999999999991, 0.0 },
+  { 0.85854528127525076, 2, 1, 
+         -0.29999999999999993, 0.0 },
+  { 0.58787753826796263, 2, 1, 
+         -0.19999999999999996, 0.0 },
+  { 0.29849623113198592, 2, 1, 
+         -0.099999999999999978, 0.0 },
+  { -0.0000000000000000, 2, 1, 
+         0.0000000000000000, 0.0 },
+  { -0.29849623113198626, 2, 1, 
+         0.10000000000000009, 0.0 },
+  { -0.58787753826796330, 2, 1, 
+         0.20000000000000018, 0.0 },
+  { -0.85854528127525132, 2, 1, 
+         0.30000000000000004, 0.0 },
+  { -1.0998181667894018, 2, 1, 
+         0.40000000000000013, 0.0 },
+  { -1.2990381056766580, 2, 1, 
+         0.50000000000000000, 0.0 },
+  { -1.4400000000000002, 2, 1, 
+         0.60000000000000009, 0.0 },
+  { -1.4996999699939983, 2, 1, 
+         0.70000000000000018, 0.0 },
+  { -1.4399999999999999, 2, 1, 
+         0.80000000000000004, 0.0 },
+  { -1.1769027147559812, 2, 1, 
+         0.90000000000000013, 0.0 },
+  { -0.0000000000000000, 2, 1, 
+         1.0000000000000000, 0.0 },
 };
+const double toler005 = 2.5000000000000020e-13;
 
-// Test function for l=2, m=2.
-template <typename Tp>
-void test006()
+// Test data for l=2, m=2.
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 5.2867763077388426e-16
+// mean(f - f_GSL): -8.4588420923821446e-17
+// variance(f - f_GSL): 3.7564805010524372e-34
+// stddev(f - f_GSL): 1.9381642090009910e-17
+const testcase_assoc_legendre<double>
+data006[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data006)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data006[i].l), Tp(data006[i].m),
-                   Tp(data006[i].x));
-      const Tp f0 = data006[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=5, m=0.
-testcase_assoc_legendre<double> data007[] = {
-  { -1.0000000000000000, 5, 0,
-          -1.0000000000000000 },
-  { 0.041141249999999997, 5, 0,
-          -0.90000000000000002 },
-  { 0.39951999999999993, 5, 0,
-          -0.80000000000000004 },
-  { 0.36519874999999991, 5, 0,
-          -0.69999999999999996 },
-  { 0.15263999999999994, 5, 0,
-          -0.59999999999999998 },
-  { -0.089843750000000000, 5, 0,
-          -0.50000000000000000 },
-  { -0.27063999999999988, 5, 0,
-          -0.40000000000000002 },
-  { -0.34538624999999995, 5, 0,
-          -0.30000000000000004 },
-  { -0.30751999999999996, 5, 0,
-          -0.19999999999999996 },
-  { -0.17882874999999995, 5, 0,
-          -0.099999999999999978 },
-  { 0.0000000000000000, 5, 0,
-          0.0000000000000000 },
-  { 0.17882875000000015, 5, 0,
-          0.10000000000000009 },
-  { 0.30751999999999996, 5, 0,
-          0.19999999999999996 },
-  { 0.34538624999999995, 5, 0,
-          0.30000000000000004 },
-  { 0.27064000000000010, 5, 0,
-          0.39999999999999991 },
-  { 0.089843750000000000, 5, 0,
-          0.50000000000000000 },
-  { -0.15264000000000022, 5, 0,
-          0.60000000000000009 },
-  { -0.36519874999999991, 5, 0,
-          0.69999999999999996 },
-  { -0.39951999999999993, 5, 0,
-          0.80000000000000004 },
-  { -0.041141250000000407, 5, 0,
-          0.89999999999999991 },
-  { 1.0000000000000000, 5, 0,
-          1.0000000000000000 },
+  { 0.0000000000000000, 2, 2, 
+         -1.0000000000000000, 0.0 },
+  { 0.56999999999999984, 2, 2, 
+         -0.90000000000000002, 0.0 },
+  { 1.0799999999999996, 2, 2, 
+         -0.80000000000000004, 0.0 },
+  { 1.5300000000000005, 2, 2, 
+         -0.69999999999999996, 0.0 },
+  { 1.9200000000000004, 2, 2, 
+         -0.59999999999999998, 0.0 },
+  { 2.2500000000000000, 2, 2, 
+         -0.50000000000000000, 0.0 },
+  { 2.5200000000000000, 2, 2, 
+         -0.39999999999999991, 0.0 },
+  { 2.7299999999999995, 2, 2, 
+         -0.29999999999999993, 0.0 },
+  { 2.8799999999999999, 2, 2, 
+         -0.19999999999999996, 0.0 },
+  { 2.9700000000000002, 2, 2, 
+         -0.099999999999999978, 0.0 },
+  { 3.0000000000000000, 2, 2, 
+         0.0000000000000000, 0.0 },
+  { 2.9700000000000002, 2, 2, 
+         0.10000000000000009, 0.0 },
+  { 2.8799999999999999, 2, 2, 
+         0.20000000000000018, 0.0 },
+  { 2.7300000000000004, 2, 2, 
+         0.30000000000000004, 0.0 },
+  { 2.5199999999999991, 2, 2, 
+         0.40000000000000013, 0.0 },
+  { 2.2500000000000000, 2, 2, 
+         0.50000000000000000, 0.0 },
+  { 1.9199999999999997, 2, 2, 
+         0.60000000000000009, 0.0 },
+  { 1.5299999999999989, 2, 2, 
+         0.70000000000000018, 0.0 },
+  { 1.0799999999999996, 2, 2, 
+         0.80000000000000004, 0.0 },
+  { 0.56999999999999929, 2, 2, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 2, 2, 
+         1.0000000000000000, 0.0 },
 };
+const double toler006 = 2.5000000000000020e-13;
 
-// Test function for l=5, m=0.
-template <typename Tp>
-void test007()
+// Test data for l=5, m=0.
+// max(|f - f_GSL|): 2.0122792321330962e-16 at index 19
+// max(|f - f_GSL| / |f_GSL|): 4.8911475274405560e-15
+// mean(f - f_GSL): -2.3129646346357427e-18
+// variance(f - f_GSL): 2.8086478355647191e-37
+// stddev(f - f_GSL): 5.2996677589870847e-19
+const testcase_assoc_legendre<double>
+data007[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data007)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data007[i].l), Tp(data007[i].m),
-                   Tp(data007[i].x));
-      const Tp f0 = data007[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=5, m=1.
-testcase_assoc_legendre<double> data008[] = {
-  { 0.0000000000000000, 5, 1,
-          -1.0000000000000000 },
-  { -2.8099369608350973, 5, 1,
-          -0.90000000000000002 },
-  { -0.72180000000000089, 5, 1,
-          -0.80000000000000004 },
-  { 1.0951826834447254, 5, 1,
-          -0.69999999999999996 },
-  { 1.9775999999999998, 5, 1,
-          -0.59999999999999998 },
-  { 1.9282596881137892, 5, 1,
-          -0.50000000000000000 },
-  { 1.2070504380513685, 5, 1,
-          -0.40000000000000002 },
-  { 0.16079837663884430, 5, 1,
-          -0.30000000000000004 },
-  { -0.87005875663658538, 5, 1,
-          -0.19999999999999996 },
-  { -1.6083350053680323, 5, 1,
-          -0.099999999999999978 },
-  { -1.8750000000000000, 5, 1,
-          0.0000000000000000 },
-  { -1.6083350053680314, 5, 1,
-          0.10000000000000009 },
-  { -0.87005875663658538, 5, 1,
-          0.19999999999999996 },
-  { 0.16079837663884430, 5, 1,
-          0.30000000000000004 },
-  { 1.2070504380513674, 5, 1,
-          0.39999999999999991 },
-  { 1.9282596881137892, 5, 1,
-          0.50000000000000000 },
-  { 1.9775999999999996, 5, 1,
-          0.60000000000000009 },
-  { 1.0951826834447254, 5, 1,
-          0.69999999999999996 },
-  { -0.72180000000000089, 5, 1,
-          0.80000000000000004 },
-  { -2.8099369608350959, 5, 1,
-          0.89999999999999991 },
-  { 0.0000000000000000, 5, 1,
-          1.0000000000000000 },
+  { -1.0000000000000000, 5, 0, 
+         -1.0000000000000000, 0.0 },
+  { 0.041141250000000087, 5, 0, 
+         -0.90000000000000002, 0.0 },
+  { 0.39951999999999993, 5, 0, 
+         -0.80000000000000004, 0.0 },
+  { 0.36519874999999991, 5, 0, 
+         -0.69999999999999996, 0.0 },
+  { 0.15263999999999994, 5, 0, 
+         -0.59999999999999998, 0.0 },
+  { -0.089843750000000000, 5, 0, 
+         -0.50000000000000000, 0.0 },
+  { -0.27064000000000010, 5, 0, 
+         -0.39999999999999991, 0.0 },
+  { -0.34538624999999995, 5, 0, 
+         -0.29999999999999993, 0.0 },
+  { -0.30751999999999996, 5, 0, 
+         -0.19999999999999996, 0.0 },
+  { -0.17882874999999995, 5, 0, 
+         -0.099999999999999978, 0.0 },
+  { 0.0000000000000000, 5, 0, 
+         0.0000000000000000, 0.0 },
+  { 0.17882875000000015, 5, 0, 
+         0.10000000000000009, 0.0 },
+  { 0.30752000000000013, 5, 0, 
+         0.20000000000000018, 0.0 },
+  { 0.34538625000000001, 5, 0, 
+         0.30000000000000004, 0.0 },
+  { 0.27063999999999988, 5, 0, 
+         0.40000000000000013, 0.0 },
+  { 0.089843750000000000, 5, 0, 
+         0.50000000000000000, 0.0 },
+  { -0.15264000000000016, 5, 0, 
+         0.60000000000000009, 0.0 },
+  { -0.36519875000000024, 5, 0, 
+         0.70000000000000018, 0.0 },
+  { -0.39951999999999993, 5, 0, 
+         0.80000000000000004, 0.0 },
+  { -0.041141249999999151, 5, 0, 
+         0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 5, 0, 
+         1.0000000000000000, 0.0 },
 };
+const double toler007 = 2.5000000000000020e-13;
 
-// Test function for l=5, m=1.
-template <typename Tp>
-void test008()
+// Test data for l=5, m=1.
+// max(|f - f_GSL|): 6.6613381477509392e-16 at index 14
+// max(|f - f_GSL| / |f_GSL|): 5.5186908001167120e-16
+// mean(f - f_GSL): -1.0573552615477681e-17
+// variance(f - f_GSL): 5.8695007828944331e-36
+// stddev(f - f_GSL): 2.4227052612512388e-18
+const testcase_assoc_legendre<double>
+data008[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data008)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data008[i].l), Tp(data008[i].m),
-                   Tp(data008[i].x));
-      const Tp f0 = data008[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=5, m=2.
-testcase_assoc_legendre<double> data009[] = {
-  { 0.0000000000000000, 5, 2,
-          -1.0000000000000000 },
-  { -12.837824999999995, 5, 2,
-          -0.90000000000000002 },
-  { -13.910399999999997, 5, 2,
-          -0.80000000000000004 },
-  { -8.8089749999999984, 5, 2,
-          -0.69999999999999996 },
-  { -1.6128000000000009, 5, 2,
-          -0.59999999999999998 },
-  { 4.9218750000000000, 5, 2,
-          -0.50000000000000000 },
-  { 9.1728000000000005, 5, 2,
-          -0.40000000000000002 },
-  { 10.462725000000001, 5, 2,
-          -0.30000000000000004 },
-  { 8.8703999999999983, 5, 2,
-          -0.19999999999999996 },
-  { 5.0415749999999999, 5, 2,
-          -0.099999999999999978 },
-  { -0.0000000000000000, 5, 2,
-          0.0000000000000000 },
-  { -5.0415750000000044, 5, 2,
-          0.10000000000000009 },
-  { -8.8703999999999983, 5, 2,
-          0.19999999999999996 },
-  { -10.462725000000001, 5, 2,
-          0.30000000000000004 },
-  { -9.1728000000000005, 5, 2,
-          0.39999999999999991 },
-  { -4.9218750000000000, 5, 2,
-          0.50000000000000000 },
-  { 1.6128000000000071, 5, 2,
-          0.60000000000000009 },
-  { 8.8089749999999984, 5, 2,
-          0.69999999999999996 },
-  { 13.910399999999997, 5, 2,
-          0.80000000000000004 },
-  { 12.837825000000004, 5, 2,
-          0.89999999999999991 },
-  { 0.0000000000000000, 5, 2,
-          1.0000000000000000 },
+  { 0.0000000000000000, 5, 1, 
+         -1.0000000000000000, 0.0 },
+  { -2.8099369608350981, 5, 1, 
+         -0.90000000000000002, 0.0 },
+  { -0.72180000000000089, 5, 1, 
+         -0.80000000000000004, 0.0 },
+  { 1.0951826834447254, 5, 1, 
+         -0.69999999999999996, 0.0 },
+  { 1.9775999999999998, 5, 1, 
+         -0.59999999999999998, 0.0 },
+  { 1.9282596881137892, 5, 1, 
+         -0.50000000000000000, 0.0 },
+  { 1.2070504380513671, 5, 1, 
+         -0.39999999999999991, 0.0 },
+  { 0.16079837663884300, 5, 1, 
+         -0.29999999999999993, 0.0 },
+  { -0.87005875663658538, 5, 1, 
+         -0.19999999999999996, 0.0 },
+  { -1.6083350053680323, 5, 1, 
+         -0.099999999999999978, 0.0 },
+  { -1.8750000000000000, 5, 1, 
+         0.0000000000000000, 0.0 },
+  { -1.6083350053680314, 5, 1, 
+         0.10000000000000009, 0.0 },
+  { -0.87005875663658327, 5, 1, 
+         0.20000000000000018, 0.0 },
+  { 0.16079837663884422, 5, 1, 
+         0.30000000000000004, 0.0 },
+  { 1.2070504380513694, 5, 1, 
+         0.40000000000000013, 0.0 },
+  { 1.9282596881137892, 5, 1, 
+         0.50000000000000000, 0.0 },
+  { 1.9775999999999998, 5, 1, 
+         0.60000000000000009, 0.0 },
+  { 1.0951826834447216, 5, 1, 
+         0.70000000000000018, 0.0 },
+  { -0.72180000000000089, 5, 1, 
+         0.80000000000000004, 0.0 },
+  { -2.8099369608350999, 5, 1, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 5, 1, 
+         1.0000000000000000, 0.0 },
 };
+const double toler008 = 2.5000000000000020e-13;
 
-// Test function for l=5, m=2.
-template <typename Tp>
-void test009()
+// Test data for l=5, m=2.
+// max(|f - f_GSL|): 3.5527136788005009e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 5.4136589391245733e-16
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_assoc_legendre<double>
+data009[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data009)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data009[i].l), Tp(data009[i].m),
-                   Tp(data009[i].x));
-      const Tp f0 = data009[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=5, m=5.
-testcase_assoc_legendre<double> data010[] = {
-  { -0.0000000000000000, 5, 5,
-          -1.0000000000000000 },
-  { -14.870165800941818, 5, 5,
-          -0.90000000000000002 },
-  { -73.483199999999925, 5, 5,
-          -0.80000000000000004 },
-  { -175.53238298794764, 5, 5,
-          -0.69999999999999996 },
-  { -309.65760000000006, 5, 5,
-          -0.59999999999999998 },
-  { -460.34662869916559, 5, 5,
-          -0.50000000000000000 },
-  { -611.12496255819883, 5, 5,
-          -0.40000000000000002 },
-  { -746.50941479523760, 5, 5,
-          -0.30000000000000004 },
-  { -853.31600434671316, 5, 5,
-          -0.19999999999999996 },
-  { -921.55189181724734, 5, 5,
-          -0.099999999999999978 },
-  { -945.00000000000000, 5, 5,
-          0.0000000000000000 },
-  { -921.55189181724734, 5, 5,
-          0.10000000000000009 },
-  { -853.31600434671316, 5, 5,
-          0.19999999999999996 },
-  { -746.50941479523760, 5, 5,
-          0.30000000000000004 },
-  { -611.12496255819883, 5, 5,
-          0.39999999999999991 },
-  { -460.34662869916559, 5, 5,
-          0.50000000000000000 },
-  { -309.65759999999989, 5, 5,
-          0.60000000000000009 },
-  { -175.53238298794764, 5, 5,
-          0.69999999999999996 },
-  { -73.483199999999925, 5, 5,
-          0.80000000000000004 },
-  { -14.870165800941855, 5, 5,
-          0.89999999999999991 },
-  { -0.0000000000000000, 5, 5,
-          1.0000000000000000 },
+  { 0.0000000000000000, 5, 2, 
+         -1.0000000000000000, 0.0 },
+  { -12.837825000000000, 5, 2, 
+         -0.90000000000000002, 0.0 },
+  { -13.910400000000001, 5, 2, 
+         -0.80000000000000004, 0.0 },
+  { -8.8089749999999967, 5, 2, 
+         -0.69999999999999996, 0.0 },
+  { -1.6128000000000000, 5, 2, 
+         -0.59999999999999998, 0.0 },
+  { 4.9218750000000000, 5, 2, 
+         -0.50000000000000000, 0.0 },
+  { 9.1728000000000005, 5, 2, 
+         -0.39999999999999991, 0.0 },
+  { 10.462724999999997, 5, 2, 
+         -0.29999999999999993, 0.0 },
+  { 8.8703999999999983, 5, 2, 
+         -0.19999999999999996, 0.0 },
+  { 5.0415749999999990, 5, 2, 
+         -0.099999999999999978, 0.0 },
+  { -0.0000000000000000, 5, 2, 
+         0.0000000000000000, 0.0 },
+  { -5.0415750000000044, 5, 2, 
+         0.10000000000000009, 0.0 },
+  { -8.8704000000000054, 5, 2, 
+         0.20000000000000018, 0.0 },
+  { -10.462725000000001, 5, 2, 
+         0.30000000000000004, 0.0 },
+  { -9.1727999999999970, 5, 2, 
+         0.40000000000000013, 0.0 },
+  { -4.9218750000000000, 5, 2, 
+         0.50000000000000000, 0.0 },
+  { 1.6128000000000047, 5, 2, 
+         0.60000000000000009, 0.0 },
+  { 8.8089750000000109, 5, 2, 
+         0.70000000000000018, 0.0 },
+  { 13.910400000000001, 5, 2, 
+         0.80000000000000004, 0.0 },
+  { 12.837824999999990, 5, 2, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 5, 2, 
+         1.0000000000000000, 0.0 },
 };
+const double toler009 = 2.5000000000000020e-13;
 
-// Test function for l=5, m=5.
-template <typename Tp>
-void test010()
+// Test data for l=5, m=5.
+// max(|f - f_GSL|): 1.0231815394945443e-12 at index 12
+// max(|f - f_GSL| / |f_GSL|): 1.1990652164995755e-15
+// mean(f - f_GSL): 3.1128538899966297e-14
+// variance(f - f_GSL): 5.0871761537452526e-29
+// stddev(f - f_GSL): 7.1324442891236469e-15
+const testcase_assoc_legendre<double>
+data010[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data010)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data010[i].l), Tp(data010[i].m),
-                   Tp(data010[i].x));
-      const Tp f0 = data010[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=10, m=0.
-testcase_assoc_legendre<double> data011[] = {
-  { 1.0000000000000000, 10, 0,
-          -1.0000000000000000 },
-  { -0.26314561785585977, 10, 0,
-          -0.90000000000000002 },
-  { 0.30052979559999998, 10, 0,
-          -0.80000000000000004 },
-  { 0.085805795531640333, 10, 0,
-          -0.69999999999999996 },
-  { -0.24366274560000006, 10, 0,
-          -0.59999999999999998 },
-  { -0.18822860717773438, 10, 0,
-          -0.50000000000000000 },
-  { 0.096839064399999869, 10, 0,
-          -0.40000000000000002 },
-  { 0.25147634951601561, 10, 0,
-          -0.30000000000000004 },
-  { 0.12907202559999989, 10, 0,
-          -0.19999999999999996 },
-  { -0.12212499738710947, 10, 0,
-          -0.099999999999999978 },
-  { -0.24609375000000000, 10, 0,
-          0.0000000000000000 },
-  { -0.12212499738710922, 10, 0,
-          0.10000000000000009 },
-  { 0.12907202559999989, 10, 0,
-          0.19999999999999996 },
-  { 0.25147634951601561, 10, 0,
-          0.30000000000000004 },
-  { 0.096839064400000258, 10, 0,
-          0.39999999999999991 },
-  { -0.18822860717773438, 10, 0,
-          0.50000000000000000 },
-  { -0.24366274559999987, 10, 0,
-          0.60000000000000009 },
-  { 0.085805795531640333, 10, 0,
-          0.69999999999999996 },
-  { 0.30052979559999998, 10, 0,
-          0.80000000000000004 },
-  { -0.26314561785585888, 10, 0,
-          0.89999999999999991 },
-  { 1.0000000000000000, 10, 0,
-          1.0000000000000000 },
+  { -0.0000000000000000, 5, 5, 
+         -1.0000000000000000, 0.0 },
+  { -14.870165800941818, 5, 5, 
+         -0.90000000000000002, 0.0 },
+  { -73.483199999999925, 5, 5, 
+         -0.80000000000000004, 0.0 },
+  { -175.53238298794764, 5, 5, 
+         -0.69999999999999996, 0.0 },
+  { -309.65760000000006, 5, 5, 
+         -0.59999999999999998, 0.0 },
+  { -460.34662869916559, 5, 5, 
+         -0.50000000000000000, 0.0 },
+  { -611.12496255819883, 5, 5, 
+         -0.39999999999999991, 0.0 },
+  { -746.50941479523703, 5, 5, 
+         -0.29999999999999993, 0.0 },
+  { -853.31600434671316, 5, 5, 
+         -0.19999999999999996, 0.0 },
+  { -921.55189181724734, 5, 5, 
+         -0.099999999999999978, 0.0 },
+  { -945.00000000000000, 5, 5, 
+         0.0000000000000000, 0.0 },
+  { -921.55189181724734, 5, 5, 
+         0.10000000000000009, 0.0 },
+  { -853.31600434671316, 5, 5, 
+         0.20000000000000018, 0.0 },
+  { -746.50941479523760, 5, 5, 
+         0.30000000000000004, 0.0 },
+  { -611.12496255819838, 5, 5, 
+         0.40000000000000013, 0.0 },
+  { -460.34662869916559, 5, 5, 
+         0.50000000000000000, 0.0 },
+  { -309.65759999999989, 5, 5, 
+         0.60000000000000009, 0.0 },
+  { -175.53238298794724, 5, 5, 
+         0.70000000000000018, 0.0 },
+  { -73.483199999999925, 5, 5, 
+         0.80000000000000004, 0.0 },
+  { -14.870165800941789, 5, 5, 
+         0.90000000000000013, 0.0 },
+  { -0.0000000000000000, 5, 5, 
+         1.0000000000000000, 0.0 },
 };
+const double toler010 = 2.5000000000000020e-13;
 
-// Test function for l=10, m=0.
-template <typename Tp>
-void test011()
+// Test data for l=10, m=0.
+// max(|f - f_GSL|): 3.8857805861880479e-16 at index 19
+// max(|f - f_GSL| / |f_GSL|): 1.4766655123690915e-15
+// mean(f - f_GSL): -2.5112187461759493e-17
+// variance(f - f_GSL): 3.3107652853513909e-35
+// stddev(f - f_GSL): 5.7539249954716919e-18
+const testcase_assoc_legendre<double>
+data011[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data011)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data011[i].l), Tp(data011[i].m),
-                   Tp(data011[i].x));
-      const Tp f0 = data011[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=10, m=1.
-testcase_assoc_legendre<double> data012[] = {
-  { -0.0000000000000000, 10, 1,
-          -1.0000000000000000 },
-  { -3.0438748781479061, 10, 1,
-          -0.90000000000000002 },
-  { -0.87614260800000199, 10, 1,
-          -0.80000000000000004 },
-  { 2.9685359952934522, 10, 1,
-          -0.69999999999999996 },
-  { 1.2511825919999990, 10, 1,
-          -0.59999999999999998 },
-  { -2.0066877394361260, 10, 1,
-          -0.50000000000000000 },
-  { -2.4822196173476661, 10, 1,
-          -0.40000000000000002 },
-  { -0.12309508907433941, 10, 1,
-          -0.30000000000000004 },
-  { 2.2468221751958408, 10, 1,
-          -0.19999999999999996 },
-  { 2.2472659777983512, 10, 1,
-          -0.099999999999999978 },
-  { -0.0000000000000000, 10, 1,
-          0.0000000000000000 },
-  { -2.2472659777983530, 10, 1,
-          0.10000000000000009 },
-  { -2.2468221751958408, 10, 1,
-          0.19999999999999996 },
-  { 0.12309508907433941, 10, 1,
-          0.30000000000000004 },
-  { 2.4822196173476643, 10, 1,
-          0.39999999999999991 },
-  { 2.0066877394361260, 10, 1,
-          0.50000000000000000 },
-  { -1.2511825920000037, 10, 1,
-          0.60000000000000009 },
-  { -2.9685359952934522, 10, 1,
-          0.69999999999999996 },
-  { 0.87614260800000199, 10, 1,
-          0.80000000000000004 },
-  { 3.0438748781479110, 10, 1,
-          0.89999999999999991 },
-  { 0.0000000000000000, 10, 1,
-          1.0000000000000000 },
+  { 1.0000000000000000, 10, 0, 
+         -1.0000000000000000, 0.0 },
+  { -0.26314561785585960, 10, 0, 
+         -0.90000000000000002, 0.0 },
+  { 0.30052979560000004, 10, 0, 
+         -0.80000000000000004, 0.0 },
+  { 0.085805795531640333, 10, 0, 
+         -0.69999999999999996, 0.0 },
+  { -0.24366274560000001, 10, 0, 
+         -0.59999999999999998, 0.0 },
+  { -0.18822860717773438, 10, 0, 
+         -0.50000000000000000, 0.0 },
+  { 0.096839064400000258, 10, 0, 
+         -0.39999999999999991, 0.0 },
+  { 0.25147634951601561, 10, 0, 
+         -0.29999999999999993, 0.0 },
+  { 0.12907202559999983, 10, 0, 
+         -0.19999999999999996, 0.0 },
+  { -0.12212499738710943, 10, 0, 
+         -0.099999999999999978, 0.0 },
+  { -0.24609375000000000, 10, 0, 
+         0.0000000000000000, 0.0 },
+  { -0.12212499738710922, 10, 0, 
+         0.10000000000000009, 0.0 },
+  { 0.12907202560000042, 10, 0, 
+         0.20000000000000018, 0.0 },
+  { 0.25147634951601561, 10, 0, 
+         0.30000000000000004, 0.0 },
+  { 0.096839064399999633, 10, 0, 
+         0.40000000000000013, 0.0 },
+  { -0.18822860717773438, 10, 0, 
+         0.50000000000000000, 0.0 },
+  { -0.24366274559999984, 10, 0, 
+         0.60000000000000009, 0.0 },
+  { 0.085805795531641277, 10, 0, 
+         0.70000000000000018, 0.0 },
+  { 0.30052979560000004, 10, 0, 
+         0.80000000000000004, 0.0 },
+  { -0.26314561785586010, 10, 0, 
+         0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 10, 0, 
+         1.0000000000000000, 0.0 },
 };
+const double toler011 = 2.5000000000000020e-13;
 
-// Test function for l=10, m=1.
-template <typename Tp>
-void test012()
+// Test data for l=10, m=1.
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 14
+// max(|f - f_GSL| / |f_GSL|): 5.3672431731635395e-16
+// mean(f - f_GSL): 6.3441315692866085e-17
+// variance(f - f_GSL): 2.1130202818419960e-34
+// stddev(f - f_GSL): 1.4536231567507432e-17
+const testcase_assoc_legendre<double>
+data012[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data012)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data012[i].l), Tp(data012[i].m),
-                   Tp(data012[i].x));
-      const Tp f0 = data012[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=10, m=2.
-testcase_assoc_legendre<double> data013[] = {
-  { 0.0000000000000000, 10, 2,
-          -1.0000000000000000 },
-  { 16.376387762496122, 10, 2,
-          -0.90000000000000002 },
-  { -35.394657803999991, 10, 2,
-          -0.80000000000000004 },
-  { -3.6191429423788892, 10, 2,
-          -0.69999999999999996 },
-  { 28.679675904000010, 10, 2,
-          -0.59999999999999998 },
-  { 18.388023376464844, 10, 2,
-          -0.50000000000000000 },
-  { -12.818955995999996, 10, 2,
-          -0.40000000000000002 },
-  { -27.739821675972660, 10, 2,
-          -0.30000000000000004 },
-  { -13.280661503999987, 10, 2,
-          -0.19999999999999996 },
-  { 13.885467170308596, 10, 2,
-          -0.099999999999999978 },
-  { 27.070312500000000, 10, 2,
-          0.0000000000000000 },
-  { 13.885467170308573, 10, 2,
-          0.10000000000000009 },
-  { -13.280661503999987, 10, 2,
-          0.19999999999999996 },
-  { -27.739821675972660, 10, 2,
-          0.30000000000000004 },
-  { -12.818955996000019, 10, 2,
-          0.39999999999999991 },
-  { 18.388023376464844, 10, 2,
-          0.50000000000000000 },
-  { 28.679675903999982, 10, 2,
-          0.60000000000000009 },
-  { -3.6191429423788892, 10, 2,
-          0.69999999999999996 },
-  { -35.394657803999991, 10, 2,
-          0.80000000000000004 },
-  { 16.376387762495984, 10, 2,
-          0.89999999999999991 },
-  { 0.0000000000000000, 10, 2,
-          1.0000000000000000 },
+  { -0.0000000000000000, 10, 1, 
+         -1.0000000000000000, 0.0 },
+  { -3.0438748781479039, 10, 1, 
+         -0.90000000000000002, 0.0 },
+  { -0.87614260800000254, 10, 1, 
+         -0.80000000000000004, 0.0 },
+  { 2.9685359952934527, 10, 1, 
+         -0.69999999999999996, 0.0 },
+  { 1.2511825919999997, 10, 1, 
+         -0.59999999999999998, 0.0 },
+  { -2.0066877394361260, 10, 1, 
+         -0.50000000000000000, 0.0 },
+  { -2.4822196173476647, 10, 1, 
+         -0.39999999999999991, 0.0 },
+  { -0.12309508907433593, 10, 1, 
+         -0.29999999999999993, 0.0 },
+  { 2.2468221751958413, 10, 1, 
+         -0.19999999999999996, 0.0 },
+  { 2.2472659777983512, 10, 1, 
+         -0.099999999999999978, 0.0 },
+  { -0.0000000000000000, 10, 1, 
+         0.0000000000000000, 0.0 },
+  { -2.2472659777983535, 10, 1, 
+         0.10000000000000009, 0.0 },
+  { -2.2468221751958377, 10, 1, 
+         0.20000000000000018, 0.0 },
+  { 0.12309508907433910, 10, 1, 
+         0.30000000000000004, 0.0 },
+  { 2.4822196173476669, 10, 1, 
+         0.40000000000000013, 0.0 },
+  { 2.0066877394361260, 10, 1, 
+         0.50000000000000000, 0.0 },
+  { -1.2511825920000037, 10, 1, 
+         0.60000000000000009, 0.0 },
+  { -2.9685359952934505, 10, 1, 
+         0.70000000000000018, 0.0 },
+  { 0.87614260800000254, 10, 1, 
+         0.80000000000000004, 0.0 },
+  { 3.0438748781478981, 10, 1, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 10, 1, 
+         1.0000000000000000, 0.0 },
 };
+const double toler012 = 2.5000000000000020e-13;
 
-// Test function for l=10, m=2.
-template <typename Tp>
-void test013()
+// Test data for l=10, m=2.
+// max(|f - f_GSL|): 1.2434497875801753e-14 at index 12
+// max(|f - f_GSL| / |f_GSL|): 1.9632900580960751e-15
+// mean(f - f_GSL): -8.4588420923821446e-17
+// variance(f - f_GSL): 3.7564805010524372e-34
+// stddev(f - f_GSL): 1.9381642090009910e-17
+const testcase_assoc_legendre<double>
+data013[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data013)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data013[i].l), Tp(data013[i].m),
-                   Tp(data013[i].x));
-      const Tp f0 = data013[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for l=10, m=5.
-testcase_assoc_legendre<double> data014[] = {
-  { 0.0000000000000000, 10, 5,
-          -1.0000000000000000 },
-  { 21343.618518164669, 10, 5,
-          -0.90000000000000002 },
-  { 40457.016407807983, 10, 5,
-          -0.80000000000000004 },
-  { 20321.279317331318, 10, 5,
-          -0.69999999999999996 },
-  { -14410.820616192013, 10, 5,
-          -0.59999999999999998 },
-  { -30086.169706116176, 10, 5,
-          -0.50000000000000000 },
-  { -17177.549337582859, 10, 5,
-          -0.40000000000000002 },
-  { 9272.5119495412346, 10, 5,
-          -0.30000000000000004 },
-  { 26591.511184414714, 10, 5,
-          -0.19999999999999996 },
-  { 21961.951238504211, 10, 5,
-          -0.099999999999999978 },
-  { -0.0000000000000000, 10, 5,
-          0.0000000000000000 },
-  { -21961.951238504229, 10, 5,
-          0.10000000000000009 },
-  { -26591.511184414714, 10, 5,
-          0.19999999999999996 },
-  { -9272.5119495412346, 10, 5,
-          0.30000000000000004 },
-  { 17177.549337582830, 10, 5,
-          0.39999999999999991 },
-  { 30086.169706116176, 10, 5,
-          0.50000000000000000 },
-  { 14410.820616191975, 10, 5,
-          0.60000000000000009 },
-  { -20321.279317331318, 10, 5,
-          0.69999999999999996 },
-  { -40457.016407807983, 10, 5,
-          0.80000000000000004 },
-  { -21343.618518164698, 10, 5,
-          0.89999999999999991 },
-  { 0.0000000000000000, 10, 5,
-          1.0000000000000000 },
+  { 0.0000000000000000, 10, 2, 
+         -1.0000000000000000, 0.0 },
+  { 16.376387762496137, 10, 2, 
+         -0.90000000000000002, 0.0 },
+  { -35.394657804000005, 10, 2, 
+         -0.80000000000000004, 0.0 },
+  { -3.6191429423788648, 10, 2, 
+         -0.69999999999999996, 0.0 },
+  { 28.679675904000014, 10, 2, 
+         -0.59999999999999998, 0.0 },
+  { 18.388023376464844, 10, 2, 
+         -0.50000000000000000, 0.0 },
+  { -12.818955996000021, 10, 2, 
+         -0.39999999999999991, 0.0 },
+  { -27.739821675972646, 10, 2, 
+         -0.29999999999999993, 0.0 },
+  { -13.280661503999987, 10, 2, 
+         -0.19999999999999996, 0.0 },
+  { 13.885467170308601, 10, 2, 
+         -0.099999999999999978, 0.0 },
+  { 27.070312500000000, 10, 2, 
+         0.0000000000000000, 0.0 },
+  { 13.885467170308573, 10, 2, 
+         0.10000000000000009, 0.0 },
+  { -13.280661504000051, 10, 2, 
+         0.20000000000000018, 0.0 },
+  { -27.739821675972664, 10, 2, 
+         0.30000000000000004, 0.0 },
+  { -12.818955995999961, 10, 2, 
+         0.40000000000000013, 0.0 },
+  { 18.388023376464844, 10, 2, 
+         0.50000000000000000, 0.0 },
+  { 28.679675904000000, 10, 2, 
+         0.60000000000000009, 0.0 },
+  { -3.6191429423789856, 10, 2, 
+         0.70000000000000018, 0.0 },
+  { -35.394657804000005, 10, 2, 
+         0.80000000000000004, 0.0 },
+  { 16.376387762496201, 10, 2, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 10, 2, 
+         1.0000000000000000, 0.0 },
 };
+const double toler013 = 2.5000000000000020e-13;
 
-// Test function for l=10, m=5.
-template <typename Tp>
-void test014()
+// Test data for l=10, m=5.
+// max(|f - f_GSL|): 2.9103830456733704e-11 at index 12
+// max(|f - f_GSL| / |f_GSL|): 1.4825078449301893e-15
+// mean(f - f_GSL): 2.4253192047278085e-12
+// variance(f - f_GSL): 3.0881409535313035e-25
+// stddev(f - f_GSL): 5.5571044200476413e-13
+const testcase_assoc_legendre<double>
+data014[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data014)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data014[i].l), Tp(data014[i].m),
-                   Tp(data014[i].x));
-      const Tp f0 = data014[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=10, m=10.
-testcase_assoc_legendre<double> data015[] = {
-  { 0.0000000000000000, 10, 10,
-          -1.0000000000000000 },
-  { 162117.40078784220, 10, 10,
-          -0.90000000000000002 },
-  { 3958896.3481267113, 10, 10,
-          -0.80000000000000004 },
-  { 22589806.343887307, 10, 10,
-          -0.69999999999999996 },
-  { 70300999.121633321, 10, 10,
-          -0.59999999999999998 },
-  { 155370278.54003900, 10, 10,
-          -0.50000000000000000 },
-  { 273815518.20150518, 10, 10,
-          -0.40000000000000002 },
-  { 408571989.13158917, 10, 10,
-          -0.30000000000000004 },
-  { 533848212.07990247, 10, 10,
-          -0.19999999999999996 },
-  { 622640835.70523083, 10, 10,
-          -0.099999999999999978 },
-  { 654729075.00000000, 10, 10,
-          0.0000000000000000 },
-  { 622640835.70523083, 10, 10,
-          0.10000000000000009 },
-  { 533848212.07990247, 10, 10,
-          0.19999999999999996 },
-  { 408571989.13158917, 10, 10,
-          0.30000000000000004 },
-  { 273815518.20150518, 10, 10,
-          0.39999999999999991 },
-  { 155370278.54003900, 10, 10,
-          0.50000000000000000 },
-  { 70300999.121633217, 10, 10,
-          0.60000000000000009 },
-  { 22589806.343887307, 10, 10,
-          0.69999999999999996 },
-  { 3958896.3481267113, 10, 10,
-          0.80000000000000004 },
-  { 162117.40078784304, 10, 10,
-          0.89999999999999991 },
-  { 0.0000000000000000, 10, 10,
-          1.0000000000000000 },
+  { 0.0000000000000000, 10, 5, 
+         -1.0000000000000000, 0.0 },
+  { 21343.618518164680, 10, 5, 
+         -0.90000000000000002, 0.0 },
+  { 40457.016407807983, 10, 5, 
+         -0.80000000000000004, 0.0 },
+  { 20321.279317331315, 10, 5, 
+         -0.69999999999999996, 0.0 },
+  { -14410.820616192004, 10, 5, 
+         -0.59999999999999998, 0.0 },
+  { -30086.169706116176, 10, 5, 
+         -0.50000000000000000, 0.0 },
+  { -17177.549337582834, 10, 5, 
+         -0.39999999999999991, 0.0 },
+  { 9272.5119495412546, 10, 5, 
+         -0.29999999999999993, 0.0 },
+  { 26591.511184414714, 10, 5, 
+         -0.19999999999999996, 0.0 },
+  { 21961.951238504211, 10, 5, 
+         -0.099999999999999978, 0.0 },
+  { -0.0000000000000000, 10, 5, 
+         0.0000000000000000, 0.0 },
+  { -21961.951238504229, 10, 5, 
+         0.10000000000000009, 0.0 },
+  { -26591.511184414703, 10, 5, 
+         0.20000000000000018, 0.0 },
+  { -9272.5119495412364, 10, 5, 
+         0.30000000000000004, 0.0 },
+  { 17177.549337582877, 10, 5, 
+         0.40000000000000013, 0.0 },
+  { 30086.169706116176, 10, 5, 
+         0.50000000000000000, 0.0 },
+  { 14410.820616191972, 10, 5, 
+         0.60000000000000009, 0.0 },
+  { -20321.279317331391, 10, 5, 
+         0.70000000000000018, 0.0 },
+  { -40457.016407807983, 10, 5, 
+         0.80000000000000004, 0.0 },
+  { -21343.618518164636, 10, 5, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 10, 5, 
+         1.0000000000000000, 0.0 },
 };
+const double toler014 = 2.5000000000000020e-13;
 
-// Test function for l=10, m=10.
-template <typename Tp>
-void test015()
+// Test data for l=10, m=10.
+// max(|f - f_GSL|): 1.1920928955078125e-06 at index 12
+// max(|f - f_GSL| / |f_GSL|): 2.3944993944674592e-15
+// mean(f - f_GSL): -1.5610740298316593e-08
+// variance(f - f_GSL): 1.2793998664727994e-17
+// stddev(f - f_GSL): 3.5768699535666649e-09
+const testcase_assoc_legendre<double>
+data015[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data015)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data015[i].l), Tp(data015[i].m),
-                   Tp(data015[i].x));
-      const Tp f0 = data015[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=20, m=0.
-testcase_assoc_legendre<double> data016[] = {
-  { 1.0000000000000000, 20, 0,
-          -1.0000000000000000 },
-  { -0.14930823530984821, 20, 0,
-          -0.90000000000000002 },
-  { 0.22420460541741344, 20, 0,
-          -0.80000000000000004 },
-  { -0.20457394463834172, 20, 0,
-          -0.69999999999999996 },
-  { 0.15916752910098114, 20, 0,
-          -0.59999999999999998 },
-  { -0.048358381067373557, 20, 0,
-          -0.50000000000000000 },
-  { -0.10159261558628156, 20, 0,
-          -0.40000000000000002 },
-  { 0.18028715947998047, 20, 0,
-          -0.30000000000000004 },
-  { -0.098042194344594741, 20, 0,
-          -0.19999999999999996 },
-  { -0.082077130944527649, 20, 0,
-          -0.099999999999999978 },
-  { 0.17619705200195312, 20, 0,
-          0.0000000000000000 },
-  { -0.082077130944528037, 20, 0,
-          0.10000000000000009 },
-  { -0.098042194344594741, 20, 0,
-          0.19999999999999996 },
-  { 0.18028715947998047, 20, 0,
-          0.30000000000000004 },
-  { -0.10159261558628112, 20, 0,
-          0.39999999999999991 },
-  { -0.048358381067373557, 20, 0,
-          0.50000000000000000 },
-  { 0.15916752910098084, 20, 0,
-          0.60000000000000009 },
-  { -0.20457394463834172, 20, 0,
-          0.69999999999999996 },
-  { 0.22420460541741344, 20, 0,
-          0.80000000000000004 },
-  { -0.14930823530984949, 20, 0,
-          0.89999999999999991 },
-  { 1.0000000000000000, 20, 0,
-          1.0000000000000000 },
+  { 0.0000000000000000, 10, 10, 
+         -1.0000000000000000, 0.0 },
+  { 162117.40078784220, 10, 10, 
+         -0.90000000000000002, 0.0 },
+  { 3958896.3481267113, 10, 10, 
+         -0.80000000000000004, 0.0 },
+  { 22589806.343887307, 10, 10, 
+         -0.69999999999999996, 0.0 },
+  { 70300999.121633321, 10, 10, 
+         -0.59999999999999998, 0.0 },
+  { 155370278.54003900, 10, 10, 
+         -0.50000000000000000, 0.0 },
+  { 273815518.20150518, 10, 10, 
+         -0.39999999999999991, 0.0 },
+  { 408571989.13158852, 10, 10, 
+         -0.29999999999999993, 0.0 },
+  { 533848212.07990247, 10, 10, 
+         -0.19999999999999996, 0.0 },
+  { 622640835.70523083, 10, 10, 
+         -0.099999999999999978, 0.0 },
+  { 654729075.00000000, 10, 10, 
+         0.0000000000000000, 0.0 },
+  { 622640835.70523083, 10, 10, 
+         0.10000000000000009, 0.0 },
+  { 533848212.07990247, 10, 10, 
+         0.20000000000000018, 0.0 },
+  { 408571989.13158917, 10, 10, 
+         0.30000000000000004, 0.0 },
+  { 273815518.20150483, 10, 10, 
+         0.40000000000000013, 0.0 },
+  { 155370278.54003900, 10, 10, 
+         0.50000000000000000, 0.0 },
+  { 70300999.121633217, 10, 10, 
+         0.60000000000000009, 0.0 },
+  { 22589806.343887202, 10, 10, 
+         0.70000000000000018, 0.0 },
+  { 3958896.3481267113, 10, 10, 
+         0.80000000000000004, 0.0 },
+  { 162117.40078784159, 10, 10, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 10, 10, 
+         1.0000000000000000, 0.0 },
 };
+const double toler015 = 2.5000000000000020e-13;
 
-// Test function for l=20, m=0.
-template <typename Tp>
-void test016()
+// Test data for l=20, m=0.
+// max(|f - f_GSL|): 3.6082248300317588e-16 at index 19
+// max(|f - f_GSL| / |f_GSL|): 2.4166281401316513e-15
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 4.9424644697959907e-65
+// stddev(f - f_GSL): 7.0302663319365015e-33
+const testcase_assoc_legendre<double>
+data016[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data016)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data016[i].l), Tp(data016[i].m),
-                   Tp(data016[i].x));
-      const Tp f0 = data016[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=20, m=1.
-testcase_assoc_legendre<double> data017[] = {
-  { 0.0000000000000000, 20, 1,
-          -1.0000000000000000 },
-  { 4.3838334818220490, 20, 1,
-          -0.90000000000000002 },
-  { -0.63138296146340556, 20, 1,
-          -0.80000000000000004 },
-  { 0.72274871413391228, 20, 1,
-          -0.69999999999999996 },
-  { -2.3203528743824893, 20, 1,
-          -0.59999999999999998 },
-  { 3.7399919228791405, 20, 1,
-          -0.50000000000000000 },
-  { -3.1692202279270028, 20, 1,
-          -0.40000000000000002 },
-  { 0.15804468835344049, 20, 1,
-          -0.30000000000000004 },
-  { 3.0366182393271162, 20, 1,
-          -0.19999999999999996 },
-  { -3.2115523815580209, 20, 1,
-          -0.099999999999999978 },
-  { 0.0000000000000000, 20, 1,
-          0.0000000000000000 },
-  { 3.2115523815580160, 20, 1,
-          0.10000000000000009 },
-  { -3.0366182393271162, 20, 1,
-          0.19999999999999996 },
-  { -0.15804468835344049, 20, 1,
-          0.30000000000000004 },
-  { 3.1692202279270076, 20, 1,
-          0.39999999999999991 },
-  { -3.7399919228791405, 20, 1,
-          0.50000000000000000 },
-  { 2.3203528743825008, 20, 1,
-          0.60000000000000009 },
-  { -0.72274871413391228, 20, 1,
-          0.69999999999999996 },
-  { 0.63138296146340556, 20, 1,
-          0.80000000000000004 },
-  { -4.3838334818220304, 20, 1,
-          0.89999999999999991 },
-  { 0.0000000000000000, 20, 1,
-          1.0000000000000000 },
+  { 1.0000000000000000, 20, 0, 
+         -1.0000000000000000, 0.0 },
+  { -0.14930823530984835, 20, 0, 
+         -0.90000000000000002, 0.0 },
+  { 0.22420460541741347, 20, 0, 
+         -0.80000000000000004, 0.0 },
+  { -0.20457394463834172, 20, 0, 
+         -0.69999999999999996, 0.0 },
+  { 0.15916752910098109, 20, 0, 
+         -0.59999999999999998, 0.0 },
+  { -0.048358381067373557, 20, 0, 
+         -0.50000000000000000, 0.0 },
+  { -0.10159261558628112, 20, 0, 
+         -0.39999999999999991, 0.0 },
+  { 0.18028715947998047, 20, 0, 
+         -0.29999999999999993, 0.0 },
+  { -0.098042194344594796, 20, 0, 
+         -0.19999999999999996, 0.0 },
+  { -0.082077130944527663, 20, 0, 
+         -0.099999999999999978, 0.0 },
+  { 0.17619705200195312, 20, 0, 
+         0.0000000000000000, 0.0 },
+  { -0.082077130944528023, 20, 0, 
+         0.10000000000000009, 0.0 },
+  { -0.098042194344594089, 20, 0, 
+         0.20000000000000018, 0.0 },
+  { 0.18028715947998042, 20, 0, 
+         0.30000000000000004, 0.0 },
+  { -0.10159261558628192, 20, 0, 
+         0.40000000000000013, 0.0 },
+  { -0.048358381067373557, 20, 0, 
+         0.50000000000000000, 0.0 },
+  { 0.15916752910098075, 20, 0, 
+         0.60000000000000009, 0.0 },
+  { -0.20457394463834136, 20, 0, 
+         0.70000000000000018, 0.0 },
+  { 0.22420460541741347, 20, 0, 
+         0.80000000000000004, 0.0 },
+  { -0.14930823530984758, 20, 0, 
+         0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 20, 0, 
+         1.0000000000000000, 0.0 },
 };
+const double toler016 = 2.5000000000000020e-13;
 
-// Test function for l=20, m=1.
-template <typename Tp>
-void test017()
+// Test data for l=20, m=1.
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 1.0752784502271902e-15
+// mean(f - f_GSL): 1.4274296030894871e-16
+// variance(f - f_GSL): 1.0697165176825104e-33
+// stddev(f - f_GSL): 3.2706521026891724e-17
+const testcase_assoc_legendre<double>
+data017[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data017)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data017[i].l), Tp(data017[i].m),
-                   Tp(data017[i].x));
-      const Tp f0 = data017[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for l=20, m=2.
-testcase_assoc_legendre<double> data018[] = {
-  { 0.0000000000000000, 20, 2,
-          -1.0000000000000000 },
-  { 80.812425587310116, 20, 2,
-          -0.90000000000000002 },
-  { -95.849622172549317, 20, 2,
-          -0.80000000000000004 },
-  { 87.337927630325510, 20, 2,
-          -0.69999999999999996 },
-  { -70.330891533985834, 20, 2,
-          -0.59999999999999998 },
-  { 24.629090735179489, 20, 2,
-          -0.50000000000000000 },
-  { 39.902576338912418, 20, 2,
-          -0.40000000000000002 },
-  { -75.621201471396589, 20, 2,
-          -0.30000000000000004 },
-  { 42.417415829726487, 20, 2,
-          -0.19999999999999996 },
-  { 33.826848678871301, 20, 2,
-          -0.099999999999999978 },
-  { -74.002761840820312, 20, 2,
-          0.0000000000000000 },
-  { 33.826848678871457, 20, 2,
-          0.10000000000000009 },
-  { 42.417415829726487, 20, 2,
-          0.19999999999999996 },
-  { -75.621201471396589, 20, 2,
-          0.30000000000000004 },
-  { 39.902576338912240, 20, 2,
-          0.39999999999999991 },
-  { 24.629090735179489, 20, 2,
-          0.50000000000000000 },
-  { -70.330891533985664, 20, 2,
-          0.60000000000000009 },
-  { 87.337927630325510, 20, 2,
-          0.69999999999999996 },
-  { -95.849622172549317, 20, 2,
-          0.80000000000000004 },
-  { 80.812425587310585, 20, 2,
-          0.89999999999999991 },
-  { 0.0000000000000000, 20, 2,
-          1.0000000000000000 },
+  { 0.0000000000000000, 20, 1, 
+         -1.0000000000000000, 0.0 },
+  { 4.3838334818220499, 20, 1, 
+         -0.90000000000000002, 0.0 },
+  { -0.63138296146340844, 20, 1, 
+         -0.80000000000000004, 0.0 },
+  { 0.72274871413391395, 20, 1, 
+         -0.69999999999999996, 0.0 },
+  { -2.3203528743824910, 20, 1, 
+         -0.59999999999999998, 0.0 },
+  { 3.7399919228791405, 20, 1, 
+         -0.50000000000000000, 0.0 },
+  { -3.1692202279270085, 20, 1, 
+         -0.39999999999999991, 0.0 },
+  { 0.15804468835345031, 20, 1, 
+         -0.29999999999999993, 0.0 },
+  { 3.0366182393271171, 20, 1, 
+         -0.19999999999999996, 0.0 },
+  { -3.2115523815580209, 20, 1, 
+         -0.099999999999999978, 0.0 },
+  { 0.0000000000000000, 20, 1, 
+         0.0000000000000000, 0.0 },
+  { 3.2115523815580169, 20, 1, 
+         0.10000000000000009, 0.0 },
+  { -3.0366182393271259, 20, 1, 
+         0.20000000000000018, 0.0 },
+  { -0.15804468835344135, 20, 1, 
+         0.30000000000000004, 0.0 },
+  { 3.1692202279269970, 20, 1, 
+         0.40000000000000013, 0.0 },
+  { -3.7399919228791405, 20, 1, 
+         0.50000000000000000, 0.0 },
+  { 2.3203528743824995, 20, 1, 
+         0.60000000000000009, 0.0 },
+  { -0.72274871413393793, 20, 1, 
+         0.70000000000000018, 0.0 },
+  { 0.63138296146340844, 20, 1, 
+         0.80000000000000004, 0.0 },
+  { -4.3838334818220686, 20, 1, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 20, 1, 
+         1.0000000000000000, 0.0 },
 };
+const double toler017 = 2.5000000000000020e-13;
 
-// Test function for l=20, m=2.
-template <typename Tp>
-void test018()
+// Test data for l=20, m=2.
+// max(|f - f_GSL|): 2.4868995751603507e-14 at index 5
+// max(|f - f_GSL| / |f_GSL|): 1.0097407175524082e-15
+// mean(f - f_GSL): -2.0301221021717147e-15
+// variance(f - f_GSL): 2.1637327686062039e-31
+// stddev(f - f_GSL): 4.6515941016023782e-16
+const testcase_assoc_legendre<double>
+data018[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data018)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data018[i].l), Tp(data018[i].m),
-                   Tp(data018[i].x));
-      const Tp f0 = data018[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=20, m=5.
-testcase_assoc_legendre<double> data019[] = {
-  { -0.0000000000000000, 20, 5,
-          -1.0000000000000000 },
-  { -315702.32715134107, 20, 5,
-          -0.90000000000000002 },
-  { 503060.91484852595, 20, 5,
-          -0.80000000000000004 },
-  { -298127.28360361949, 20, 5,
-          -0.69999999999999996 },
-  { -114444.61447464002, 20, 5,
-          -0.59999999999999998 },
-  { 543428.40914592857, 20, 5,
-          -0.50000000000000000 },
-  { -613842.07728185481, 20, 5,
-          -0.40000000000000002 },
-  { 143765.42411270953, 20, 5,
-          -0.30000000000000004 },
-  { 472600.45321372297, 20, 5,
-          -0.19999999999999996 },
-  { -563861.76771496492, 20, 5,
-          -0.099999999999999978 },
-  { 0.0000000000000000, 20, 5,
-          0.0000000000000000 },
-  { 563861.76771496458, 20, 5,
-          0.10000000000000009 },
-  { -472600.45321372297, 20, 5,
-          0.19999999999999996 },
-  { -143765.42411270953, 20, 5,
-          0.30000000000000004 },
-  { 613842.07728185505, 20, 5,
-          0.39999999999999991 },
-  { -543428.40914592857, 20, 5,
-          0.50000000000000000 },
-  { 114444.61447464184, 20, 5,
-          0.60000000000000009 },
-  { 298127.28360361949, 20, 5,
-          0.69999999999999996 },
-  { -503060.91484852595, 20, 5,
-          0.80000000000000004 },
-  { 315702.32715134590, 20, 5,
-          0.89999999999999991 },
-  { 0.0000000000000000, 20, 5,
-          1.0000000000000000 },
+  { 0.0000000000000000, 20, 2, 
+         -1.0000000000000000, 0.0 },
+  { 80.812425587310102, 20, 2, 
+         -0.90000000000000002, 0.0 },
+  { -95.849622172549374, 20, 2, 
+         -0.80000000000000004, 0.0 },
+  { 87.337927630325510, 20, 2, 
+         -0.69999999999999996, 0.0 },
+  { -70.330891533985834, 20, 2, 
+         -0.59999999999999998, 0.0 },
+  { 24.629090735179489, 20, 2, 
+         -0.50000000000000000, 0.0 },
+  { 39.902576338912247, 20, 2, 
+         -0.39999999999999991, 0.0 },
+  { -75.621201471396546, 20, 2, 
+         -0.29999999999999993, 0.0 },
+  { 42.417415829726494, 20, 2, 
+         -0.19999999999999996, 0.0 },
+  { 33.826848678871293, 20, 2, 
+         -0.099999999999999978, 0.0 },
+  { -74.002761840820312, 20, 2, 
+         0.0000000000000000, 0.0 },
+  { 33.826848678871464, 20, 2, 
+         0.10000000000000009, 0.0 },
+  { 42.417415829726188, 20, 2, 
+         0.20000000000000018, 0.0 },
+  { -75.621201471396603, 20, 2, 
+         0.30000000000000004, 0.0 },
+  { 39.902576338912553, 20, 2, 
+         0.40000000000000013, 0.0 },
+  { 24.629090735179489, 20, 2, 
+         0.50000000000000000, 0.0 },
+  { -70.330891533985721, 20, 2, 
+         0.60000000000000009, 0.0 },
+  { 87.337927630325453, 20, 2, 
+         0.70000000000000018, 0.0 },
+  { -95.849622172549374, 20, 2, 
+         0.80000000000000004, 0.0 },
+  { 80.812425587309747, 20, 2, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 20, 2, 
+         1.0000000000000000, 0.0 },
 };
+const double toler018 = 2.5000000000000020e-13;
 
-// Test function for l=20, m=5.
-template <typename Tp>
-void test019()
+// Test data for l=20, m=5.
+// max(|f - f_GSL|): 1.2805685400962830e-09 at index 14
+// max(|f - f_GSL| / |f_GSL|): 2.0861530799041223e-15
+// mean(f - f_GSL): 1.1641532182693481e-10
+// variance(f - f_GSL): 7.1150767569361226e-22
+// stddev(f - f_GSL): 2.6674101216228678e-11
+const testcase_assoc_legendre<double>
+data019[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data019)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data019[i].l), Tp(data019[i].m),
-                   Tp(data019[i].x));
-      const Tp f0 = data019[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=20, m=10.
-testcase_assoc_legendre<double> data020[] = {
-  { -0.0000000000000000, 20, 10,
-          -1.0000000000000000 },
-  { 990017476694.99084, 20, 10,
-          -0.90000000000000002 },
-  { 2392757933281.0503, 20, 10,
-          -0.80000000000000004 },
-  { -1548364524949.5808, 20, 10,
-          -0.69999999999999996 },
-  { -424471915195.05609, 20, 10,
-          -0.59999999999999998 },
-  { 1744502295946.2065, 20, 10,
-          -0.50000000000000000 },
-  { -899973487310.55212, 20, 10,
-          -0.40000000000000002 },
-  { -1092420454297.7164, 20, 10,
-          -0.30000000000000004 },
-  { 1466609267659.8816, 20, 10,
-          -0.19999999999999996 },
-  { 356041756390.71661, 20, 10,
-          -0.099999999999999978 },
-  { -1612052956674.3164, 20, 10,
-          0.0000000000000000 },
-  { 356041756390.71985, 20, 10,
-          0.10000000000000009 },
-  { 1466609267659.8816, 20, 10,
-          0.19999999999999996 },
-  { -1092420454297.7164, 20, 10,
-          0.30000000000000004 },
-  { -899973487310.55469, 20, 10,
-          0.39999999999999991 },
-  { 1744502295946.2065, 20, 10,
-          0.50000000000000000 },
-  { -424471915195.05914, 20, 10,
-          0.60000000000000009 },
-  { -1548364524949.5808, 20, 10,
-          0.69999999999999996 },
-  { 2392757933281.0503, 20, 10,
-          0.80000000000000004 },
-  { 990017476694.99353, 20, 10,
-          0.89999999999999991 },
-  { 0.0000000000000000, 20, 10,
-          1.0000000000000000 },
+  { -0.0000000000000000, 20, 5, 
+         -1.0000000000000000, 0.0 },
+  { -315702.32715134218, 20, 5, 
+         -0.90000000000000002, 0.0 },
+  { 503060.91484852589, 20, 5, 
+         -0.80000000000000004, 0.0 },
+  { -298127.28360361955, 20, 5, 
+         -0.69999999999999996, 0.0 },
+  { -114444.61447464029, 20, 5, 
+         -0.59999999999999998, 0.0 },
+  { 543428.40914592845, 20, 5, 
+         -0.50000000000000000, 0.0 },
+  { -613842.07728185481, 20, 5, 
+         -0.39999999999999991, 0.0 },
+  { 143765.42411271061, 20, 5, 
+         -0.29999999999999993, 0.0 },
+  { 472600.45321372285, 20, 5, 
+         -0.19999999999999996, 0.0 },
+  { -563861.76771496492, 20, 5, 
+         -0.099999999999999978, 0.0 },
+  { 0.0000000000000000, 20, 5, 
+         0.0000000000000000, 0.0 },
+  { 563861.76771496458, 20, 5, 
+         0.10000000000000009, 0.0 },
+  { -472600.45321372483, 20, 5, 
+         0.20000000000000018, 0.0 },
+  { -143765.42411270936, 20, 5, 
+         0.30000000000000004, 0.0 },
+  { 613842.07728185353, 20, 5, 
+         0.40000000000000013, 0.0 },
+  { -543428.40914592845, 20, 5, 
+         0.50000000000000000, 0.0 },
+  { 114444.61447464178, 20, 5, 
+         0.60000000000000009, 0.0 },
+  { 298127.28360361519, 20, 5, 
+         0.70000000000000018, 0.0 },
+  { -503060.91484852589, 20, 5, 
+         0.80000000000000004, 0.0 },
+  { 315702.32715133618, 20, 5, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 20, 5, 
+         1.0000000000000000, 0.0 },
 };
+const double toler019 = 2.5000000000000020e-13;
 
-// Test function for l=20, m=10.
-template <typename Tp>
-void test020()
+// Test data for l=20, m=10.
+// max(|f - f_GSL|): 0.0039062500000000000 at index 12
+// max(|f - f_GSL| / |f_GSL|): 2.6634565089260680e-15
+// mean(f - f_GSL): -0.00043596540178571431
+// variance(f - f_GSL): 9.9784562846311215e-09
+// stddev(f - f_GSL): 9.9892223344117843e-05
+const testcase_assoc_legendre<double>
+data020[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data020)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data020[i].l), Tp(data020[i].m),
-                   Tp(data020[i].x));
-      const Tp f0 = data020[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=20, m=20.
-testcase_assoc_legendre<double> data021[] = {
-  { 0.0000000000000000, 20, 20,
-          -1.0000000000000000 },
-  { 19609049712023808., 20, 20,
-          -0.90000000000000002 },
-  { 1.1693527616833221e+19, 20, 20,
-          -0.80000000000000004 },
-  { 3.8073455880620691e+20, 20, 20,
-          -0.69999999999999996 },
-  { 3.6874002249007927e+21, 20, 20,
-          -0.59999999999999998 },
-  { 1.8010806978179592e+22, 20, 20,
-          -0.50000000000000000 },
-  { 5.5938832584012466e+22, 20, 20,
-          -0.40000000000000002 },
-  { 1.2454734132297811e+23, 20, 20,
-          -0.30000000000000004 },
-  { 2.1263407800797497e+23, 20, 20,
-          -0.19999999999999996 },
-  { 2.8924941146976873e+23, 20, 20,
-          -0.099999999999999978 },
-  { 3.1983098677287775e+23, 20, 20,
-          0.0000000000000000 },
-  { 2.8924941146976873e+23, 20, 20,
-          0.10000000000000009 },
-  { 2.1263407800797497e+23, 20, 20,
-          0.19999999999999996 },
-  { 1.2454734132297811e+23, 20, 20,
-          0.30000000000000004 },
-  { 5.5938832584012466e+22, 20, 20,
-          0.39999999999999991 },
-  { 1.8010806978179592e+22, 20, 20,
-          0.50000000000000000 },
-  { 3.6874002249007807e+21, 20, 20,
-          0.60000000000000009 },
-  { 3.8073455880620691e+20, 20, 20,
-          0.69999999999999996 },
-  { 1.1693527616833221e+19, 20, 20,
-          0.80000000000000004 },
-  { 19609049712024020., 20, 20,
-          0.89999999999999991 },
-  { 0.0000000000000000, 20, 20,
-          1.0000000000000000 },
+  { -0.0000000000000000, 20, 10, 
+         -1.0000000000000000, 0.0 },
+  { 990017476694.99084, 20, 10, 
+         -0.90000000000000002, 0.0 },
+  { 2392757933281.0498, 20, 10, 
+         -0.80000000000000004, 0.0 },
+  { -1548364524949.5808, 20, 10, 
+         -0.69999999999999996, 0.0 },
+  { -424471915195.05627, 20, 10, 
+         -0.59999999999999998, 0.0 },
+  { 1744502295946.2073, 20, 10, 
+         -0.50000000000000000, 0.0 },
+  { -899973487310.55530, 20, 10, 
+         -0.39999999999999991, 0.0 },
+  { -1092420454297.7119, 20, 10, 
+         -0.29999999999999993, 0.0 },
+  { 1466609267659.8816, 20, 10, 
+         -0.19999999999999996, 0.0 },
+  { 356041756390.71674, 20, 10, 
+         -0.099999999999999978, 0.0 },
+  { -1612052956674.3164, 20, 10, 
+         0.0000000000000000, 0.0 },
+  { 356041756390.71985, 20, 10, 
+         0.10000000000000009, 0.0 },
+  { 1466609267659.8796, 20, 10, 
+         0.20000000000000018, 0.0 },
+  { -1092420454297.7161, 20, 10, 
+         0.30000000000000004, 0.0 },
+  { -899973487310.54810, 20, 10, 
+         0.40000000000000013, 0.0 },
+  { 1744502295946.2073, 20, 10, 
+         0.50000000000000000, 0.0 },
+  { -424471915195.05896, 20, 10, 
+         0.60000000000000009, 0.0 },
+  { -1548364524949.5730, 20, 10, 
+         0.70000000000000018, 0.0 },
+  { 2392757933281.0498, 20, 10, 
+         0.80000000000000004, 0.0 },
+  { 990017476694.98828, 20, 10, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 20, 10, 
+         1.0000000000000000, 0.0 },
 };
+const double toler020 = 2.5000000000000020e-13;
 
-// Test function for l=20, m=20.
-template <typename Tp>
-void test021()
+// Test data for l=20, m=20.
+// max(|f - f_GSL|): 838860800.00000000 at index 12
+// max(|f - f_GSL| / |f_GSL|): 4.3488507135833189e-15
+// mean(f - f_GSL): -2855497.1428571427
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_assoc_legendre<double>
+data021[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data021)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data021[i].l), Tp(data021[i].m),
-                   Tp(data021[i].x));
-      const Tp f0 = data021[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=50, m=0.
-testcase_assoc_legendre<double> data022[] = {
-  { 1.0000000000000000, 50, 0,
-          -1.0000000000000000 },
-  { -0.17003765994383685, 50, 0,
-          -0.90000000000000002 },
-  { 0.13879737345093118, 50, 0,
-          -0.80000000000000004 },
-  { -0.014572731645892805, 50, 0,
-          -0.69999999999999996 },
-  { -0.058860798844002173, 50, 0,
-          -0.59999999999999998 },
-  { -0.031059099239609828, 50, 0,
-          -0.50000000000000000 },
-  { 0.041569033381825368, 50, 0,
-          -0.40000000000000002 },
-  { 0.10911051574714808, 50, 0,
-          -0.30000000000000004 },
-  { 0.083432272204197466, 50, 0,
-          -0.19999999999999996 },
-  { -0.038205812661313579, 50, 0,
-          -0.099999999999999978 },
-  { -0.11227517265921705, 50, 0,
-          0.0000000000000000 },
-  { -0.038205812661314169, 50, 0,
-          0.10000000000000009 },
-  { 0.083432272204197466, 50, 0,
-          0.19999999999999996 },
-  { 0.10911051574714808, 50, 0,
-          0.30000000000000004 },
-  { 0.041569033381824647, 50, 0,
-          0.39999999999999991 },
-  { -0.031059099239609828, 50, 0,
-          0.50000000000000000 },
-  { -0.058860798844001430, 50, 0,
-          0.60000000000000009 },
-  { -0.014572731645892805, 50, 0,
-          0.69999999999999996 },
-  { 0.13879737345093118, 50, 0,
-          0.80000000000000004 },
-  { -0.17003765994383663, 50, 0,
-          0.89999999999999991 },
-  { 1.0000000000000000, 50, 0,
-          1.0000000000000000 },
+  { 0.0000000000000000, 20, 20, 
+         -1.0000000000000000, 0.0 },
+  { 19609049712023808., 20, 20, 
+         -0.90000000000000002, 0.0 },
+  { 1.1693527616833221e+19, 20, 20, 
+         -0.80000000000000004, 0.0 },
+  { 3.8073455880620691e+20, 20, 20, 
+         -0.69999999999999996, 0.0 },
+  { 3.6874002249007927e+21, 20, 20, 
+         -0.59999999999999998, 0.0 },
+  { 1.8010806978179592e+22, 20, 20, 
+         -0.50000000000000000, 0.0 },
+  { 5.5938832584012466e+22, 20, 20, 
+         -0.39999999999999991, 0.0 },
+  { 1.2454734132297759e+23, 20, 20, 
+         -0.29999999999999993, 0.0 },
+  { 2.1263407800797497e+23, 20, 20, 
+         -0.19999999999999996, 0.0 },
+  { 2.8924941146976873e+23, 20, 20, 
+         -0.099999999999999978, 0.0 },
+  { 3.1983098677287775e+23, 20, 20, 
+         0.0000000000000000, 0.0 },
+  { 2.8924941146976873e+23, 20, 20, 
+         0.10000000000000009, 0.0 },
+  { 2.1263407800797497e+23, 20, 20, 
+         0.20000000000000018, 0.0 },
+  { 1.2454734132297811e+23, 20, 20, 
+         0.30000000000000004, 0.0 },
+  { 5.5938832584012366e+22, 20, 20, 
+         0.40000000000000013, 0.0 },
+  { 1.8010806978179592e+22, 20, 20, 
+         0.50000000000000000, 0.0 },
+  { 3.6874002249007807e+21, 20, 20, 
+         0.60000000000000009, 0.0 },
+  { 3.8073455880620343e+20, 20, 20, 
+         0.70000000000000018, 0.0 },
+  { 1.1693527616833221e+19, 20, 20, 
+         0.80000000000000004, 0.0 },
+  { 19609049712023672., 20, 20, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 20, 20, 
+         1.0000000000000000, 0.0 },
 };
+const double toler021 = 2.5000000000000020e-13;
 
-// Test function for l=50, m=0.
-template <typename Tp>
-void test022()
+// Test data for l=50, m=0.
+// max(|f - f_GSL|): 1.6653345369377348e-16 at index 2
+// max(|f - f_GSL| / |f_GSL|): 1.6665460706897444e-15
+// mean(f - f_GSL): -8.0953762212251003e-18
+// variance(f - f_GSL): 3.4405935985667807e-36
+// stddev(f - f_GSL): 1.8548837156454796e-18
+const testcase_assoc_legendre<double>
+data022[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data022)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data022[i].l), Tp(data022[i].m),
-                   Tp(data022[i].x));
-      const Tp f0 = data022[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=50, m=1.
-testcase_assoc_legendre<double> data023[] = {
-  { 0.0000000000000000, 50, 1,
-          -1.0000000000000000 },
-  { -0.13424149984450387, 50, 1,
-          -0.90000000000000002 },
-  { 2.2011219672413085, 50, 1,
-          -0.80000000000000004 },
-  { 6.6622414993232013, 50, 1,
-          -0.69999999999999996 },
-  { 5.5772846936919231, 50, 1,
-          -0.59999999999999998 },
-  { 5.8787148815607617, 50, 1,
-          -0.50000000000000000 },
-  { 5.5473459458634000, 50, 1,
-          -0.40000000000000002 },
-  { 1.8444956647619912, 50, 1,
-          -0.30000000000000004 },
-  { -3.8722014306642150, 50, 1,
-          -0.19999999999999996 },
-  { -5.3488751322285593, 50, 1,
-          -0.099999999999999978 },
-  { -0.0000000000000000, 50, 1,
-          0.0000000000000000 },
-  { 5.3488751322285459, 50, 1,
-          0.10000000000000009 },
-  { 3.8722014306642150, 50, 1,
-          0.19999999999999996 },
-  { -1.8444956647619912, 50, 1,
-          0.30000000000000004 },
-  { -5.5473459458634098, 50, 1,
-          0.39999999999999991 },
-  { -5.8787148815607617, 50, 1,
-          0.50000000000000000 },
-  { -5.5772846936919489, 50, 1,
-          0.60000000000000009 },
-  { -6.6622414993232013, 50, 1,
-          0.69999999999999996 },
-  { -2.2011219672413085, 50, 1,
-          0.80000000000000004 },
-  { 0.13424149984460862, 50, 1,
-          0.89999999999999991 },
-  { 0.0000000000000000, 50, 1,
-          1.0000000000000000 },
+  { 1.0000000000000000, 50, 0, 
+         -1.0000000000000000, 0.0 },
+  { -0.17003765994383671, 50, 0, 
+         -0.90000000000000002, 0.0 },
+  { 0.13879737345093113, 50, 0, 
+         -0.80000000000000004, 0.0 },
+  { -0.014572731645892852, 50, 0, 
+         -0.69999999999999996, 0.0 },
+  { -0.058860798844002096, 50, 0, 
+         -0.59999999999999998, 0.0 },
+  { -0.031059099239609811, 50, 0, 
+         -0.50000000000000000, 0.0 },
+  { 0.041569033381824674, 50, 0, 
+         -0.39999999999999991, 0.0 },
+  { 0.10911051574714790, 50, 0, 
+         -0.29999999999999993, 0.0 },
+  { 0.083432272204197494, 50, 0, 
+         -0.19999999999999996, 0.0 },
+  { -0.038205812661313600, 50, 0, 
+         -0.099999999999999978, 0.0 },
+  { -0.11227517265921705, 50, 0, 
+         0.0000000000000000, 0.0 },
+  { -0.038205812661314155, 50, 0, 
+         0.10000000000000009, 0.0 },
+  { 0.083432272204196564, 50, 0, 
+         0.20000000000000018, 0.0 },
+  { 0.10911051574714797, 50, 0, 
+         0.30000000000000004, 0.0 },
+  { 0.041569033381826007, 50, 0, 
+         0.40000000000000013, 0.0 },
+  { -0.031059099239609811, 50, 0, 
+         0.50000000000000000, 0.0 },
+  { -0.058860798844001430, 50, 0, 
+         0.60000000000000009, 0.0 },
+  { -0.014572731645890737, 50, 0, 
+         0.70000000000000018, 0.0 },
+  { 0.13879737345093113, 50, 0, 
+         0.80000000000000004, 0.0 },
+  { -0.17003765994383679, 50, 0, 
+         0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 50, 0, 
+         1.0000000000000000, 0.0 },
 };
+const double toler022 = 2.5000000000000020e-13;
 
-// Test function for l=50, m=1.
-template <typename Tp>
-void test023()
+// Test data for l=50, m=1.
+// max(|f - f_GSL|): 4.4408920985006262e-15 at index 3
+// max(|f - f_GSL| / |f_GSL|): 6.6657627150738456e-16
+// mean(f - f_GSL): 6.3441315692866085e-17
+// variance(f - f_GSL): 2.1130202818419960e-34
+// stddev(f - f_GSL): 1.4536231567507432e-17
+const testcase_assoc_legendre<double>
+data023[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data023)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data023[i].l), Tp(data023[i].m),
-                   Tp(data023[i].x));
-      const Tp f0 = data023[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
-}
-
-// Test data for l=50, m=2.
-testcase_assoc_legendre<double> data024[] = {
-  { 0.0000000000000000, 50, 2,
-          -1.0000000000000000 },
-  { 433.04168483713448, 50, 2,
-          -0.90000000000000002 },
-  { -348.06364372056390, 50, 2,
-          -0.80000000000000004 },
-  { 50.221071418108465, 50, 2,
-          -0.69999999999999996 },
-  { 158.46096409274341, 50, 2,
-          -0.59999999999999998 },
-  { 85.988858299721414, 50, 2,
-          -0.50000000000000000 },
-  { -101.15891460879277, 50, 2,
-          -0.40000000000000002 },
-  { -277.07168105316612, 50, 2,
-          -0.30000000000000004 },
-  { -214.33311373510401, 50, 2,
-          -0.19999999999999996 },
-  { 96.349657930951722, 50, 2,
-          -0.099999999999999978 },
-  { 286.30169028100346, 50, 2,
-          0.0000000000000000 },
-  { 96.349657930953285, 50, 2,
-          0.10000000000000009 },
-  { -214.33311373510401, 50, 2,
-          0.19999999999999996 },
-  { -277.07168105316612, 50, 2,
-          0.30000000000000004 },
-  { -101.15891460879106, 50, 2,
-          0.39999999999999991 },
-  { 85.988858299721414, 50, 2,
-          0.50000000000000000 },
-  { 158.46096409274131, 50, 2,
-          0.60000000000000009 },
-  { 50.221071418108465, 50, 2,
-          0.69999999999999996 },
-  { -348.06364372056390, 50, 2,
-          0.80000000000000004 },
-  { 433.04168483713414, 50, 2,
-          0.89999999999999991 },
-  { 0.0000000000000000, 50, 2,
-          1.0000000000000000 },
+  { 0.0000000000000000, 50, 1, 
+         -1.0000000000000000, 0.0 },
+  { -0.13424149984449490, 50, 1, 
+         -0.90000000000000002, 0.0 },
+  { 2.2011219672413018, 50, 1, 
+         -0.80000000000000004, 0.0 },
+  { 6.6622414993232004, 50, 1, 
+         -0.69999999999999996, 0.0 },
+  { 5.5772846936919249, 50, 1, 
+         -0.59999999999999998, 0.0 },
+  { 5.8787148815607608, 50, 1, 
+         -0.50000000000000000, 0.0 },
+  { 5.5473459458634080, 50, 1, 
+         -0.39999999999999991, 0.0 },
+  { 1.8444956647620248, 50, 1, 
+         -0.29999999999999993, 0.0 },
+  { -3.8722014306642127, 50, 1, 
+         -0.19999999999999996, 0.0 },
+  { -5.3488751322285628, 50, 1, 
+         -0.099999999999999978, 0.0 },
+  { -0.0000000000000000, 50, 1, 
+         0.0000000000000000, 0.0 },
+  { 5.3488751322285522, 50, 1, 
+         0.10000000000000009, 0.0 },
+  { 3.8722014306642620, 50, 1, 
+         0.20000000000000018, 0.0 },
+  { -1.8444956647619930, 50, 1, 
+         0.30000000000000004, 0.0 },
+  { -5.5473459458633814, 50, 1, 
+         0.40000000000000013, 0.0 },
+  { -5.8787148815607608, 50, 1, 
+         0.50000000000000000, 0.0 },
+  { -5.5772846936919453, 50, 1, 
+         0.60000000000000009, 0.0 },
+  { -6.6622414993232182, 50, 1, 
+         0.70000000000000018, 0.0 },
+  { -2.2011219672413018, 50, 1, 
+         0.80000000000000004, 0.0 },
+  { 0.13424149984438935, 50, 1, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 50, 1, 
+         1.0000000000000000, 0.0 },
 };
+const double toler023 = 2.5000000000000020e-13;
 
-// Test function for l=50, m=2.
-template <typename Tp>
-void test024()
+// Test data for l=50, m=2.
+// max(|f - f_GSL|): 3.0553337637684308e-13 at index 3
+// max(|f - f_GSL| / |f_GSL|): 6.0837685805857877e-15
+// mean(f - f_GSL): -3.3835368369528578e-16
+// variance(f - f_GSL): 6.0103688016838995e-33
+// stddev(f - f_GSL): 7.7526568360039641e-17
+const testcase_assoc_legendre<double>
+data024[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data024)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data024[i].l), Tp(data024[i].m),
-                   Tp(data024[i].x));
-      const Tp f0 = data024[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=50, m=5.
-testcase_assoc_legendre<double> data025[] = {
-  { -0.0000000000000000, 50, 5,
-          -1.0000000000000000 },
-  { -27340473.952132788, 50, 5,
-          -0.90000000000000002 },
-  { 27753716.768532373, 50, 5,
-          -0.80000000000000004 },
-  { 40808153.913493626, 50, 5,
-          -0.69999999999999996 },
-  { 32071189.035790101, 50, 5,
-          -0.59999999999999998 },
-  { 36265736.218529105, 50, 5,
-          -0.50000000000000000 },
-  { 37089596.700204894, 50, 5,
-          -0.40000000000000002 },
-  { 14562029.629244510, 50, 5,
-          -0.30000000000000004 },
-  { -23686895.217517227, 50, 5,
-          -0.19999999999999996 },
-  { -34878992.965676002, 50, 5,
-          -0.099999999999999978 },
-  { -0.0000000000000000, 50, 5,
-          0.0000000000000000 },
-  { 34878992.965675950, 50, 5,
-          0.10000000000000009 },
-  { 23686895.217517227, 50, 5,
-          0.19999999999999996 },
-  { -14562029.629244510, 50, 5,
-          0.30000000000000004 },
-  { -37089596.700204931, 50, 5,
-          0.39999999999999991 },
-  { -36265736.218529105, 50, 5,
-          0.50000000000000000 },
-  { -32071189.035790265, 50, 5,
-          0.60000000000000009 },
-  { -40808153.913493626, 50, 5,
-          0.69999999999999996 },
-  { -27753716.768532373, 50, 5,
-          0.80000000000000004 },
-  { 27340473.952133406, 50, 5,
-          0.89999999999999991 },
-  { 0.0000000000000000, 50, 5,
-          1.0000000000000000 },
+  { 0.0000000000000000, 50, 2, 
+         -1.0000000000000000, 0.0 },
+  { 433.04168483713511, 50, 2, 
+         -0.90000000000000002, 0.0 },
+  { -348.06364372056424, 50, 2, 
+         -0.80000000000000004, 0.0 },
+  { 50.221071418108444, 50, 2, 
+         -0.69999999999999996, 0.0 },
+  { 158.46096409274352, 50, 2, 
+         -0.59999999999999998, 0.0 },
+  { 85.988858299721457, 50, 2, 
+         -0.50000000000000000, 0.0 },
+  { -101.15891460879088, 50, 2, 
+         -0.39999999999999991, 0.0 },
+  { -277.07168105316526, 50, 2, 
+         -0.29999999999999993, 0.0 },
+  { -214.33311373510401, 50, 2, 
+         -0.19999999999999996, 0.0 },
+  { 96.349657930951665, 50, 2, 
+         -0.099999999999999978, 0.0 },
+  { 286.30169028100346, 50, 2, 
+         0.0000000000000000, 0.0 },
+  { 96.349657930953242, 50, 2, 
+         0.10000000000000009, 0.0 },
+  { -214.33311373510165, 50, 2, 
+         0.20000000000000018, 0.0 },
+  { -277.07168105316617, 50, 2, 
+         0.30000000000000004, 0.0 },
+  { -101.15891460879435, 50, 2, 
+         0.40000000000000013, 0.0 },
+  { 85.988858299721457, 50, 2, 
+         0.50000000000000000, 0.0 },
+  { 158.46096409274153, 50, 2, 
+         0.60000000000000009, 0.0 },
+  { 50.221071418103143, 50, 2, 
+         0.70000000000000018, 0.0 },
+  { -348.06364372056424, 50, 2, 
+         0.80000000000000004, 0.0 },
+  { 433.04168483713596, 50, 2, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 50, 2, 
+         1.0000000000000000, 0.0 },
 };
+const double toler024 = 5.0000000000000039e-13;
 
-// Test function for l=50, m=5.
-template <typename Tp>
-void test025()
+// Test data for l=50, m=5.
+// max(|f - f_GSL|): 7.4505805969238281e-08 at index 14
+// max(|f - f_GSL| / |f_GSL|): 2.0088060426072767e-15
+// mean(f - f_GSL): -6.3862119402204238e-09
+// variance(f - f_GSL): 2.1411444046342303e-18
+// stddev(f - f_GSL): 1.4632649810045447e-09
+const testcase_assoc_legendre<double>
+data025[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data025)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data025[i].l), Tp(data025[i].m),
-                   Tp(data025[i].x));
-      const Tp f0 = data025[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=50, m=10.
-testcase_assoc_legendre<double> data026[] = {
-  { -0.0000000000000000, 50, 10,
-          -1.0000000000000000 },
-  { -8994661710093158.0, 50, 10,
-          -0.90000000000000002 },
-  { 932311375306557.00, 50, 10,
-          -0.80000000000000004 },
-  { 12153535011507012., 50, 10,
-          -0.69999999999999996 },
-  { 12176690755542244., 50, 10,
-          -0.59999999999999998 },
-  { 9180035388465752.0, 50, 10,
-          -0.50000000000000000 },
-  { 889201701866911.12, 50, 10,
-          -0.40000000000000002 },
-  { -9451384032851600.0, 50, 10,
-          -0.30000000000000004 },
-  { -9926439446673564.0, 50, 10,
-          -0.19999999999999996 },
-  { 2794368162749970.5, 50, 10,
-          -0.099999999999999978 },
-  { 11452238249246346., 50, 10,
-          0.0000000000000000 },
-  { 2794368162750031.0, 50, 10,
-          0.10000000000000009 },
-  { -9926439446673564.0, 50, 10,
-          0.19999999999999996 },
-  { -9451384032851600.0, 50, 10,
-          0.30000000000000004 },
-  { 889201701866976.25, 50, 10,
-          0.39999999999999991 },
-  { 9180035388465752.0, 50, 10,
-          0.50000000000000000 },
-  { 12176690755542216., 50, 10,
-          0.60000000000000009 },
-  { 12153535011507012., 50, 10,
-          0.69999999999999996 },
-  { 932311375306557.00, 50, 10,
-          0.80000000000000004 },
-  { -8994661710093322.0, 50, 10,
-          0.89999999999999991 },
-  { 0.0000000000000000, 50, 10,
-          1.0000000000000000 },
+  { -0.0000000000000000, 50, 5, 
+         -1.0000000000000000, 0.0 },
+  { -27340473.952132829, 50, 5, 
+         -0.90000000000000002, 0.0 },
+  { 27753716.768532373, 50, 5, 
+         -0.80000000000000004, 0.0 },
+  { 40808153.913493633, 50, 5, 
+         -0.69999999999999996, 0.0 },
+  { 32071189.035790090, 50, 5, 
+         -0.59999999999999998, 0.0 },
+  { 36265736.218529105, 50, 5, 
+         -0.50000000000000000, 0.0 },
+  { 37089596.700204931, 50, 5, 
+         -0.39999999999999991, 0.0 },
+  { 14562029.629244687, 50, 5, 
+         -0.29999999999999993, 0.0 },
+  { -23686895.217517190, 50, 5, 
+         -0.19999999999999996, 0.0 },
+  { -34878992.965676002, 50, 5, 
+         -0.099999999999999978, 0.0 },
+  { -0.0000000000000000, 50, 5, 
+         0.0000000000000000, 0.0 },
+  { 34878992.965675958, 50, 5, 
+         0.10000000000000009, 0.0 },
+  { 23686895.217517529, 50, 5, 
+         0.20000000000000018, 0.0 },
+  { -14562029.629244499, 50, 5, 
+         0.30000000000000004, 0.0 },
+  { -37089596.700204782, 50, 5, 
+         0.40000000000000013, 0.0 },
+  { -36265736.218529105, 50, 5, 
+         0.50000000000000000, 0.0 },
+  { -32071189.035790242, 50, 5, 
+         0.60000000000000009, 0.0 },
+  { -40808153.913493834, 50, 5, 
+         0.70000000000000018, 0.0 },
+  { -27753716.768532373, 50, 5, 
+         0.80000000000000004, 0.0 },
+  { 27340473.952132136, 50, 5, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 50, 5, 
+         1.0000000000000000, 0.0 },
 };
+const double toler025 = 2.5000000000000020e-13;
 
-// Test function for l=50, m=10.
-template <typename Tp>
-void test026()
+// Test data for l=50, m=10.
+// max(|f - f_GSL|): 22.000000000000000 at index 3
+// max(|f - f_GSL| / |f_GSL|): 2.2163032493360465e-15
+// mean(f - f_GSL): -1.9821428571428572
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_assoc_legendre<double>
+data026[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data026)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data026[i].l), Tp(data026[i].m),
-                   Tp(data026[i].x));
-      const Tp f0 = data026[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
-
-// Test data for l=50, m=20.
-testcase_assoc_legendre<double> data027[] = {
-  { 0.0000000000000000, 50, 20,
-          -1.0000000000000000 },
-  { 1.6630925158645460e+33, 50, 20,
-          -0.90000000000000002 },
-  { 1.0622676657892043e+33, 50, 20,
-          -0.80000000000000004 },
-  { 8.6022521164717170e+32, 50, 20,
-          -0.69999999999999996 },
-  { 4.0860128756808430e+32, 50, 20,
-          -0.59999999999999998 },
-  { -4.0169860814274409e+32, 50, 20,
-          -0.50000000000000000 },
-  { -8.2324325279774008e+32, 50, 20,
-          -0.40000000000000002 },
-  { -4.0054067236243299e+31, 50, 20,
-          -0.30000000000000004 },
-  { 7.9309266056434309e+32, 50, 20,
-          -0.19999999999999996 },
-  { 5.4151358290899148e+31, 50, 20,
-          -0.099999999999999978 },
-  { -7.8735935697332210e+32, 50, 20,
-          0.0000000000000000 },
-  { 5.4151358290895032e+31, 50, 20,
-          0.10000000000000009 },
-  { 7.9309266056434309e+32, 50, 20,
-          0.19999999999999996 },
-  { -4.0054067236243299e+31, 50, 20,
-          0.30000000000000004 },
-  { -8.2324325279773965e+32, 50, 20,
-          0.39999999999999991 },
-  { -4.0169860814274409e+32, 50, 20,
-          0.50000000000000000 },
-  { 4.0860128756807882e+32, 50, 20,
-          0.60000000000000009 },
-  { 8.6022521164717170e+32, 50, 20,
-          0.69999999999999996 },
-  { 1.0622676657892043e+33, 50, 20,
-          0.80000000000000004 },
-  { 1.6630925158645483e+33, 50, 20,
-          0.89999999999999991 },
-  { 0.0000000000000000, 50, 20,
-          1.0000000000000000 },
+  { -0.0000000000000000, 50, 10, 
+         -1.0000000000000000, 0.0 },
+  { -8994661710093155.0, 50, 10, 
+         -0.90000000000000002, 0.0 },
+  { 932311375306569.62, 50, 10, 
+         -0.80000000000000004, 0.0 },
+  { 12153535011507012., 50, 10, 
+         -0.69999999999999996, 0.0 },
+  { 12176690755542240., 50, 10, 
+         -0.59999999999999998, 0.0 },
+  { 9180035388465754.0, 50, 10, 
+         -0.50000000000000000, 0.0 },
+  { 889201701866984.00, 50, 10, 
+         -0.39999999999999991, 0.0 },
+  { -9451384032851544.0, 50, 10, 
+         -0.29999999999999993, 0.0 },
+  { -9926439446673564.0, 50, 10, 
+         -0.19999999999999996, 0.0 },
+  { 2794368162749970.5, 50, 10, 
+         -0.099999999999999978, 0.0 },
+  { 11452238249246346., 50, 10, 
+         0.0000000000000000, 0.0 },
+  { 2794368162750031.0, 50, 10, 
+         0.10000000000000009, 0.0 },
+  { -9926439446673506.0, 50, 10, 
+         0.20000000000000018, 0.0 },
+  { -9451384032851604.0, 50, 10, 
+         0.30000000000000004, 0.0 },
+  { 889201701866835.25, 50, 10, 
+         0.40000000000000013, 0.0 },
+  { 9180035388465754.0, 50, 10, 
+         0.50000000000000000, 0.0 },
+  { 12176690755542214., 50, 10, 
+         0.60000000000000009, 0.0 },
+  { 12153535011506908., 50, 10, 
+         0.70000000000000018, 0.0 },
+  { 932311375306569.62, 50, 10, 
+         0.80000000000000004, 0.0 },
+  { -8994661710093013.0, 50, 10, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 50, 10, 
+         1.0000000000000000, 0.0 },
 };
+const double toler026 = 2.5000000000000020e-13;
 
-// Test function for l=50, m=20.
-template <typename Tp>
-void test027()
+// Test data for l=50, m=20.
+// max(|f - f_GSL|): 3.6028797018963968e+18 at index 14
+// max(|f - f_GSL| / |f_GSL|): 5.0227025739283085e-15
+// mean(f - f_GSL): -1.8529095609752899e+17
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_assoc_legendre<double>
+data027[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data027)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data027[i].l), Tp(data027[i].m),
-                   Tp(data027[i].x));
-      const Tp f0 = data027[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
-
-// Test data for l=50, m=50.
-testcase_assoc_legendre<double> data028[] = {
-  { 0.0000000000000000, 50, 50,
-          -1.0000000000000000 },
-  { 2.5366994974431341e+60, 50, 50,
-          -0.90000000000000002 },
-  { 2.2028834403101213e+67, 50, 50,
-          -0.80000000000000004 },
-  { 1.3325496559566651e+71, 50, 50,
-          -0.69999999999999996 },
-  { 3.8898096431781969e+73, 50, 50,
-          -0.59999999999999998 },
-  { 2.0509760257037188e+75, 50, 50,
-          -0.50000000000000000 },
-  { 3.4866724533443283e+76, 50, 50,
-          -0.40000000000000002 },
-  { 2.5790740224150207e+77, 50, 50,
-          -0.30000000000000004 },
-  { 9.8222237931680989e+77, 50, 50,
-          -0.19999999999999996 },
-  { 2.1198682190366617e+78, 50, 50,
-          -0.099999999999999978 },
-  { 2.7253921397507295e+78, 50, 50,
-          0.0000000000000000 },
-  { 2.1198682190366617e+78, 50, 50,
-          0.10000000000000009 },
-  { 9.8222237931680989e+77, 50, 50,
-          0.19999999999999996 },
-  { 2.5790740224150207e+77, 50, 50,
-          0.30000000000000004 },
-  { 3.4866724533443283e+76, 50, 50,
-          0.39999999999999991 },
-  { 2.0509760257037188e+75, 50, 50,
-          0.50000000000000000 },
-  { 3.8898096431781724e+73, 50, 50,
-          0.60000000000000009 },
-  { 1.3325496559566651e+71, 50, 50,
-          0.69999999999999996 },
-  { 2.2028834403101213e+67, 50, 50,
-          0.80000000000000004 },
-  { 2.5366994974431990e+60, 50, 50,
-          0.89999999999999991 },
-  { 0.0000000000000000, 50, 50,
-          1.0000000000000000 },
+  { 0.0000000000000000, 50, 20, 
+         -1.0000000000000000, 0.0 },
+  { 1.6630925158645501e+33, 50, 20, 
+         -0.90000000000000002, 0.0 },
+  { 1.0622676657892052e+33, 50, 20, 
+         -0.80000000000000004, 0.0 },
+  { 8.6022521164717112e+32, 50, 20, 
+         -0.69999999999999996, 0.0 },
+  { 4.0860128756808466e+32, 50, 20, 
+         -0.59999999999999998, 0.0 },
+  { -4.0169860814274459e+32, 50, 20, 
+         -0.50000000000000000, 0.0 },
+  { -8.2324325279773994e+32, 50, 20, 
+         -0.39999999999999991, 0.0 },
+  { -4.0054067236247267e+31, 50, 20, 
+         -0.29999999999999993, 0.0 },
+  { 7.9309266056434309e+32, 50, 20, 
+         -0.19999999999999996, 0.0 },
+  { 5.4151358290898977e+31, 50, 20, 
+         -0.099999999999999978, 0.0 },
+  { -7.8735935697332210e+32, 50, 20, 
+         0.0000000000000000, 0.0 },
+  { 5.4151358290894924e+31, 50, 20, 
+         0.10000000000000009, 0.0 },
+  { 7.9309266056434453e+32, 50, 20, 
+         0.20000000000000018, 0.0 },
+  { -4.0054067236243731e+31, 50, 20, 
+         0.30000000000000004, 0.0 },
+  { -8.2324325279773893e+32, 50, 20, 
+         0.40000000000000013, 0.0 },
+  { -4.0169860814274459e+32, 50, 20, 
+         0.50000000000000000, 0.0 },
+  { 4.0860128756807846e+32, 50, 20, 
+         0.60000000000000009, 0.0 },
+  { 8.6022521164716291e+32, 50, 20, 
+         0.70000000000000018, 0.0 },
+  { 1.0622676657892052e+33, 50, 20, 
+         0.80000000000000004, 0.0 },
+  { 1.6630925158645541e+33, 50, 20, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 50, 20, 
+         1.0000000000000000, 0.0 },
 };
+const double toler027 = 5.0000000000000039e-13;
 
-// Test function for l=50, m=50.
-template <typename Tp>
-void test028()
+// Test data for l=50, m=50.
+// max(|f - f_GSL|): 1.0695779622587839e+64 at index 12
+// max(|f - f_GSL| / |f_GSL|): 1.1061123055945194e-14
+// mean(f - f_GSL): -2.0817504896587826e+62
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_assoc_legendre<double>
+data028[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data028)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data028[i].l), Tp(data028[i].m),
-                   Tp(data028[i].x));
-      const Tp f0 = data028[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=100, m=0.
-testcase_assoc_legendre<double> data029[] = {
-  { 1.0000000000000000, 100, 0,
-          -1.0000000000000000 },
-  { 0.10226582055871908, 100, 0,
-          -0.90000000000000002 },
-  { 0.050861167913584124, 100, 0,
-          -0.80000000000000004 },
-  { -0.077132507199778780, 100, 0,
-          -0.69999999999999996 },
-  { -0.023747023905133110, 100, 0,
-          -0.59999999999999998 },
-  { -0.060518025961861198, 100, 0,
-          -0.50000000000000000 },
-  { -0.072258202125684429, 100, 0,
-          -0.40000000000000002 },
-  { 0.057127392202801719, 100, 0,
-          -0.30000000000000004 },
-  { 0.014681835355659636, 100, 0,
-          -0.19999999999999996 },
-  { -0.063895098434750303, 100, 0,
-          -0.099999999999999978 },
-  { 0.079589237387178727, 100, 0,
-          0.0000000000000000 },
-  { -0.063895098434749775, 100, 0,
-          0.10000000000000009 },
-  { 0.014681835355659636, 100, 0,
-          0.19999999999999996 },
-  { 0.057127392202801719, 100, 0,
-          0.30000000000000004 },
-  { -0.072258202125685012, 100, 0,
-          0.39999999999999991 },
-  { -0.060518025961861198, 100, 0,
-          0.50000000000000000 },
-  { -0.023747023905134217, 100, 0,
-          0.60000000000000009 },
-  { -0.077132507199778780, 100, 0,
-          0.69999999999999996 },
-  { 0.050861167913584124, 100, 0,
-          0.80000000000000004 },
-  { 0.10226582055871723, 100, 0,
-          0.89999999999999991 },
-  { 1.0000000000000000, 100, 0,
-          1.0000000000000000 },
+  { 0.0000000000000000, 50, 50, 
+         -1.0000000000000000, 0.0 },
+  { 2.5366994974431341e+60, 50, 50, 
+         -0.90000000000000002, 0.0 },
+  { 2.2028834403101213e+67, 50, 50, 
+         -0.80000000000000004, 0.0 },
+  { 1.3325496559566651e+71, 50, 50, 
+         -0.69999999999999996, 0.0 },
+  { 3.8898096431781969e+73, 50, 50, 
+         -0.59999999999999998, 0.0 },
+  { 2.0509760257037188e+75, 50, 50, 
+         -0.50000000000000000, 0.0 },
+  { 3.4866724533443283e+76, 50, 50, 
+         -0.39999999999999991, 0.0 },
+  { 2.5790740224149893e+77, 50, 50, 
+         -0.29999999999999993, 0.0 },
+  { 9.8222237931680989e+77, 50, 50, 
+         -0.19999999999999996, 0.0 },
+  { 2.1198682190366617e+78, 50, 50, 
+         -0.099999999999999978, 0.0 },
+  { 2.7253921397507295e+78, 50, 50, 
+         0.0000000000000000, 0.0 },
+  { 2.1198682190366617e+78, 50, 50, 
+         0.10000000000000009, 0.0 },
+  { 9.8222237931680989e+77, 50, 50, 
+         0.20000000000000018, 0.0 },
+  { 2.5790740224150207e+77, 50, 50, 
+         0.30000000000000004, 0.0 },
+  { 3.4866724533443123e+76, 50, 50, 
+         0.40000000000000013, 0.0 },
+  { 2.0509760257037188e+75, 50, 50, 
+         0.50000000000000000, 0.0 },
+  { 3.8898096431781724e+73, 50, 50, 
+         0.60000000000000009, 0.0 },
+  { 1.3325496559566344e+71, 50, 50, 
+         0.70000000000000018, 0.0 },
+  { 2.2028834403101213e+67, 50, 50, 
+         0.80000000000000004, 0.0 },
+  { 2.5366994974430855e+60, 50, 50, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 50, 50, 
+         1.0000000000000000, 0.0 },
 };
+const double toler028 = 1.0000000000000008e-12;
 
-// Test function for l=100, m=0.
-template <typename Tp>
-void test029()
+// Test data for l=100, m=0.
+// max(|f - f_GSL|): 3.4694469519536142e-16 at index 2
+// max(|f - f_GSL| / |f_GSL|): 6.8214063779431592e-15
+// mean(f - f_GSL): -4.1385545784018113e-17
+// variance(f - f_GSL): 8.9920078491655612e-35
+// stddev(f - f_GSL): 9.4826198116161765e-18
+const testcase_assoc_legendre<double>
+data029[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data029)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data029[i].l), Tp(data029[i].m),
-                   Tp(data029[i].x));
-      const Tp f0 = data029[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=100, m=1.
-testcase_assoc_legendre<double> data030[] = {
-  { -0.0000000000000000, 100, 1,
-          -1.0000000000000000 },
-  { 6.5200167187780309, 100, 1,
-          -0.90000000000000002 },
-  { 9.0065170007027540, 100, 1,
-          -0.80000000000000004 },
-  { -5.4690908541181056, 100, 1,
-          -0.69999999999999996 },
-  { -8.6275439170430861, 100, 1,
-          -0.59999999999999998 },
-  { -6.0909031663448499, 100, 1,
-          -0.50000000000000000 },
-  { 4.1160338699561265, 100, 1,
-          -0.40000000000000002 },
-  { 5.8491043010758004, 100, 1,
-          -0.30000000000000004 },
-  { -7.9435138723089826, 100, 1,
-          -0.19999999999999996 },
-  { 4.7996285823989346, 100, 1,
-          -0.099999999999999978 },
-  { 0.0000000000000000, 100, 1,
-          0.0000000000000000 },
-  { -4.7996285823990057, 100, 1,
-          0.10000000000000009 },
-  { 7.9435138723089826, 100, 1,
-          0.19999999999999996 },
-  { -5.8491043010758004, 100, 1,
-          0.30000000000000004 },
-  { -4.1160338699560359, 100, 1,
-          0.39999999999999991 },
-  { 6.0909031663448499, 100, 1,
-          0.50000000000000000 },
-  { 8.6275439170430559, 100, 1,
-          0.60000000000000009 },
-  { 5.4690908541181056, 100, 1,
-          0.69999999999999996 },
-  { -9.0065170007027540, 100, 1,
-          0.80000000000000004 },
-  { -6.5200167187783133, 100, 1,
-          0.89999999999999991 },
-  { 0.0000000000000000, 100, 1,
-          1.0000000000000000 },
+  { 1.0000000000000000, 100, 0, 
+         -1.0000000000000000, 0.0 },
+  { 0.10226582055871893, 100, 0, 
+         -0.90000000000000002, 0.0 },
+  { 0.050861167913584228, 100, 0, 
+         -0.80000000000000004, 0.0 },
+  { -0.077132507199778641, 100, 0, 
+         -0.69999999999999996, 0.0 },
+  { -0.023747023905133141, 100, 0, 
+         -0.59999999999999998, 0.0 },
+  { -0.060518025961861198, 100, 0, 
+         -0.50000000000000000, 0.0 },
+  { -0.072258202125685025, 100, 0, 
+         -0.39999999999999991, 0.0 },
+  { 0.057127392202801046, 100, 0, 
+         -0.29999999999999993, 0.0 },
+  { 0.014681835355659706, 100, 0, 
+         -0.19999999999999996, 0.0 },
+  { -0.063895098434750205, 100, 0, 
+         -0.099999999999999978, 0.0 },
+  { 0.079589237387178727, 100, 0, 
+         0.0000000000000000, 0.0 },
+  { -0.063895098434749761, 100, 0, 
+         0.10000000000000009, 0.0 },
+  { 0.014681835355657875, 100, 0, 
+         0.20000000000000018, 0.0 },
+  { 0.057127392202801566, 100, 0, 
+         0.30000000000000004, 0.0 },
+  { -0.072258202125684082, 100, 0, 
+         0.40000000000000013, 0.0 },
+  { -0.060518025961861198, 100, 0, 
+         0.50000000000000000, 0.0 },
+  { -0.023747023905134217, 100, 0, 
+         0.60000000000000009, 0.0 },
+  { -0.077132507199780501, 100, 0, 
+         0.70000000000000018, 0.0 },
+  { 0.050861167913584228, 100, 0, 
+         0.80000000000000004, 0.0 },
+  { 0.10226582055872063, 100, 0, 
+         0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 100, 0, 
+         1.0000000000000000, 0.0 },
 };
+const double toler029 = 5.0000000000000039e-13;
 
-// Test function for l=100, m=1.
-template <typename Tp>
-void test030()
+// Test data for l=100, m=1.
+// max(|f - f_GSL|): 1.1546319456101628e-14 at index 3
+// max(|f - f_GSL| / |f_GSL|): 2.1111954004946762e-15
+// mean(f - f_GSL): -8.0358999877630379e-16
+// variance(f - f_GSL): 3.3902236521998243e-32
+// stddev(f - f_GSL): 1.8412559985509414e-16
+const testcase_assoc_legendre<double>
+data030[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data030)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data030[i].l), Tp(data030[i].m),
-                   Tp(data030[i].x));
-      const Tp f0 = data030[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for l=100, m=2.
-testcase_assoc_legendre<double> data031[] = {
-  { 0.0000000000000000, 100, 2,
-          -1.0000000000000000 },
-  { -1005.9604880761007, 100, 2,
-          -0.90000000000000002 },
-  { -489.68041725865896, 100, 2,
-          -0.80000000000000004 },
-  { 768.31676011669970, 100, 2,
-          -0.69999999999999996 },
-  { 226.90362556628003, 100, 2,
-          -0.59999999999999998 },
-  { 604.19889304940330, 100, 2,
-          -0.50000000000000000 },
-  { 733.40061037838029, 100, 2,
-          -0.40000000000000002 },
-  { -573.30774483996402, 100, 2,
-          -0.30000000000000004 },
-  { -151.52946305080897, 100, 2,
-          -0.19999999999999996 },
-  { 646.30525583588019, 100, 2,
-          -0.099999999999999978 },
-  { -803.85129761050518, 100, 2,
-          0.0000000000000000 },
-  { 646.30525583587439, 100, 2,
-          0.10000000000000009 },
-  { -151.52946305080897, 100, 2,
-          0.19999999999999996 },
-  { -573.30774483996402, 100, 2,
-          0.30000000000000004 },
-  { 733.40061037838507, 100, 2,
-          0.39999999999999991 },
-  { 604.19889304940330, 100, 2,
-          0.50000000000000000 },
-  { 226.90362556629168, 100, 2,
-          0.60000000000000009 },
-  { 768.31676011669970, 100, 2,
-          0.69999999999999996 },
-  { -489.68041725865896, 100, 2,
-          0.80000000000000004 },
-  { -1005.9604880760811, 100, 2,
-          0.89999999999999991 },
-  { 0.0000000000000000, 100, 2,
-          1.0000000000000000 },
+  { -0.0000000000000000, 100, 1, 
+         -1.0000000000000000, 0.0 },
+  { 6.5200167187780345, 100, 1, 
+         -0.90000000000000002, 0.0 },
+  { 9.0065170007027486, 100, 1, 
+         -0.80000000000000004, 0.0 },
+  { -5.4690908541180976, 100, 1, 
+         -0.69999999999999996, 0.0 },
+  { -8.6275439170430790, 100, 1, 
+         -0.59999999999999998, 0.0 },
+  { -6.0909031663448454, 100, 1, 
+         -0.50000000000000000, 0.0 },
+  { 4.1160338699560395, 100, 1, 
+         -0.39999999999999991, 0.0 },
+  { 5.8491043010758634, 100, 1, 
+         -0.29999999999999993, 0.0 },
+  { -7.9435138723089826, 100, 1, 
+         -0.19999999999999996, 0.0 },
+  { 4.7996285823989355, 100, 1, 
+         -0.099999999999999978, 0.0 },
+  { 0.0000000000000000, 100, 1, 
+         0.0000000000000000, 0.0 },
+  { -4.7996285823990101, 100, 1, 
+         0.10000000000000009, 0.0 },
+  { 7.9435138723090155, 100, 1, 
+         0.20000000000000018, 0.0 },
+  { -5.8491043010758013, 100, 1, 
+         0.30000000000000004, 0.0 },
+  { -4.1160338699562162, 100, 1, 
+         0.40000000000000013, 0.0 },
+  { 6.0909031663448454, 100, 1, 
+         0.50000000000000000, 0.0 },
+  { 8.6275439170430470, 100, 1, 
+         0.60000000000000009, 0.0 },
+  { 5.4690908541178693, 100, 1, 
+         0.70000000000000018, 0.0 },
+  { -9.0065170007027486, 100, 1, 
+         0.80000000000000004, 0.0 },
+  { -6.5200167187777787, 100, 1, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 100, 1, 
+         1.0000000000000000, 0.0 },
 };
+const double toler030 = 2.5000000000000020e-13;
 
-// Test function for l=100, m=2.
-template <typename Tp>
-void test031()
+// Test data for l=100, m=2.
+// max(|f - f_GSL|): 6.8212102632969618e-13 at index 5
+// max(|f - f_GSL| / |f_GSL|): 2.0632212207447263e-15
+// mean(f - f_GSL): 8.2558298821649733e-14
+// variance(f - f_GSL): 3.5783331697705263e-28
+// stddev(f - f_GSL): 1.8916482679849673e-14
+const testcase_assoc_legendre<double>
+data031[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data031)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data031[i].l), Tp(data031[i].m),
-                   Tp(data031[i].x));
-      const Tp f0 = data031[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=100, m=5.
-testcase_assoc_legendre<double> data032[] = {
-  { 0.0000000000000000, 100, 5,
-          -1.0000000000000000 },
-  { 900551126.09653592, 100, 5,
-          -0.90000000000000002 },
-  { 988567431.55756044, 100, 5,
-          -0.80000000000000004 },
-  { -645646451.90344620, 100, 5,
-          -0.69999999999999996 },
-  { -897114585.29920745, 100, 5,
-          -0.59999999999999998 },
-  { -661710744.42483830, 100, 5,
-          -0.50000000000000000 },
-  { 380163158.51425594, 100, 5,
-          -0.40000000000000002 },
-  { 617391071.36632609, 100, 5,
-          -0.30000000000000004 },
-  { -805288801.85509181, 100, 5,
-          -0.19999999999999996 },
-  { 481041740.16728652, 100, 5,
-          -0.099999999999999978 },
-  { 0.0000000000000000, 100, 5,
-          0.0000000000000000 },
-  { -481041740.16729414, 100, 5,
-          0.10000000000000009 },
-  { 805288801.85509181, 100, 5,
-          0.19999999999999996 },
-  { -617391071.36632609, 100, 5,
-          0.30000000000000004 },
-  { -380163158.51424748, 100, 5,
-          0.39999999999999991 },
-  { 661710744.42483830, 100, 5,
-          0.50000000000000000 },
-  { 897114585.29920506, 100, 5,
-          0.60000000000000009 },
-  { 645646451.90344620, 100, 5,
-          0.69999999999999996 },
-  { -988567431.55756044, 100, 5,
-          0.80000000000000004 },
-  { -900551126.09655809, 100, 5,
-          0.89999999999999991 },
-  { 0.0000000000000000, 100, 5,
-          1.0000000000000000 },
+  { 0.0000000000000000, 100, 2, 
+         -1.0000000000000000, 0.0 },
+  { -1005.9604880761002, 100, 2, 
+         -0.90000000000000002, 0.0 },
+  { -489.68041725865947, 100, 2, 
+         -0.80000000000000004, 0.0 },
+  { 768.31676011669924, 100, 2, 
+         -0.69999999999999996, 0.0 },
+  { 226.90362556627937, 100, 2, 
+         -0.59999999999999998, 0.0 },
+  { 604.19889304940341, 100, 2, 
+         -0.50000000000000000, 0.0 },
+  { 733.40061037838518, 100, 2, 
+         -0.39999999999999991, 0.0 },
+  { -573.30774483995629, 100, 2, 
+         -0.29999999999999993, 0.0 },
+  { -151.52946305080880, 100, 2, 
+         -0.19999999999999996, 0.0 },
+  { 646.30525583587985, 100, 2, 
+         -0.099999999999999978, 0.0 },
+  { -803.85129761050518, 100, 2, 
+         0.0000000000000000, 0.0 },
+  { 646.30525583587439, 100, 2, 
+         0.10000000000000009, 0.0 },
+  { -151.52946305079013, 100, 2, 
+         0.20000000000000018, 0.0 },
+  { -573.30774483996390, 100, 2, 
+         0.30000000000000004, 0.0 },
+  { 733.40061037837552, 100, 2, 
+         0.40000000000000013, 0.0 },
+  { 604.19889304940341, 100, 2, 
+         0.50000000000000000, 0.0 },
+  { 226.90362556629168, 100, 2, 
+         0.60000000000000009, 0.0 },
+  { 768.31676011671766, 100, 2, 
+         0.70000000000000018, 0.0 },
+  { -489.68041725865947, 100, 2, 
+         0.80000000000000004, 0.0 },
+  { -1005.9604880761161, 100, 2, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 100, 2, 
+         1.0000000000000000, 0.0 },
 };
+const double toler031 = 2.5000000000000020e-13;
 
-// Test function for l=100, m=5.
-template <typename Tp>
-void test032()
+// Test data for l=100, m=5.
+// max(|f - f_GSL|): 1.4305114746093750e-06 at index 14
+// max(|f - f_GSL| / |f_GSL|): 3.7628882298853693e-15
+// mean(f - f_GSL): -5.1089695521763390e-08
+// variance(f - f_GSL): 1.3703324189659077e-16
+// stddev(f - f_GSL): 1.1706119848036358e-08
+const testcase_assoc_legendre<double>
+data032[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data032)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data032[i].l), Tp(data032[i].m),
-                   Tp(data032[i].x));
-      const Tp f0 = data032[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=100, m=10.
-testcase_assoc_legendre<double> data033[] = {
-  { 0.0000000000000000, 100, 10,
-          -1.0000000000000000 },
-  { 2.5643395957658915e+17, 100, 10,
-          -0.90000000000000002 },
-  { 1.5778673545673316e+18, 100, 10,
-          -0.80000000000000004 },
-  { 4.4355048487496776e+18, 100, 10,
-          -0.69999999999999996 },
-  { -9.5936111659124493e+17, 100, 10,
-          -0.59999999999999998 },
-  { 4.2387123021963372e+18, 100, 10,
-          -0.50000000000000000 },
-  { 8.2370834618426563e+18, 100, 10,
-          -0.40000000000000002 },
-  { -4.9089358388052890e+18, 100, 10,
-          -0.30000000000000004 },
-  { -2.3468810358091279e+18, 100, 10,
-          -0.19999999999999996 },
-  { 6.8627855225034568e+18, 100, 10,
-          -0.099999999999999978 },
-  { -8.2494597181670380e+18, 100, 10,
-          0.0000000000000000 },
-  { 6.8627855225034056e+18, 100, 10,
-          0.10000000000000009 },
-  { -2.3468810358091279e+18, 100, 10,
-          0.19999999999999996 },
-  { -4.9089358388052890e+18, 100, 10,
-          0.30000000000000004 },
-  { 8.2370834618426747e+18, 100, 10,
-          0.39999999999999991 },
-  { 4.2387123021963372e+18, 100, 10,
-          0.50000000000000000 },
-  { -9.5936111659112115e+17, 100, 10,
-          0.60000000000000009 },
-  { 4.4355048487496776e+18, 100, 10,
-          0.69999999999999996 },
-  { 1.5778673545673316e+18, 100, 10,
-          0.80000000000000004 },
-  { 2.5643395957690282e+17, 100, 10,
-          0.89999999999999991 },
-  { 0.0000000000000000, 100, 10,
-          1.0000000000000000 },
+  { 0.0000000000000000, 100, 5, 
+         -1.0000000000000000, 0.0 },
+  { 900551126.09653807, 100, 5, 
+         -0.90000000000000002, 0.0 },
+  { 988567431.55756140, 100, 5, 
+         -0.80000000000000004, 0.0 },
+  { -645646451.90344620, 100, 5, 
+         -0.69999999999999996, 0.0 },
+  { -897114585.29920685, 100, 5, 
+         -0.59999999999999998, 0.0 },
+  { -661710744.42483854, 100, 5, 
+         -0.50000000000000000, 0.0 },
+  { 380163158.51424754, 100, 5, 
+         -0.39999999999999991, 0.0 },
+  { 617391071.36633193, 100, 5, 
+         -0.29999999999999993, 0.0 },
+  { -805288801.85509109, 100, 5, 
+         -0.19999999999999996, 0.0 },
+  { 481041740.16728652, 100, 5, 
+         -0.099999999999999978, 0.0 },
+  { 0.0000000000000000, 100, 5, 
+         0.0000000000000000, 0.0 },
+  { -481041740.16729391, 100, 5, 
+         0.10000000000000009, 0.0 },
+  { 805288801.85509515, 100, 5, 
+         0.20000000000000018, 0.0 },
+  { -617391071.36632574, 100, 5, 
+         0.30000000000000004, 0.0 },
+  { -380163158.51426536, 100, 5, 
+         0.40000000000000013, 0.0 },
+  { 661710744.42483854, 100, 5, 
+         0.50000000000000000, 0.0 },
+  { 897114585.29920483, 100, 5, 
+         0.60000000000000009, 0.0 },
+  { 645646451.90342283, 100, 5, 
+         0.70000000000000018, 0.0 },
+  { -988567431.55756140, 100, 5, 
+         0.80000000000000004, 0.0 },
+  { -900551126.09651637, 100, 5, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 100, 5, 
+         1.0000000000000000, 0.0 },
 };
+const double toler032 = 2.5000000000000020e-13;
 
-// Test function for l=100, m=10.
-template <typename Tp>
-void test033()
+// Test data for l=100, m=10.
+// max(|f - f_GSL|): 14336.000000000000 at index 14
+// max(|f - f_GSL| / |f_GSL|): 3.4905902237930355e-15
+// mean(f - f_GSL): 341.33333333333331
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_assoc_legendre<double>
+data033[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data033)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data033[i].l), Tp(data033[i].m),
-                   Tp(data033[i].x));
-      const Tp f0 = data033[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-}
-
-// Test data for l=100, m=20.
-testcase_assoc_legendre<double> data034[] = {
-  { 0.0000000000000000, 100, 20,
-          -1.0000000000000000 },
-  { 7.1604344878778576e+37, 100, 20,
-          -0.90000000000000002 },
-  { -8.3963895116962035e+38, 100, 20,
-          -0.80000000000000004 },
-  { 7.9022236853110024e+38, 100, 20,
-          -0.69999999999999996 },
-  { 8.2680005574120908e+38, 100, 20,
-          -0.59999999999999998 },
-  { 3.0750497039999469e+38, 100, 20,
-          -0.50000000000000000 },
-  { -7.6120586043843874e+38, 100, 20,
-          -0.40000000000000002 },
-  { 1.1474496891901873e+38, 100, 20,
-          -0.30000000000000004 },
-  { 4.3966251307444218e+38, 100, 20,
-          -0.19999999999999996 },
-  { -7.0503266451702621e+38, 100, 20,
-          -0.099999999999999978 },
-  { 7.7727439836159581e+38, 100, 20,
-          0.0000000000000000 },
-  { -7.0503266451702213e+38, 100, 20,
-          0.10000000000000009 },
-  { 4.3966251307444218e+38, 100, 20,
-          0.19999999999999996 },
-  { 1.1474496891901873e+38, 100, 20,
-          0.30000000000000004 },
-  { -7.6120586043843511e+38, 100, 20,
-          0.39999999999999991 },
-  { 3.0750497039999469e+38, 100, 20,
-          0.50000000000000000 },
-  { 8.2680005574120424e+38, 100, 20,
-          0.60000000000000009 },
-  { 7.9022236853110024e+38, 100, 20,
-          0.69999999999999996 },
-  { -8.3963895116962035e+38, 100, 20,
-          0.80000000000000004 },
-  { 7.1604344878809460e+37, 100, 20,
-          0.89999999999999991 },
-  { 0.0000000000000000, 100, 20,
-          1.0000000000000000 },
+  { 0.0000000000000000, 100, 10, 
+         -1.0000000000000000, 0.0 },
+  { 2.5643395957658602e+17, 100, 10, 
+         -0.90000000000000002, 0.0 },
+  { 1.5778673545673485e+18, 100, 10, 
+         -0.80000000000000004, 0.0 },
+  { 4.4355048487496801e+18, 100, 10, 
+         -0.69999999999999996, 0.0 },
+  { -9.5936111659124288e+17, 100, 10, 
+         -0.59999999999999998, 0.0 },
+  { 4.2387123021963438e+18, 100, 10, 
+         -0.50000000000000000, 0.0 },
+  { 8.2370834618426767e+18, 100, 10, 
+         -0.39999999999999991, 0.0 },
+  { -4.9089358388051978e+18, 100, 10, 
+         -0.29999999999999993, 0.0 },
+  { -2.3468810358091274e+18, 100, 10, 
+         -0.19999999999999996, 0.0 },
+  { 6.8627855225034568e+18, 100, 10, 
+         -0.099999999999999978, 0.0 },
+  { -8.2494597181670380e+18, 100, 10, 
+         0.0000000000000000, 0.0 },
+  { 6.8627855225034056e+18, 100, 10, 
+         0.10000000000000009, 0.0 },
+  { -2.3468810358089518e+18, 100, 10, 
+         0.20000000000000018, 0.0 },
+  { -4.9089358388052941e+18, 100, 10, 
+         0.30000000000000004, 0.0 },
+  { 8.2370834618426112e+18, 100, 10, 
+         0.40000000000000013, 0.0 },
+  { 4.2387123021963438e+18, 100, 10, 
+         0.50000000000000000, 0.0 },
+  { -9.5936111659112640e+17, 100, 10, 
+         0.60000000000000009, 0.0 },
+  { 4.4355048487499668e+18, 100, 10, 
+         0.70000000000000018, 0.0 },
+  { 1.5778673545673485e+18, 100, 10, 
+         0.80000000000000004, 0.0 },
+  { 2.5643395957630058e+17, 100, 10, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 100, 10, 
+         1.0000000000000000, 0.0 },
 };
+const double toler033 = 2.5000000000000020e-13;
 
-// Test function for l=100, m=20.
-template <typename Tp>
-void test034()
+// Test data for l=100, m=20.
+// max(|f - f_GSL|): 3.9290089137475448e+24 at index 14
+// max(|f - f_GSL| / |f_GSL|): 5.1615589395022552e-15
+// mean(f - f_GSL): -5.0371909150609551e+23
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_assoc_legendre<double>
+data034[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data034)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data034[i].l), Tp(data034[i].m),
-                   Tp(data034[i].x));
-      const Tp f0 = data034[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-}
-
-// Test data for l=100, m=50.
-testcase_assoc_legendre<double> data035[] = {
-  { 0.0000000000000000, 100, 50,
-          -1.0000000000000000 },
-  { 9.3231278516893773e+96, 100, 50,
-          -0.90000000000000002 },
-  { -1.1029797977454331e+98, 100, 50,
-          -0.80000000000000004 },
-  { 1.8089333903465883e+97, 100, 50,
-          -0.69999999999999996 },
-  { 5.9364045925669389e+97, 100, 50,
-          -0.59999999999999998 },
-  { -8.2252620339727163e+97, 100, 50,
-          -0.50000000000000000 },
-  { 7.1431385093739848e+97, 100, 50,
-          -0.40000000000000002 },
-  { -3.3520602067479374e+97, 100, 50,
-          -0.30000000000000004 },
-  { -2.7791149588121386e+97, 100, 50,
-          -0.19999999999999996 },
-  { 9.0119338550180433e+97, 100, 50,
-          -0.099999999999999978 },
-  { -1.1712145031578381e+98, 100, 50,
-          0.0000000000000000 },
-  { 9.0119338550181176e+97, 100, 50,
-          0.10000000000000009 },
-  { -2.7791149588121386e+97, 100, 50,
-          0.19999999999999996 },
-  { -3.3520602067479374e+97, 100, 50,
-          0.30000000000000004 },
-  { 7.1431385093740728e+97, 100, 50,
-          0.39999999999999991 },
-  { -8.2252620339727163e+97, 100, 50,
-          0.50000000000000000 },
-  { 5.9364045925668061e+97, 100, 50,
-          0.60000000000000009 },
-  { 1.8089333903465883e+97, 100, 50,
-          0.69999999999999996 },
-  { -1.1029797977454331e+98, 100, 50,
-          0.80000000000000004 },
-  { 9.3231278516894892e+96, 100, 50,
-          0.89999999999999991 },
-  { 0.0000000000000000, 100, 50,
-          1.0000000000000000 },
+  { 0.0000000000000000, 100, 20, 
+         -1.0000000000000000, 0.0 },
+  { 7.1604344878780134e+37, 100, 20, 
+         -0.90000000000000002, 0.0 },
+  { -8.3963895116962231e+38, 100, 20, 
+         -0.80000000000000004, 0.0 },
+  { 7.9022236853110145e+38, 100, 20, 
+         -0.69999999999999996, 0.0 },
+  { 8.2680005574121013e+38, 100, 20, 
+         -0.59999999999999998, 0.0 },
+  { 3.0750497039999552e+38, 100, 20, 
+         -0.50000000000000000, 0.0 },
+  { -7.6120586043843556e+38, 100, 20, 
+         -0.39999999999999991, 0.0 },
+  { 1.1474496891900921e+38, 100, 20, 
+         -0.29999999999999993, 0.0 },
+  { 4.3966251307444241e+38, 100, 20, 
+         -0.19999999999999996, 0.0 },
+  { -7.0503266451702591e+38, 100, 20, 
+         -0.099999999999999978, 0.0 },
+  { 7.7727439836159581e+38, 100, 20, 
+         0.0000000000000000, 0.0 },
+  { -7.0503266451702213e+38, 100, 20, 
+         0.10000000000000009, 0.0 },
+  { 4.3966251307442783e+38, 100, 20, 
+         0.20000000000000018, 0.0 },
+  { 1.1474496891901797e+38, 100, 20, 
+         0.30000000000000004, 0.0 },
+  { -7.6120586043844176e+38, 100, 20, 
+         0.40000000000000013, 0.0 },
+  { 3.0750497039999552e+38, 100, 20, 
+         0.50000000000000000, 0.0 },
+  { 8.2680005574120394e+38, 100, 20, 
+         0.60000000000000009, 0.0 },
+  { 7.9022236853108422e+38, 100, 20, 
+         0.70000000000000018, 0.0 },
+  { -8.3963895116962231e+38, 100, 20, 
+         0.80000000000000004, 0.0 },
+  { 7.1604344878751847e+37, 100, 20, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 100, 20, 
+         1.0000000000000000, 0.0 },
 };
+const double toler034 = 5.0000000000000039e-13;
 
-// Test function for l=100, m=50.
-template <typename Tp>
-void test035()
+// Test data for l=100, m=50.
+// max(|f - f_GSL|): 6.8296953242310788e+83 at index 14
+// max(|f - f_GSL| / |f_GSL|): 2.0345950516284159e-14
+// mean(f - f_GSL): 7.0103750947133818e+82
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_assoc_legendre<double>
+data035[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data035)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data035[i].l), Tp(data035[i].m),
-                   Tp(data035[i].x));
-      const Tp f0 = data035[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
-
-// Test data for l=100, m=100.
-testcase_assoc_legendre<double> data036[] = {
-  { 0.0000000000000000, 100, 100,
-          -1.0000000000000000 },
-  { 5.7751792255758316e+150, 100, 100,
-          -0.90000000000000002 },
-  { 4.3552236041585515e+164, 100, 100,
-          -0.80000000000000004 },
-  { 1.5936546850595123e+172, 100, 100,
-          -0.69999999999999996 },
-  { 1.3579510590289176e+177, 100, 100,
-          -0.59999999999999998 },
-  { 3.7752749682889513e+180, 100, 100,
-          -0.50000000000000000 },
-  { 1.0910627330458913e+183, 100, 100,
-          -0.40000000000000002 },
-  { 5.9697347526822483e+184, 100, 100,
-          -0.30000000000000004 },
-  { 8.6585879147526714e+185, 100, 100,
-          -0.19999999999999996 },
-  { 4.0331571908057011e+186, 100, 100,
-          -0.099999999999999978 },
-  { 6.6663086700729543e+186, 100, 100,
-          0.0000000000000000 },
-  { 4.0331571908057011e+186, 100, 100,
-          0.10000000000000009 },
-  { 8.6585879147526714e+185, 100, 100,
-          0.19999999999999996 },
-  { 5.9697347526822483e+184, 100, 100,
-          0.30000000000000004 },
-  { 1.0910627330458913e+183, 100, 100,
-          0.39999999999999991 },
-  { 3.7752749682889513e+180, 100, 100,
-          0.50000000000000000 },
-  { 1.3579510590289000e+177, 100, 100,
-          0.60000000000000009 },
-  { 1.5936546850595123e+172, 100, 100,
-          0.69999999999999996 },
-  { 4.3552236041585515e+164, 100, 100,
-          0.80000000000000004 },
-  { 5.7751792255761289e+150, 100, 100,
-          0.89999999999999991 },
-  { 0.0000000000000000, 100, 100,
-          1.0000000000000000 },
+  { 0.0000000000000000, 100, 50, 
+         -1.0000000000000000, 0.0 },
+  { 9.3231278516893716e+96, 100, 50, 
+         -0.90000000000000002, 0.0 },
+  { -1.1029797977454281e+98, 100, 50, 
+         -0.80000000000000004, 0.0 },
+  { 1.8089333903465606e+97, 100, 50, 
+         -0.69999999999999996, 0.0 },
+  { 5.9364045925669405e+97, 100, 50, 
+         -0.59999999999999998, 0.0 },
+  { -8.2252620339727118e+97, 100, 50, 
+         -0.50000000000000000, 0.0 },
+  { 7.1431385093740728e+97, 100, 50, 
+         -0.39999999999999991, 0.0 },
+  { -3.3520602067479935e+97, 100, 50, 
+         -0.29999999999999993, 0.0 },
+  { -2.7791149588121382e+97, 100, 50, 
+         -0.19999999999999996, 0.0 },
+  { 9.0119338550180417e+97, 100, 50, 
+         -0.099999999999999978, 0.0 },
+  { -1.1712145031578381e+98, 100, 50, 
+         0.0000000000000000, 0.0 },
+  { 9.0119338550181207e+97, 100, 50, 
+         0.10000000000000009, 0.0 },
+  { -2.7791149588123644e+97, 100, 50, 
+         0.20000000000000018, 0.0 },
+  { -3.3520602067479344e+97, 100, 50, 
+         0.30000000000000004, 0.0 },
+  { 7.1431385093738816e+97, 100, 50, 
+         0.40000000000000013, 0.0 },
+  { -8.2252620339727118e+97, 100, 50, 
+         0.50000000000000000, 0.0 },
+  { 5.9364045925668024e+97, 100, 50, 
+         0.60000000000000009, 0.0 },
+  { 1.8089333903469005e+97, 100, 50, 
+         0.70000000000000018, 0.0 },
+  { -1.1029797977454281e+98, 100, 50, 
+         0.80000000000000004, 0.0 },
+  { 9.3231278516892938e+96, 100, 50, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 100, 50, 
+         1.0000000000000000, 0.0 },
 };
+const double toler035 = 2.5000000000000015e-12;
 
-// Test function for l=100, m=100.
-template <typename Tp>
-void test036()
+// Test data for l=100, m=100.
+// max(|f - f_GSL|): 1.9201920817492002e+172 at index 12
+// max(|f - f_GSL| / |f_GSL|): 2.3348104188683898e-14
+// mean(f - f_GSL): -4.0709851490379341e+170
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_assoc_legendre<double>
+data036[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data036)
-                         / sizeof(testcase_assoc_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::assoc_legendre(Tp(data036[i].l), Tp(data036[i].m),
-                   Tp(data036[i].x));
-      const Tp f0 = data036[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+  { 0.0000000000000000, 100, 100, 
+         -1.0000000000000000, 0.0 },
+  { 5.7751792255758316e+150, 100, 100, 
+         -0.90000000000000002, 0.0 },
+  { 4.3552236041585515e+164, 100, 100, 
+         -0.80000000000000004, 0.0 },
+  { 1.5936546850595123e+172, 100, 100, 
+         -0.69999999999999996, 0.0 },
+  { 1.3579510590289176e+177, 100, 100, 
+         -0.59999999999999998, 0.0 },
+  { 3.7752749682889513e+180, 100, 100, 
+         -0.50000000000000000, 0.0 },
+  { 1.0910627330458913e+183, 100, 100, 
+         -0.39999999999999991, 0.0 },
+  { 5.9697347526821064e+184, 100, 100, 
+         -0.29999999999999993, 0.0 },
+  { 8.6585879147526714e+185, 100, 100, 
+         -0.19999999999999996, 0.0 },
+  { 4.0331571908057011e+186, 100, 100, 
+         -0.099999999999999978, 0.0 },
+  { 6.6663086700729543e+186, 100, 100, 
+         0.0000000000000000, 0.0 },
+  { 4.0331571908057011e+186, 100, 100, 
+         0.10000000000000009, 0.0 },
+  { 8.6585879147526714e+185, 100, 100, 
+         0.20000000000000018, 0.0 },
+  { 5.9697347526822483e+184, 100, 100, 
+         0.30000000000000004, 0.0 },
+  { 1.0910627330458797e+183, 100, 100, 
+         0.40000000000000013, 0.0 },
+  { 3.7752749682889513e+180, 100, 100, 
+         0.50000000000000000, 0.0 },
+  { 1.3579510590289000e+177, 100, 100, 
+         0.60000000000000009, 0.0 },
+  { 1.5936546850594382e+172, 100, 100, 
+         0.70000000000000018, 0.0 },
+  { 4.3552236041585515e+164, 100, 100, 
+         0.80000000000000004, 0.0 },
+  { 5.7751792255756128e+150, 100, 100, 
+         0.90000000000000013, 0.0 },
+  { 0.0000000000000000, 100, 100, 
+         1.0000000000000000, 0.0 },
+};
+const double toler036 = 2.5000000000000015e-12;
+
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_assoc_legendre<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+        {
+       const Ret f = std::tr1::assoc_legendre(data[i].l, data[i].m,
+                    data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
+int
+main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
-  test015<double>();
-  test016<double>();
-  test017<double>();
-  test018<double>();
-  test019<double>();
-  test020<double>();
-  test021<double>();
-  test022<double>();
-  test023<double>();
-  test024<double>();
-  test025<double>();
-  test026<double>();
-  test027<double>();
-  test028<double>();
-  test029<double>();
-  test030<double>();
-  test031<double>();
-  test032<double>();
-  test033<double>();
-  test034<double>();
-  test035<double>();
-  test036<double>();
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
+  test(data016, toler016);
+  test(data017, toler017);
+  test(data018, toler018);
+  test(data019, toler019);
+  test(data020, toler020);
+  test(data021, toler021);
+  test(data022, toler022);
+  test(data023, toler023);
+  test(data024, toler024);
+  test(data025, toler025);
+  test(data026, toler026);
+  test(data027, toler027);
+  test(data028, toler028);
+  test(data029, toler029);
+  test(data030, toler030);
+  test(data031, toler031);
+  test(data032, toler032);
+  test(data033, toler033);
+  test(data034, toler034);
+  test(data035, toler035);
+  test(data036, toler036);
   return 0;
 }
index 65dc2cf..af22a79 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  beta
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for x=10.000000000000000.
-testcase_beta<double> data001[] = {
-  { 1.0825088224469029e-06, 10.000000000000000, 10.000000000000000 },
-  { 4.9925087406346778e-09, 10.000000000000000, 20.000000000000000 },
-  { 1.5729567312509485e-10, 10.000000000000000, 30.000000000000000 },
-  { 1.2168673582561288e-11, 10.000000000000000, 40.000000000000000 },
-  { 1.5916380099863291e-12, 10.000000000000000, 50.000000000000000 },
-  { 2.9408957938463963e-13, 10.000000000000000, 60.000000000000000 },
-  { 6.9411637980691676e-14, 10.000000000000000, 70.000000000000000 },
-  { 1.9665612972502651e-14, 10.000000000000000, 80.000000000000000 },
-  { 6.4187824828154399e-15, 10.000000000000000, 90.000000000000000 },
-  { 2.3455339739604842e-15, 10.000000000000000, 100.00000000000000 },
-};
-
-// Test function for x=10.000000000000000.
-template <typename Tp>
-void test001()
+// max(|f - f_GSL|): 3.5542916945637908e-26 at index 4
+// max(|f - f_GSL| / |f_GSL|): 2.2331030499795109e-14
+// mean(f - f_GSL): -1.0876419730734700e-27
+// variance(f - f_GSL): 1.4090082527689930e-55
+// stddev(f - f_GSL): 3.7536758687571747e-28
+const testcase_beta<double>
+data001[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_beta<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::beta(Tp(data001[i].x), Tp(data001[i].y));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
-}
-
-// Test data for x=20.000000000000000.
-testcase_beta<double> data002[] = {
-  { 4.9925087406346778e-09, 20.000000000000000, 10.000000000000000 },
-  { 7.2544445519248436e-13, 20.000000000000000, 20.000000000000000 },
-  { 1.7681885473062028e-15, 20.000000000000000, 30.000000000000000 },
-  { 1.7891885039182335e-17, 20.000000000000000, 40.000000000000000 },
-  { 4.3240677875623635e-19, 20.000000000000000, 50.000000000000000 },
-  { 1.8857342309689050e-20, 20.000000000000000, 60.000000000000000 },
-  { 1.2609804003539998e-21, 20.000000000000000, 70.000000000000000 },
-  { 1.1660809542079041e-22, 20.000000000000000, 80.000000000000000 },
-  { 1.3907944279729071e-23, 20.000000000000000, 90.000000000000000 },
-  { 2.0365059099917614e-24, 20.000000000000000, 100.00000000000000 },
+  { 1.0825088224469029e-06, 10.000000000000000, 10.000000000000000, 0.0 },
+  { 4.9925087406346778e-09, 10.000000000000000, 20.000000000000000, 0.0 },
+  { 1.5729567312509485e-10, 10.000000000000000, 30.000000000000000, 0.0 },
+  { 1.2168673582561288e-11, 10.000000000000000, 40.000000000000000, 0.0 },
+  { 1.5916380099863291e-12, 10.000000000000000, 50.000000000000000, 0.0 },
+  { 2.9408957938463963e-13, 10.000000000000000, 60.000000000000000, 0.0 },
+  { 6.9411637980691676e-14, 10.000000000000000, 70.000000000000000, 0.0 },
+  { 1.9665612972502651e-14, 10.000000000000000, 80.000000000000000, 0.0 },
+  { 6.4187824828154399e-15, 10.000000000000000, 90.000000000000000, 0.0 },
+  { 2.3455339739604842e-15, 10.000000000000000, 100.00000000000000, 0.0 },
 };
+const double toler001 = 2.5000000000000015e-12;
 
-// Test function for x=20.000000000000000.
-template <typename Tp>
-void test002()
+// Test data for x=20.000000000000000.
+// max(|f - f_GSL|): 1.9721522630525295e-31 at index 2
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 1.9831607786682398e-32
+// variance(f - f_GSL): 4.8554947092912269e-65
+// stddev(f - f_GSL): 6.9681379932455613e-33
+const testcase_beta<double>
+data002[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data002)
-                         / sizeof(testcase_beta<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::beta(Tp(data002[i].x), Tp(data002[i].y));
-      const Tp f0 = data002[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for x=30.000000000000000.
-testcase_beta<double> data003[] = {
-  { 1.5729567312509485e-10, 30.000000000000000, 10.000000000000000 },
-  { 1.7681885473062028e-15, 30.000000000000000, 20.000000000000000 },
-  { 5.6370779640482451e-19, 30.000000000000000, 30.000000000000000 },
-  { 1.0539424603796547e-21, 30.000000000000000, 40.000000000000000 },
-  { 6.0118197777273836e-24, 30.000000000000000, 50.000000000000000 },
-  { 7.4279528553260165e-26, 30.000000000000000, 60.000000000000000 },
-  { 1.6212207780604767e-27, 30.000000000000000, 70.000000000000000 },
-  { 5.4783729715317616e-29, 30.000000000000000, 80.000000000000000 },
-  { 2.6183005659681346e-30, 30.000000000000000, 90.000000000000000 },
-  { 1.6587948222122229e-31, 30.000000000000000, 100.00000000000000 },
+  { 4.9925087406346778e-09, 20.000000000000000, 10.000000000000000, 0.0 },
+  { 7.2544445519248436e-13, 20.000000000000000, 20.000000000000000, 0.0 },
+  { 1.7681885473062028e-15, 20.000000000000000, 30.000000000000000, 0.0 },
+  { 1.7891885039182335e-17, 20.000000000000000, 40.000000000000000, 0.0 },
+  { 4.3240677875623635e-19, 20.000000000000000, 50.000000000000000, 0.0 },
+  { 1.8857342309689053e-20, 20.000000000000000, 60.000000000000000, 0.0 },
+  { 1.2609804003539998e-21, 20.000000000000000, 70.000000000000000, 0.0 },
+  { 1.1660809542079041e-22, 20.000000000000000, 80.000000000000000, 0.0 },
+  { 1.3907944279729071e-23, 20.000000000000000, 90.000000000000000, 0.0 },
+  { 2.0365059099917614e-24, 20.000000000000000, 100.00000000000000, 0.0 },
 };
+const double toler002 = 2.5000000000000020e-13;
 
-// Test function for x=30.000000000000000.
-template <typename Tp>
-void test003()
+// Test data for x=30.000000000000000.
+// max(|f - f_GSL|): 2.5849394142282115e-26 at index 0
+// max(|f - f_GSL| / |f_GSL|): 1.6433633315345226e-16
+// mean(f - f_GSL): 2.5849591357601703e-27
+// variance(f - f_GSL): 8.2493996710493413e-55
+// stddev(f - f_GSL): 9.0826205860694966e-28
+const testcase_beta<double>
+data003[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data003)
-                         / sizeof(testcase_beta<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::beta(Tp(data003[i].x), Tp(data003[i].y));
-      const Tp f0 = data003[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for x=40.000000000000000.
-testcase_beta<double> data004[] = {
-  { 1.2168673582561288e-11, 40.000000000000000, 10.000000000000000 },
-  { 1.7891885039182335e-17, 40.000000000000000, 20.000000000000000 },
-  { 1.0539424603796547e-21, 40.000000000000000, 30.000000000000000 },
-  { 4.6508509140090659e-25, 40.000000000000000, 40.000000000000000 },
-  { 7.5161712118557719e-28, 40.000000000000000, 50.000000000000000 },
-  { 3.0311331979886071e-30, 40.000000000000000, 60.000000000000000 },
-  { 2.4175035070466313e-32, 40.000000000000000, 70.000000000000000 },
-  { 3.2734839142758369e-34, 40.000000000000000, 80.000000000000000 },
-  { 6.7690629601315579e-36, 40.000000000000000, 90.000000000000000 },
-  { 1.9797337118812366e-37, 40.000000000000000, 100.00000000000000 },
+  { 1.5729567312509485e-10, 30.000000000000000, 10.000000000000000, 0.0 },
+  { 1.7681885473062028e-15, 30.000000000000000, 20.000000000000000, 0.0 },
+  { 5.6370779640482451e-19, 30.000000000000000, 30.000000000000000, 0.0 },
+  { 1.0539424603796547e-21, 30.000000000000000, 40.000000000000000, 0.0 },
+  { 6.0118197777273843e-24, 30.000000000000000, 50.000000000000000, 0.0 },
+  { 7.4279528553260153e-26, 30.000000000000000, 60.000000000000000, 0.0 },
+  { 1.6212207780604767e-27, 30.000000000000000, 70.000000000000000, 0.0 },
+  { 5.4783729715317616e-29, 30.000000000000000, 80.000000000000000, 0.0 },
+  { 2.6183005659681346e-30, 30.000000000000000, 90.000000000000000, 0.0 },
+  { 1.6587948222122229e-31, 30.000000000000000, 100.00000000000000, 0.0 },
 };
+const double toler003 = 2.5000000000000020e-13;
 
-// Test function for x=40.000000000000000.
-template <typename Tp>
-void test004()
+// Test data for x=40.000000000000000.
+// max(|f - f_GSL|): 3.9012149246802907e-41 at index 4
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): -3.9072897597887440e-42
+// variance(f - f_GSL): 1.8848041017931125e-84
+// stddev(f - f_GSL): 1.3728816780018271e-42
+const testcase_beta<double>
+data004[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data004)
-                         / sizeof(testcase_beta<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::beta(Tp(data004[i].x), Tp(data004[i].y));
-      const Tp f0 = data004[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-}
-
-// Test data for x=50.000000000000000.
-testcase_beta<double> data005[] = {
-  { 1.5916380099863291e-12, 50.000000000000000, 10.000000000000000 },
-  { 4.3240677875623635e-19, 50.000000000000000, 20.000000000000000 },
-  { 6.0118197777273836e-24, 50.000000000000000, 30.000000000000000 },
-  { 7.5161712118557719e-28, 50.000000000000000, 40.000000000000000 },
-  { 3.9646612085674138e-31, 50.000000000000000, 50.000000000000000 },
-  { 5.8425643906418403e-34, 50.000000000000000, 60.000000000000000 },
-  { 1.8672362180783552e-36, 50.000000000000000, 70.000000000000000 },
-  { 1.0939382296458962e-38, 50.000000000000000, 80.000000000000000 },
-  { 1.0442781609881063e-40, 50.000000000000000, 90.000000000000000 },
-  { 1.4904121110954370e-42, 50.000000000000000, 100.00000000000000 },
+  { 1.2168673582561288e-11, 40.000000000000000, 10.000000000000000, 0.0 },
+  { 1.7891885039182335e-17, 40.000000000000000, 20.000000000000000, 0.0 },
+  { 1.0539424603796547e-21, 40.000000000000000, 30.000000000000000, 0.0 },
+  { 4.6508509140090659e-25, 40.000000000000000, 40.000000000000000, 0.0 },
+  { 7.5161712118557728e-28, 40.000000000000000, 50.000000000000000, 0.0 },
+  { 3.0311331979886071e-30, 40.000000000000000, 60.000000000000000, 0.0 },
+  { 2.4175035070466313e-32, 40.000000000000000, 70.000000000000000, 0.0 },
+  { 3.2734839142758369e-34, 40.000000000000000, 80.000000000000000, 0.0 },
+  { 6.7690629601315579e-36, 40.000000000000000, 90.000000000000000, 0.0 },
+  { 1.9797337118810115e-37, 40.000000000000000, 100.00000000000000, 0.0 },
 };
+const double toler004 = 2.5000000000000020e-13;
 
-// Test function for x=50.000000000000000.
-template <typename Tp>
-void test005()
+// Test data for x=50.000000000000000.
+// max(|f - f_GSL|): 3.5542916945637908e-26 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.2331030499795109e-14
+// mean(f - f_GSL): -3.5542916415910235e-27
+// variance(f - f_GSL): 1.5596282806770138e-54
+// stddev(f - f_GSL): 1.2488507839918322e-27
+const testcase_beta<double>
+data005[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data005)
-                         / sizeof(testcase_beta<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::beta(Tp(data005[i].x), Tp(data005[i].y));
-      const Tp f0 = data005[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for x=60.000000000000000.
-testcase_beta<double> data006[] = {
-  { 2.9408957938463963e-13, 60.000000000000000, 10.000000000000000 },
-  { 1.8857342309689050e-20, 60.000000000000000, 20.000000000000000 },
-  { 7.4279528553260165e-26, 60.000000000000000, 30.000000000000000 },
-  { 3.0311331979886071e-30, 60.000000000000000, 40.000000000000000 },
-  { 5.8425643906418403e-34, 60.000000000000000, 50.000000000000000 },
-  { 3.4501231469782229e-37, 60.000000000000000, 60.000000000000000 },
-  { 4.7706855386086599e-40, 60.000000000000000, 70.000000000000000 },
-  { 1.2902663809722593e-42, 60.000000000000000, 80.000000000000000 },
-  { 6.0105571058570508e-45, 60.000000000000000, 90.000000000000000 },
-  { 4.3922898898347209e-47, 60.000000000000000, 100.00000000000000 },
+  { 1.5916380099863291e-12, 50.000000000000000, 10.000000000000000, 0.0 },
+  { 4.3240677875623635e-19, 50.000000000000000, 20.000000000000000, 0.0 },
+  { 6.0118197777273843e-24, 50.000000000000000, 30.000000000000000, 0.0 },
+  { 7.5161712118557728e-28, 50.000000000000000, 40.000000000000000, 0.0 },
+  { 3.9646612085674138e-31, 50.000000000000000, 50.000000000000000, 0.0 },
+  { 5.8425643906418403e-34, 50.000000000000000, 60.000000000000000, 0.0 },
+  { 1.8672362180783552e-36, 50.000000000000000, 70.000000000000000, 0.0 },
+  { 1.0939382296458963e-38, 50.000000000000000, 80.000000000000000, 0.0 },
+  { 1.0442781609879874e-40, 50.000000000000000, 90.000000000000000, 0.0 },
+  { 1.4904121110954370e-42, 50.000000000000000, 100.00000000000000, 0.0 },
 };
+const double toler005 = 2.5000000000000015e-12;
 
-// Test function for x=60.000000000000000.
-template <typename Tp>
-void test006()
+// Test data for x=60.000000000000000.
+// max(|f - f_GSL|): 9.0876776281460560e-28 at index 0
+// max(|f - f_GSL| / |f_GSL|): 3.0901052826017635e-15
+// mean(f - f_GSL): -9.0876709777057221e-29
+// variance(f - f_GSL): 1.0195773308522824e-57
+// stddev(f - f_GSL): 3.1930821017510377e-29
+const testcase_beta<double>
+data006[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data006)
-                         / sizeof(testcase_beta<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::beta(Tp(data006[i].x), Tp(data006[i].y));
-      const Tp f0 = data006[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
-
-// Test data for x=70.000000000000000.
-testcase_beta<double> data007[] = {
-  { 6.9411637980691676e-14, 70.000000000000000, 10.000000000000000 },
-  { 1.2609804003539998e-21, 70.000000000000000, 20.000000000000000 },
-  { 1.6212207780604767e-27, 70.000000000000000, 30.000000000000000 },
-  { 2.4175035070466313e-32, 70.000000000000000, 40.000000000000000 },
-  { 1.8672362180783552e-36, 70.000000000000000, 50.000000000000000 },
-  { 4.7706855386086599e-40, 70.000000000000000, 60.000000000000000 },
-  { 3.0453137143486369e-43, 70.000000000000000, 70.000000000000000 },
-  { 4.0192274082013779e-46, 70.000000000000000, 80.000000000000000 },
-  { 9.5865870063501807e-49, 70.000000000000000, 90.000000000000000 },
-  { 3.7409127305819802e-51, 70.000000000000000, 100.00000000000000 },
+  { 2.9408957938463963e-13, 60.000000000000000, 10.000000000000000, 0.0 },
+  { 1.8857342309689053e-20, 60.000000000000000, 20.000000000000000, 0.0 },
+  { 7.4279528553260153e-26, 60.000000000000000, 30.000000000000000, 0.0 },
+  { 3.0311331979886071e-30, 60.000000000000000, 40.000000000000000, 0.0 },
+  { 5.8425643906418403e-34, 60.000000000000000, 50.000000000000000, 0.0 },
+  { 3.4501231469782229e-37, 60.000000000000000, 60.000000000000000, 0.0 },
+  { 4.7706855386086599e-40, 60.000000000000000, 70.000000000000000, 0.0 },
+  { 1.2902663809721126e-42, 60.000000000000000, 80.000000000000000, 0.0 },
+  { 6.0105571058570508e-45, 60.000000000000000, 90.000000000000000, 0.0 },
+  { 4.3922898898347209e-47, 60.000000000000000, 100.00000000000000, 0.0 },
 };
+const double toler006 = 2.5000000000000020e-13;
 
-// Test function for x=70.000000000000000.
-template <typename Tp>
-void test007()
+// Test data for x=70.000000000000000.
+// max(|f - f_GSL|): 1.7670484276950664e-28 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.5457523825998871e-15
+// mean(f - f_GSL): -1.7670492778129898e-29
+// variance(f - f_GSL): 3.8548927780486536e-59
+// stddev(f - f_GSL): 6.2087782840496516e-30
+const testcase_beta<double>
+data007[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data007)
-                         / sizeof(testcase_beta<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::beta(Tp(data007[i].x), Tp(data007[i].y));
-      const Tp f0 = data007[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
-
-// Test data for x=80.000000000000000.
-testcase_beta<double> data008[] = {
-  { 1.9665612972502651e-14, 80.000000000000000, 10.000000000000000 },
-  { 1.1660809542079041e-22, 80.000000000000000, 20.000000000000000 },
-  { 5.4783729715317616e-29, 80.000000000000000, 30.000000000000000 },
-  { 3.2734839142758369e-34, 80.000000000000000, 40.000000000000000 },
-  { 1.0939382296458962e-38, 80.000000000000000, 50.000000000000000 },
-  { 1.2902663809722593e-42, 80.000000000000000, 60.000000000000000 },
-  { 4.0192274082013779e-46, 80.000000000000000, 70.000000000000000 },
-  { 2.7160590828669411e-49, 80.000000000000000, 80.000000000000000 },
-  { 3.4593773902125368e-52, 80.000000000000000, 90.000000000000000 },
-  { 7.4807039968503468e-55, 80.000000000000000, 100.00000000000000 },
+  { 6.9411637980691676e-14, 70.000000000000000, 10.000000000000000, 0.0 },
+  { 1.2609804003539998e-21, 70.000000000000000, 20.000000000000000, 0.0 },
+  { 1.6212207780604767e-27, 70.000000000000000, 30.000000000000000, 0.0 },
+  { 2.4175035070466313e-32, 70.000000000000000, 40.000000000000000, 0.0 },
+  { 1.8672362180783552e-36, 70.000000000000000, 50.000000000000000, 0.0 },
+  { 4.7706855386086599e-40, 70.000000000000000, 60.000000000000000, 0.0 },
+  { 3.0453137143482908e-43, 70.000000000000000, 70.000000000000000, 0.0 },
+  { 4.0192274082013779e-46, 70.000000000000000, 80.000000000000000, 0.0 },
+  { 9.5865870063501807e-49, 70.000000000000000, 90.000000000000000, 0.0 },
+  { 3.7409127305819802e-51, 70.000000000000000, 100.00000000000000, 0.0 },
 };
+const double toler007 = 2.5000000000000020e-13;
 
-// Test function for x=80.000000000000000.
-template <typename Tp>
-void test008()
+// Test data for x=80.000000000000000.
+// max(|f - f_GSL|): 5.3642541555028803e-29 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.7277330043072765e-15
+// mean(f - f_GSL): -5.3642549571904701e-30
+// variance(f - f_GSL): 3.5524976846595722e-60
+// stddev(f - f_GSL): 1.8848070682856566e-30
+const testcase_beta<double>
+data008[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data008)
-                         / sizeof(testcase_beta<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::beta(Tp(data008[i].x), Tp(data008[i].y));
-      const Tp f0 = data008[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
-}
-
-// Test data for x=90.000000000000000.
-testcase_beta<double> data009[] = {
-  { 6.4187824828154399e-15, 90.000000000000000, 10.000000000000000 },
-  { 1.3907944279729071e-23, 90.000000000000000, 20.000000000000000 },
-  { 2.6183005659681346e-30, 90.000000000000000, 30.000000000000000 },
-  { 6.7690629601315579e-36, 90.000000000000000, 40.000000000000000 },
-  { 1.0442781609881063e-40, 90.000000000000000, 50.000000000000000 },
-  { 6.0105571058570508e-45, 90.000000000000000, 60.000000000000000 },
-  { 9.5865870063501807e-49, 90.000000000000000, 70.000000000000000 },
-  { 3.4593773902125368e-52, 90.000000000000000, 80.000000000000000 },
-  { 2.4416737907558032e-55, 90.000000000000000, 90.000000000000000 },
-  { 3.0238531916564246e-58, 90.000000000000000, 100.00000000000000 },
+  { 1.9665612972502651e-14, 80.000000000000000, 10.000000000000000, 0.0 },
+  { 1.1660809542079041e-22, 80.000000000000000, 20.000000000000000, 0.0 },
+  { 5.4783729715317616e-29, 80.000000000000000, 30.000000000000000, 0.0 },
+  { 3.2734839142758369e-34, 80.000000000000000, 40.000000000000000, 0.0 },
+  { 1.0939382296458963e-38, 80.000000000000000, 50.000000000000000, 0.0 },
+  { 1.2902663809721126e-42, 80.000000000000000, 60.000000000000000, 0.0 },
+  { 4.0192274082013779e-46, 80.000000000000000, 70.000000000000000, 0.0 },
+  { 2.7160590828669411e-49, 80.000000000000000, 80.000000000000000, 0.0 },
+  { 3.4593773902125368e-52, 80.000000000000000, 90.000000000000000, 0.0 },
+  { 7.4807039968503468e-55, 80.000000000000000, 100.00000000000000, 0.0 },
 };
+const double toler008 = 2.5000000000000020e-13;
 
-// Test function for x=90.000000000000000.
-template <typename Tp>
-void test009()
+// Test data for x=90.000000000000000.
+// max(|f - f_GSL|): 2.4454688061851366e-29 at index 0
+// max(|f - f_GSL| / |f_GSL|): 3.8098639621021905e-15
+// mean(f - f_GSL): -2.4454688799474037e-30
+// variance(f - f_GSL): 7.3831086948039631e-61
+// stddev(f - f_GSL): 8.5925017863274033e-31
+const testcase_beta<double>
+data009[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data009)
-                         / sizeof(testcase_beta<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::beta(Tp(data009[i].x), Tp(data009[i].y));
-      const Tp f0 = data009[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+  { 6.4187824828154399e-15, 90.000000000000000, 10.000000000000000, 0.0 },
+  { 1.3907944279729071e-23, 90.000000000000000, 20.000000000000000, 0.0 },
+  { 2.6183005659681346e-30, 90.000000000000000, 30.000000000000000, 0.0 },
+  { 6.7690629601315579e-36, 90.000000000000000, 40.000000000000000, 0.0 },
+  { 1.0442781609879874e-40, 90.000000000000000, 50.000000000000000, 0.0 },
+  { 6.0105571058570508e-45, 90.000000000000000, 60.000000000000000, 0.0 },
+  { 9.5865870063501807e-49, 90.000000000000000, 70.000000000000000, 0.0 },
+  { 3.4593773902125368e-52, 90.000000000000000, 80.000000000000000, 0.0 },
+  { 2.4416737907558036e-55, 90.000000000000000, 90.000000000000000, 0.0 },
+  { 3.0238531916564250e-58, 90.000000000000000, 100.00000000000000, 0.0 },
+};
+const double toler009 = 2.5000000000000020e-13;
 
 // Test data for x=100.00000000000000.
-testcase_beta<double> data010[] = {
-  { 2.3455339739604842e-15, 100.00000000000000, 10.000000000000000 },
-  { 2.0365059099917614e-24, 100.00000000000000, 20.000000000000000 },
-  { 1.6587948222122229e-31, 100.00000000000000, 30.000000000000000 },
-  { 1.9797337118812366e-37, 100.00000000000000, 40.000000000000000 },
-  { 1.4904121110954370e-42, 100.00000000000000, 50.000000000000000 },
-  { 4.3922898898347209e-47, 100.00000000000000, 60.000000000000000 },
-  { 3.7409127305819802e-51, 100.00000000000000, 70.000000000000000 },
-  { 7.4807039968503468e-55, 100.00000000000000, 80.000000000000000 },
-  { 3.0238531916564246e-58, 100.00000000000000, 90.000000000000000 },
-  { 2.2087606931991853e-61, 100.00000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 1.9327092177914789e-29 at index 0
+// max(|f - f_GSL| / |f_GSL|): 8.2399540541638715e-15
+// mean(f - f_GSL): -1.9327092238526215e-30
+// variance(f - f_GSL): 4.6115616592160521e-61
+// stddev(f - f_GSL): 6.7908480024339023e-31
+const testcase_beta<double>
+data010[10] =
+{
+  { 2.3455339739604842e-15, 100.00000000000000, 10.000000000000000, 0.0 },
+  { 2.0365059099917614e-24, 100.00000000000000, 20.000000000000000, 0.0 },
+  { 1.6587948222122229e-31, 100.00000000000000, 30.000000000000000, 0.0 },
+  { 1.9797337118810115e-37, 100.00000000000000, 40.000000000000000, 0.0 },
+  { 1.4904121110954370e-42, 100.00000000000000, 50.000000000000000, 0.0 },
+  { 4.3922898898347209e-47, 100.00000000000000, 60.000000000000000, 0.0 },
+  { 3.7409127305819802e-51, 100.00000000000000, 70.000000000000000, 0.0 },
+  { 7.4807039968503468e-55, 100.00000000000000, 80.000000000000000, 0.0 },
+  { 3.0238531916564250e-58, 100.00000000000000, 90.000000000000000, 0.0 },
+  { 2.2087606931991849e-61, 100.00000000000000, 100.00000000000000, 0.0 },
 };
+const double toler010 = 5.0000000000000039e-13;
 
-// Test function for x=100.00000000000000.
-template <typename Tp>
-void test010()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data010)
-                         / sizeof(testcase_beta<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::beta(Tp(data010[i].x), Tp(data010[i].y));
-      const Tp f0 = data010[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
-}
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_beta<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+      {
+       const Ret f = std::tr1::beta(data[i].x, data[i].y);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
+int
+main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
   return 0;
 }
index 1f7d1db..56ceb86 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 
 //  comp_ellint_1
 
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data.
-testcase_comp_ellint_1<double> data001[] = {
-  { 2.2805491384227703, -0.90000000000000002 },
-  { 1.9953027776647296, -0.80000000000000004 },
-  { 1.8456939983747236, -0.69999999999999996 },
-  { 1.7507538029157526, -0.59999999999999998 },
-  { 1.6857503548125963, -0.50000000000000000 },
-  { 1.6399998658645112, -0.40000000000000002 },
-  { 1.6080486199305126, -0.30000000000000004 },
-  { 1.5868678474541664, -0.19999999999999996 },
-  { 1.5747455615173562, -0.099999999999999978 },
-  { 1.5707963267948966, 0.0000000000000000 },
-  { 1.5747455615173562, 0.10000000000000009 },
-  { 1.5868678474541664, 0.19999999999999996 },
-  { 1.6080486199305126, 0.30000000000000004 },
-  { 1.6399998658645112, 0.39999999999999991 },
-  { 1.6857503548125963, 0.50000000000000000 },
-  { 1.7507538029157526, 0.60000000000000009 },
-  { 1.8456939983747236, 0.69999999999999996 },
-  { 1.9953027776647296, 0.80000000000000004 },
-  { 2.2805491384227699, 0.89999999999999991 },
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 18
+// max(|f - f_Boost| / |f_Boost|): 1.9472906870017937e-16
+// mean(f - f_Boost): -1.1686558153949016e-17
+// variance(f - f_Boost): 1.2181788466954587e-32
+// stddev(f - f_Boost): 1.1037113964689586e-16
+const testcase_comp_ellint_1<double>
+data001[19] =
+{
+  { 2.2805491384227703, -0.90000000000000002, 0.0 },
+  { 1.9953027776647294, -0.80000000000000004, 0.0 },
+  { 1.8456939983747234, -0.69999999999999996, 0.0 },
+  { 1.7507538029157526, -0.59999999999999998, 0.0 },
+  { 1.6857503548125961, -0.50000000000000000, 0.0 },
+  { 1.6399998658645112, -0.39999999999999991, 0.0 },
+  { 1.6080486199305128, -0.29999999999999993, 0.0 },
+  { 1.5868678474541662, -0.19999999999999996, 0.0 },
+  { 1.5747455615173560, -0.099999999999999978, 0.0 },
+  { 1.5707963267948966, 0.0000000000000000, 0.0 },
+  { 1.5747455615173560, 0.10000000000000009, 0.0 },
+  { 1.5868678474541662, 0.20000000000000018, 0.0 },
+  { 1.6080486199305128, 0.30000000000000004, 0.0 },
+  { 1.6399998658645112, 0.40000000000000013, 0.0 },
+  { 1.6857503548125961, 0.50000000000000000, 0.0 },
+  { 1.7507538029157526, 0.60000000000000009, 0.0 },
+  { 1.8456939983747238, 0.70000000000000018, 0.0 },
+  { 1.9953027776647294, 0.80000000000000004, 0.0 },
+  { 2.2805491384227707, 0.90000000000000013, 0.0 },
 };
+const double toler001 = 2.5000000000000020e-13;
 
-// Test function.
-template <typename Tp>
-void test001()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_comp_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_1(Tp(data001[i].k));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_comp_ellint_1<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+      {
+       const Ret f = std::tr1::comp_ellint_1(data[i].k);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
+int
+main()
 {
-  test001<double>();
+  test(data001, toler001);
   return 0;
 }
index dda9285..36c1f75 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 
 //  comp_ellint_2
 
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data.
-testcase_comp_ellint_2<double> data001[] = {
-  { 1.1716970527816140, -0.90000000000000002 },
-  { 1.2763499431699066, -0.80000000000000004 },
-  { 1.3556611355719557, -0.69999999999999996 },
-  { 1.4180833944487243, -0.59999999999999998 },
-  { 1.4674622093394274, -0.50000000000000000 },
-  { 1.5059416123600402, -0.40000000000000002 },
-  { 1.5348334649232489, -0.30000000000000004 },
-  { 1.5549685462425296, -0.19999999999999996 },
-  { 1.5668619420216685, -0.099999999999999978 },
-  { 1.5707963267948966, 0.0000000000000000 },
-  { 1.5668619420216685, 0.10000000000000009 },
-  { 1.5549685462425296, 0.19999999999999996 },
-  { 1.5348334649232489, 0.30000000000000004 },
-  { 1.5059416123600404, 0.39999999999999991 },
-  { 1.4674622093394274, 0.50000000000000000 },
-  { 1.4180833944487241, 0.60000000000000009 },
-  { 1.3556611355719557, 0.69999999999999996 },
-  { 1.2763499431699066, 0.80000000000000004 },
-  { 1.1716970527816142, 0.89999999999999991 },
+// max(|f - f_Boost|): 1.1102230246251565e-15 at index 13
+// max(|f - f_Boost| / |f_Boost|): 7.3722846590663481e-16
+// mean(f - f_Boost): 1.7529837230923525e-16
+// variance(f - f_Boost): 1.8020397140465364e-33
+// stddev(f - f_Boost): 4.2450438325729176e-17
+const testcase_comp_ellint_2<double>
+data001[19] =
+{
+  { 1.1716970527816142, -0.90000000000000002, 0.0 },
+  { 1.2763499431699064, -0.80000000000000004, 0.0 },
+  { 1.3556611355719554, -0.69999999999999996, 0.0 },
+  { 1.4180833944487243, -0.59999999999999998, 0.0 },
+  { 1.4674622093394272, -0.50000000000000000, 0.0 },
+  { 1.5059416123600404, -0.39999999999999991, 0.0 },
+  { 1.5348334649232491, -0.29999999999999993, 0.0 },
+  { 1.5549685462425293, -0.19999999999999996, 0.0 },
+  { 1.5668619420216683, -0.099999999999999978, 0.0 },
+  { 1.5707963267948966, 0.0000000000000000, 0.0 },
+  { 1.5668619420216683, 0.10000000000000009, 0.0 },
+  { 1.5549685462425293, 0.20000000000000018, 0.0 },
+  { 1.5348334649232491, 0.30000000000000004, 0.0 },
+  { 1.5059416123600402, 0.40000000000000013, 0.0 },
+  { 1.4674622093394272, 0.50000000000000000, 0.0 },
+  { 1.4180833944487241, 0.60000000000000009, 0.0 },
+  { 1.3556611355719554, 0.70000000000000018, 0.0 },
+  { 1.2763499431699064, 0.80000000000000004, 0.0 },
+  { 1.1716970527816140, 0.90000000000000013, 0.0 },
 };
+const double toler001 = 2.5000000000000020e-13;
 
-// Test function.
-template <typename Tp>
-void test001()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_comp_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_2(Tp(data001[i].k));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_comp_ellint_2<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+      {
+       const Ret f = std::tr1::comp_ellint_2(data[i].k);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
+int
+main()
 {
-  test001<double>();
+  test(data001, toler001);
   return 0;
 }
index 0c187d7..4c93370 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  comp_ellint_3
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for k=-0.90000000000000002.
-testcase_comp_ellint_3<double> data001[] = {
-  { 2.2805491384227703, -0.90000000000000002, 0.0000000000000000 },
-  { 2.1537868513875287, -0.90000000000000002, 0.10000000000000001 },
-  { 2.0443194576468890, -0.90000000000000002, 0.20000000000000001 },
-  { 1.9486280260314426, -0.90000000000000002, 0.29999999999999999 },
-  { 1.8641114227238349, -0.90000000000000002, 0.40000000000000002 },
-  { 1.7888013241937861, -0.90000000000000002, 0.50000000000000000 },
-  { 1.7211781128919523, -0.90000000000000002, 0.59999999999999998 },
-  { 1.6600480747670938, -0.90000000000000002, 0.69999999999999996 },
-  { 1.6044591960982204, -0.90000000000000002, 0.80000000000000004 },
-  { 1.5536420236310946, -0.90000000000000002, 0.90000000000000002 },
-};
-
-// Test function for k=-0.90000000000000002.
-template <typename Tp>
-void test001()
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 5
+// max(|f - f_Boost| / |f_Boost|): 1.2838262090802751e-16
+// mean(f - f_Boost): 4.4408920985006264e-17
+// variance(f - f_Boost): 2.4347558803117648e-34
+// stddev(f - f_Boost): 1.5603704304785339e-17
+const testcase_comp_ellint_3<double>
+data001[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data001[i].k), Tp(data001[i].nu));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.80000000000000004.
-testcase_comp_ellint_3<double> data002[] = {
-  { 1.9953027776647296, -0.80000000000000004, 0.0000000000000000 },
-  { 1.8910755418379521, -0.80000000000000004, 0.10000000000000001 },
-  { 1.8007226661734588, -0.80000000000000004, 0.20000000000000001 },
-  { 1.7214611048717301, -0.80000000000000004, 0.29999999999999999 },
-  { 1.6512267838651289, -0.80000000000000004, 0.40000000000000002 },
-  { 1.5884528947755532, -0.80000000000000004, 0.50000000000000000 },
-  { 1.5319262547427865, -0.80000000000000004, 0.59999999999999998 },
-  { 1.4806912324625332, -0.80000000000000004, 0.69999999999999996 },
-  { 1.4339837018309474, -0.80000000000000004, 0.80000000000000004 },
-  { 1.3911845406776222, -0.80000000000000004, 0.90000000000000002 },
+  { 2.2805491384227703, -0.90000000000000002, 0.0000000000000000, 0.0 },
+  { 2.4295011187834885, -0.90000000000000002, 0.10000000000000001, 0.0 },
+  { 2.6076835743348412, -0.90000000000000002, 0.20000000000000001, 0.0 },
+  { 2.8256506968858512, -0.90000000000000002, 0.30000000000000004, 0.0 },
+  { 3.1000689868578619, -0.90000000000000002, 0.40000000000000002, 0.0 },
+  { 3.4591069002104677, -0.90000000000000002, 0.50000000000000000, 0.0 },
+  { 3.9549939883570229, -0.90000000000000002, 0.60000000000000009, 0.0 },
+  { 4.6985482312992435, -0.90000000000000002, 0.70000000000000007, 0.0 },
+  { 5.9820740813645710, -0.90000000000000002, 0.80000000000000004, 0.0 },
+  { 8.9942562031858699, -0.90000000000000002, 0.90000000000000002, 0.0 },
 };
+const double toler001 = 2.5000000000000020e-13;
 
-// Test function for k=-0.80000000000000004.
-template <typename Tp>
-void test002()
+// Test data for k=-0.80000000000000004.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.1949393471095187e-16
+// mean(f - f_Boost): 9.5479180117763459e-16
+// variance(f - f_Boost): 5.4782007307014711e-34
+// stddev(f - f_Boost): 2.3405556457178006e-17
+const testcase_comp_ellint_3<double>
+data002[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data002)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data002[i].k), Tp(data002[i].nu));
-      const Tp f0 = data002[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.69999999999999996.
-testcase_comp_ellint_3<double> data003[] = {
-  { 1.8456939983747236, -0.69999999999999996, 0.0000000000000000 },
-  { 1.7528050171757608, -0.69999999999999996, 0.10000000000000001 },
-  { 1.6721098780092147, -0.69999999999999996, 0.20000000000000001 },
-  { 1.6011813647733213, -0.69999999999999996, 0.29999999999999999 },
-  { 1.5382162002954762, -0.69999999999999996, 0.40000000000000002 },
-  { 1.4818433192178544, -0.69999999999999996, 0.50000000000000000 },
-  { 1.4309994736080540, -0.69999999999999996, 0.59999999999999998 },
-  { 1.3848459188329196, -0.69999999999999996, 0.69999999999999996 },
-  { 1.3427110650397533, -0.69999999999999996, 0.80000000000000004 },
-  { 1.3040500499695911, -0.69999999999999996, 0.90000000000000002 },
+  { 1.9953027776647294, -0.80000000000000004, 0.0000000000000000, 0.0 },
+  { 2.1172616484005085, -0.80000000000000004, 0.10000000000000001, 0.0 },
+  { 2.2624789434186798, -0.80000000000000004, 0.20000000000000001, 0.0 },
+  { 2.4392042002725698, -0.80000000000000004, 0.30000000000000004, 0.0 },
+  { 2.6604037035529728, -0.80000000000000004, 0.40000000000000002, 0.0 },
+  { 2.9478781158239751, -0.80000000000000004, 0.50000000000000000, 0.0 },
+  { 3.3418121892288055, -0.80000000000000004, 0.60000000000000009, 0.0 },
+  { 3.9268876980046397, -0.80000000000000004, 0.70000000000000007, 0.0 },
+  { 4.9246422058196071, -0.80000000000000004, 0.80000000000000004, 0.0 },
+  { 7.2263259298637132, -0.80000000000000004, 0.90000000000000002, 0.0 },
 };
+const double toler002 = 2.5000000000000020e-13;
 
-// Test function for k=-0.69999999999999996.
-template <typename Tp>
-void test003()
+// Test data for k=-0.69999999999999996.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 3
+// max(|f - f_Boost| / |f_Boost|): 1.9832236886714888e-16
+// mean(f - f_Boost): -1.5543122344752191e-16
+// variance(f - f_Boost): 2.9825759533819119e-33
+// stddev(f - f_Boost): 5.4612965066748680e-17
+const testcase_comp_ellint_3<double>
+data003[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data003)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data003[i].k), Tp(data003[i].nu));
-      const Tp f0 = data003[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.59999999999999998.
-testcase_comp_ellint_3<double> data004[] = {
-  { 1.7507538029157526, -0.59999999999999998, 0.0000000000000000 },
-  { 1.6648615773343014, -0.59999999999999998, 0.10000000000000001 },
-  { 1.5901418016279374, -0.59999999999999998, 0.20000000000000001 },
-  { 1.5243814243493585, -0.59999999999999998, 0.29999999999999999 },
-  { 1.4659345278069984, -0.59999999999999998, 0.40000000000000002 },
-  { 1.4135484285693078, -0.59999999999999998, 0.50000000000000000 },
-  { 1.3662507535812816, -0.59999999999999998, 0.59999999999999998 },
-  { 1.3232737468822811, -0.59999999999999998, 0.69999999999999996 },
-  { 1.2840021261752192, -0.59999999999999998, 0.80000000000000004 },
-  { 1.2479362973851875, -0.59999999999999998, 0.90000000000000002 },
+  { 1.8456939983747234, -0.69999999999999996, 0.0000000000000000, 0.0 },
+  { 1.9541347343119564, -0.69999999999999996, 0.10000000000000001, 0.0 },
+  { 2.0829290325820202, -0.69999999999999996, 0.20000000000000001, 0.0 },
+  { 2.2392290510988535, -0.69999999999999996, 0.30000000000000004, 0.0 },
+  { 2.4342502915307880, -0.69999999999999996, 0.40000000000000002, 0.0 },
+  { 2.6868019968236996, -0.69999999999999996, 0.50000000000000000, 0.0 },
+  { 3.0314573496746742, -0.69999999999999996, 0.60000000000000009, 0.0 },
+  { 3.5408408771788564, -0.69999999999999996, 0.70000000000000007, 0.0 },
+  { 4.4042405729076961, -0.69999999999999996, 0.80000000000000004, 0.0 },
+  { 6.3796094177887754, -0.69999999999999996, 0.90000000000000002, 0.0 },
 };
+const double toler003 = 2.5000000000000020e-13;
 
-// Test function for k=-0.59999999999999998.
-template <typename Tp>
-void test004()
+// Test data for k=-0.59999999999999998.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 2
+// max(|f - f_Boost| / |f_Boost|): 2.2547200163366559e-16
+// mean(f - f_Boost): -1.9984014443252818e-16
+// variance(f - f_Boost): 4.9303806576313241e-33
+// stddev(f - f_Boost): 7.0216669371534022e-17
+const testcase_comp_ellint_3<double>
+data004[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data004)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data004[i].k), Tp(data004[i].nu));
-      const Tp f0 = data004[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.50000000000000000.
-testcase_comp_ellint_3<double> data005[] = {
-  { 1.6857503548125963, -0.50000000000000000, 0.0000000000000000 },
-  { 1.6045524936084892, -0.50000000000000000, 0.10000000000000001 },
-  { 1.5338490483665983, -0.50000000000000000, 0.20000000000000001 },
-  { 1.4715681939859637, -0.50000000000000000, 0.29999999999999999 },
-  { 1.4161679518465340, -0.50000000000000000, 0.40000000000000002 },
-  { 1.3664739530045971, -0.50000000000000000, 0.50000000000000000 },
-  { 1.3215740290190876, -0.50000000000000000, 0.59999999999999998 },
-  { 1.2807475181182502, -0.50000000000000000, 0.69999999999999996 },
-  { 1.2434165408189539, -0.50000000000000000, 0.80000000000000004 },
-  { 1.2091116095504744, -0.50000000000000000, 0.90000000000000002 },
+  { 1.7507538029157526, -0.59999999999999998, 0.0000000000000000, 0.0 },
+  { 1.8508766487100685, -0.59999999999999998, 0.10000000000000001, 0.0 },
+  { 1.9695980282802217, -0.59999999999999998, 0.20000000000000001, 0.0 },
+  { 2.1134154405060599, -0.59999999999999998, 0.30000000000000004, 0.0 },
+  { 2.2925036420985130, -0.59999999999999998, 0.40000000000000002, 0.0 },
+  { 2.5239007084492711, -0.59999999999999998, 0.50000000000000000, 0.0 },
+  { 2.8388723099514972, -0.59999999999999998, 0.60000000000000009, 0.0 },
+  { 3.3029735898397159, -0.59999999999999998, 0.70000000000000007, 0.0 },
+  { 4.0867036409261832, -0.59999999999999998, 0.80000000000000004, 0.0 },
+  { 5.8709993116265604, -0.59999999999999998, 0.90000000000000002, 0.0 },
 };
+const double toler004 = 2.5000000000000020e-13;
 
-// Test function for k=-0.50000000000000000.
-template <typename Tp>
-void test005()
+// Test data for k=-0.50000000000000000.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 3
+// max(|f - f_Boost| / |f_Boost|): 2.1900131385114407e-16
+// mean(f - f_Boost): 2.4424906541753446e-16
+// variance(f - f_Boost): 7.3651365379430888e-33
+// stddev(f - f_Boost): 8.5820373676319358e-17
+const testcase_comp_ellint_3<double>
+data005[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data005)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data005[i].k), Tp(data005[i].nu));
-      const Tp f0 = data005[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.40000000000000002.
-testcase_comp_ellint_3<double> data006[] = {
-  { 1.6399998658645112, -0.40000000000000002, 0.0000000000000000 },
-  { 1.5620566886683604, -0.40000000000000002, 0.10000000000000001 },
-  { 1.4941414344266770, -0.40000000000000002, 0.20000000000000001 },
-  { 1.4342789859950078, -0.40000000000000002, 0.29999999999999999 },
-  { 1.3809986210732901, -0.40000000000000002, 0.40000000000000002 },
-  { 1.3331797176377398, -0.40000000000000002, 0.50000000000000000 },
-  { 1.2899514672527024, -0.40000000000000002, 0.59999999999999998 },
-  { 1.2506255923253344, -0.40000000000000002, 0.69999999999999996 },
-  { 1.2146499565727209, -0.40000000000000002, 0.80000000000000004 },
-  { 1.1815758115929846, -0.40000000000000002, 0.90000000000000002 },
+  { 1.6857503548125961, -0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 1.7803034946545482, -0.50000000000000000, 0.10000000000000001, 0.0 },
+  { 1.8922947612264021, -0.50000000000000000, 0.20000000000000001, 0.0 },
+  { 2.0277924458111314, -0.50000000000000000, 0.30000000000000004, 0.0 },
+  { 2.1962905366178065, -0.50000000000000000, 0.40000000000000002, 0.0 },
+  { 2.4136715042011945, -0.50000000000000000, 0.50000000000000000, 0.0 },
+  { 2.7090491861753558, -0.50000000000000000, 0.60000000000000009, 0.0 },
+  { 3.1433945297859229, -0.50000000000000000, 0.70000000000000007, 0.0 },
+  { 3.8750701888108070, -0.50000000000000000, 0.80000000000000004, 0.0 },
+  { 5.5355132096026463, -0.50000000000000000, 0.90000000000000002, 0.0 },
 };
-
-// Test function for k=-0.40000000000000002.
-template <typename Tp>
-void test006()
+const double toler005 = 2.5000000000000020e-13;
+
+// Test data for k=-0.39999999999999991.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.1718164615986397e-16
+// mean(f - f_Boost): 6.2172489379008762e-16
+// variance(f - f_Boost): 1.6458949750907531e-31
+// stddev(f - f_Boost): 4.0569631192441877e-16
+const testcase_comp_ellint_3<double>
+data006[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data006)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data006[i].k), Tp(data006[i].nu));
-      const Tp f0 = data006[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.30000000000000004.
-testcase_comp_ellint_3<double> data007[] = {
-  { 1.6080486199305126, -0.30000000000000004, 0.0000000000000000 },
-  { 1.5323534693557526, -0.30000000000000004, 0.10000000000000001 },
-  { 1.4663658145259875, -0.30000000000000004, 0.20000000000000001 },
-  { 1.4081767433479089, -0.30000000000000004, 0.29999999999999999 },
-  { 1.3563643538969761, -0.30000000000000004, 0.40000000000000002 },
-  { 1.3098448759814960, -0.30000000000000004, 0.50000000000000000 },
-  { 1.2677758800420666, -0.30000000000000004, 0.59999999999999998 },
-  { 1.2294913236274980, -0.30000000000000004, 0.69999999999999996 },
-  { 1.1944567571590046, -0.30000000000000004, 0.80000000000000004 },
-  { 1.1622376896064912, -0.30000000000000004, 0.90000000000000002 },
+  { 1.6399998658645112, -0.39999999999999991, 0.0000000000000000, 0.0 },
+  { 1.7306968836847190, -0.39999999999999991, 0.10000000000000001, 0.0 },
+  { 1.8380358826317627, -0.39999999999999991, 0.20000000000000001, 0.0 },
+  { 1.9677924132520139, -0.39999999999999991, 0.30000000000000004, 0.0 },
+  { 2.1289968719280026, -0.39999999999999991, 0.40000000000000002, 0.0 },
+  { 2.3367461373176512, -0.39999999999999991, 0.50000000000000000, 0.0 },
+  { 2.6186940209850191, -0.39999999999999991, 0.60000000000000009, 0.0 },
+  { 3.0327078743873246, -0.39999999999999991, 0.70000000000000007, 0.0 },
+  { 3.7289548002199902, -0.39999999999999991, 0.80000000000000004, 0.0 },
+  { 5.3055535102872513, -0.39999999999999991, 0.90000000000000002, 0.0 },
 };
-
-// Test function for k=-0.30000000000000004.
-template <typename Tp>
-void test007()
+const double toler006 = 2.5000000000000020e-13;
+
+// Test data for k=-0.29999999999999993.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.9274792319434433e-16
+// mean(f - f_Boost): 6.2172489379008762e-16
+// variance(f - f_Boost): 8.7651211691223537e-33
+// stddev(f - f_Boost): 9.3622225828712025e-17
+const testcase_comp_ellint_3<double>
+data007[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data007)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data007[i].k), Tp(data007[i].nu));
-      const Tp f0 = data007[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.19999999999999996.
-testcase_comp_ellint_3<double> data008[] = {
-  { 1.5868678474541664, -0.19999999999999996, 0.0000000000000000 },
-  { 1.5126513474261092, -0.19999999999999996, 0.10000000000000001 },
-  { 1.4479323932249568, -0.19999999999999996, 0.20000000000000001 },
-  { 1.3908453514752481, -0.19999999999999996, 0.29999999999999999 },
-  { 1.3400002519661010, -0.19999999999999996, 0.40000000000000002 },
-  { 1.2943374404397376, -0.19999999999999996, 0.50000000000000000 },
-  { 1.2530330675914561, -0.19999999999999996, 0.59999999999999998 },
-  { 1.2154356555075867, -0.19999999999999996, 0.69999999999999996 },
-  { 1.1810223448909913, -0.19999999999999996, 0.80000000000000004 },
-  { 1.1493679916141863, -0.19999999999999996, 0.90000000000000002 },
+  { 1.6080486199305128, -0.29999999999999993, 0.0000000000000000, 0.0 },
+  { 1.6960848815118226, -0.29999999999999993, 0.10000000000000001, 0.0 },
+  { 1.8002173372290500, -0.29999999999999993, 0.20000000000000001, 0.0 },
+  { 1.9260216862473254, -0.29999999999999993, 0.30000000000000004, 0.0 },
+  { 2.0822121773175533, -0.29999999999999993, 0.40000000000000002, 0.0 },
+  { 2.2833505881933971, -0.29999999999999993, 0.50000000000000000, 0.0 },
+  { 2.5560975528589065, -0.29999999999999993, 0.60000000000000009, 0.0 },
+  { 2.9562123549913877, -0.29999999999999993, 0.70000000000000007, 0.0 },
+  { 3.6283050484567170, -0.29999999999999993, 0.80000000000000004, 0.0 },
+  { 5.1479514944016795, -0.29999999999999993, 0.90000000000000002, 0.0 },
 };
+const double toler007 = 2.5000000000000020e-13;
 
-// Test function for k=-0.19999999999999996.
-template <typename Tp>
-void test008()
+// Test data for k=-0.19999999999999996.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.9753938705764407e-16
+// mean(f - f_Boost): 3.1086244689504381e-16
+// variance(f - f_Boost): 4.1147374377268827e-32
+// stddev(f - f_Boost): 2.0284815596220939e-16
+const testcase_comp_ellint_3<double>
+data008[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data008)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data008[i].k), Tp(data008[i].nu));
-      const Tp f0 = data008[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.099999999999999978.
-testcase_comp_ellint_3<double> data009[] = {
-  { 1.5747455615173562, -0.099999999999999978, 0.0000000000000000 },
-  { 1.5013711111199950, -0.099999999999999978, 0.10000000000000001 },
-  { 1.4373749386463430, -0.099999999999999978, 0.20000000000000001 },
-  { 1.3809159606704959, -0.099999999999999978, 0.29999999999999999 },
-  { 1.3306223265207477, -0.099999999999999978, 0.40000000000000002 },
-  { 1.2854480708580160, -0.099999999999999978, 0.50000000000000000 },
-  { 1.2445798942989255, -0.099999999999999978, 0.59999999999999998 },
-  { 1.2073745911083187, -0.099999999999999978, 0.69999999999999996 },
-  { 1.1733158866987732, -0.099999999999999978, 0.80000000000000004 },
-  { 1.1419839485283374, -0.099999999999999978, 0.90000000000000002 },
+  { 1.5868678474541662, -0.19999999999999996, 0.0000000000000000, 0.0 },
+  { 1.6731552050562593, -0.19999999999999996, 0.10000000000000001, 0.0 },
+  { 1.7751816279738935, -0.19999999999999996, 0.20000000000000001, 0.0 },
+  { 1.8983924169967101, -0.19999999999999996, 0.30000000000000004, 0.0 },
+  { 2.0512956926676806, -0.19999999999999996, 0.40000000000000002, 0.0 },
+  { 2.2481046259421302, -0.19999999999999996, 0.50000000000000000, 0.0 },
+  { 2.5148333891629315, -0.19999999999999996, 0.60000000000000009, 0.0 },
+  { 2.9058704854500967, -0.19999999999999996, 0.70000000000000007, 0.0 },
+  { 3.5622166386422633, -0.19999999999999996, 0.80000000000000004, 0.0 },
+  { 5.0448269356200370, -0.19999999999999996, 0.90000000000000002, 0.0 },
 };
+const double toler008 = 2.5000000000000020e-13;
 
-// Test function for k=-0.099999999999999978.
-template <typename Tp>
-void test009()
+// Test data for k=-0.099999999999999978.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 5
+// max(|f - f_Boost| / |f_Boost|): 1.9932308021417639e-16
+// mean(f - f_Boost): 0.0000000000000000
+// variance(f - f_Boost): 6.8368087769470551e-64
+// stddev(f - f_Boost): 2.6147291976315738e-32
+const testcase_comp_ellint_3<double>
+data009[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data009)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data009[i].k), Tp(data009[i].nu));
-      const Tp f0 = data009[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.0000000000000000.
-testcase_comp_ellint_3<double> data010[] = {
-  { 1.5707963267948966, 0.0000000000000000, 0.0000000000000000 },
-  { 1.4976955329233277, 0.0000000000000000, 0.10000000000000001 },
-  { 1.4339343023863691, 0.0000000000000000, 0.20000000000000001 },
-  { 1.3776795151134889, 0.0000000000000000, 0.29999999999999999 },
-  { 1.3275651989026322, 0.0000000000000000, 0.40000000000000002 },
-  { 1.2825498301618641, 0.0000000000000000, 0.50000000000000000 },
-  { 1.2418235332245127, 0.0000000000000000, 0.59999999999999998 },
-  { 1.2047457872617382, 0.0000000000000000, 0.69999999999999996 },
-  { 1.1708024551734544, 0.0000000000000000, 0.80000000000000004 },
-  { 1.1395754288497419, 0.0000000000000000, 0.90000000000000002 },
+  { 1.5747455615173560, -0.099999999999999978, 0.0000000000000000, 0.0 },
+  { 1.6600374067558428, -0.099999999999999978, 0.10000000000000001, 0.0 },
+  { 1.7608656115083421, -0.099999999999999978, 0.20000000000000001, 0.0 },
+  { 1.8826015946315438, -0.099999999999999978, 0.30000000000000004, 0.0 },
+  { 2.0336367403076760, -0.099999999999999978, 0.40000000000000002, 0.0 },
+  { 2.2279868912966849, -0.099999999999999978, 0.50000000000000000, 0.0 },
+  { 2.4913004919173827, -0.099999999999999978, 0.60000000000000009, 0.0 },
+  { 2.8771910188009744, -0.099999999999999978, 0.70000000000000007, 0.0 },
+  { 3.5246199613295617, -0.099999999999999978, 0.80000000000000004, 0.0 },
+  { 4.9862890417305508, -0.099999999999999978, 0.90000000000000002, 0.0 },
 };
+const double toler009 = 2.5000000000000020e-13;
 
-// Test function for k=0.0000000000000000.
-template <typename Tp>
-void test010()
+// Test data for k=0.0000000000000000.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 2.1899085000907084e-16
+// mean(f - f_Boost): -2.2204460492503131e-16
+// variance(f - f_Boost): 5.4782007307014711e-32
+// stddev(f - f_Boost): 2.3405556457178008e-16
+const testcase_comp_ellint_3<double>
+data010[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data010)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data010[i].k), Tp(data010[i].nu));
-      const Tp f0 = data010[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.10000000000000009.
-testcase_comp_ellint_3<double> data011[] = {
-  { 1.5747455615173562, 0.10000000000000009, 0.0000000000000000 },
-  { 1.5013711111199950, 0.10000000000000009, 0.10000000000000001 },
-  { 1.4373749386463430, 0.10000000000000009, 0.20000000000000001 },
-  { 1.3809159606704959, 0.10000000000000009, 0.29999999999999999 },
-  { 1.3306223265207477, 0.10000000000000009, 0.40000000000000002 },
-  { 1.2854480708580160, 0.10000000000000009, 0.50000000000000000 },
-  { 1.2445798942989255, 0.10000000000000009, 0.59999999999999998 },
-  { 1.2073745911083187, 0.10000000000000009, 0.69999999999999996 },
-  { 1.1733158866987732, 0.10000000000000009, 0.80000000000000004 },
-  { 1.1419839485283374, 0.10000000000000009, 0.90000000000000002 },
+  { 1.5707963267948966, 0.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.6557647109660170, 0.0000000000000000, 0.10000000000000001, 0.0 },
+  { 1.7562036827601817, 0.0000000000000000, 0.20000000000000001, 0.0 },
+  { 1.8774607092226381, 0.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.0278893379868062, 0.0000000000000000, 0.40000000000000002, 0.0 },
+  { 2.2214414690791831, 0.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2.4836470664490258, 0.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.8678686047727386, 0.0000000000000000, 0.70000000000000007, 0.0 },
+  { 3.5124073655203634, 0.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4.9672941328980516, 0.0000000000000000, 0.90000000000000002, 0.0 },
 };
+const double toler010 = 2.5000000000000020e-13;
 
-// Test function for k=0.10000000000000009.
-template <typename Tp>
-void test011()
+// Test data for k=0.10000000000000009.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 5
+// max(|f - f_Boost| / |f_Boost|): 1.9932308021417639e-16
+// mean(f - f_Boost): -2.2204460492503132e-17
+// variance(f - f_Boost): 6.0868897007794120e-35
+// stddev(f - f_Boost): 7.8018521523926693e-18
+const testcase_comp_ellint_3<double>
+data011[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data011)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data011[i].k), Tp(data011[i].nu));
-      const Tp f0 = data011[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.19999999999999996.
-testcase_comp_ellint_3<double> data012[] = {
-  { 1.5868678474541664, 0.19999999999999996, 0.0000000000000000 },
-  { 1.5126513474261092, 0.19999999999999996, 0.10000000000000001 },
-  { 1.4479323932249568, 0.19999999999999996, 0.20000000000000001 },
-  { 1.3908453514752481, 0.19999999999999996, 0.29999999999999999 },
-  { 1.3400002519661010, 0.19999999999999996, 0.40000000000000002 },
-  { 1.2943374404397376, 0.19999999999999996, 0.50000000000000000 },
-  { 1.2530330675914561, 0.19999999999999996, 0.59999999999999998 },
-  { 1.2154356555075867, 0.19999999999999996, 0.69999999999999996 },
-  { 1.1810223448909913, 0.19999999999999996, 0.80000000000000004 },
-  { 1.1493679916141863, 0.19999999999999996, 0.90000000000000002 },
+  { 1.5747455615173560, 0.10000000000000009, 0.0000000000000000, 0.0 },
+  { 1.6600374067558428, 0.10000000000000009, 0.10000000000000001, 0.0 },
+  { 1.7608656115083421, 0.10000000000000009, 0.20000000000000001, 0.0 },
+  { 1.8826015946315440, 0.10000000000000009, 0.30000000000000004, 0.0 },
+  { 2.0336367403076760, 0.10000000000000009, 0.40000000000000002, 0.0 },
+  { 2.2279868912966849, 0.10000000000000009, 0.50000000000000000, 0.0 },
+  { 2.4913004919173827, 0.10000000000000009, 0.60000000000000009, 0.0 },
+  { 2.8771910188009744, 0.10000000000000009, 0.70000000000000007, 0.0 },
+  { 3.5246199613295617, 0.10000000000000009, 0.80000000000000004, 0.0 },
+  { 4.9862890417305508, 0.10000000000000009, 0.90000000000000002, 0.0 },
 };
-
-// Test function for k=0.19999999999999996.
-template <typename Tp>
-void test012()
+const double toler011 = 2.5000000000000020e-13;
+
+// Test data for k=0.20000000000000018.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.9753938705764407e-16
+// mean(f - f_Boost): 3.1086244689504381e-16
+// variance(f - f_Boost): 4.1147374377268827e-32
+// stddev(f - f_Boost): 2.0284815596220939e-16
+const testcase_comp_ellint_3<double>
+data012[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data012)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data012[i].k), Tp(data012[i].nu));
-      const Tp f0 = data012[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.30000000000000004.
-testcase_comp_ellint_3<double> data013[] = {
-  { 1.6080486199305126, 0.30000000000000004, 0.0000000000000000 },
-  { 1.5323534693557526, 0.30000000000000004, 0.10000000000000001 },
-  { 1.4663658145259875, 0.30000000000000004, 0.20000000000000001 },
-  { 1.4081767433479089, 0.30000000000000004, 0.29999999999999999 },
-  { 1.3563643538969761, 0.30000000000000004, 0.40000000000000002 },
-  { 1.3098448759814960, 0.30000000000000004, 0.50000000000000000 },
-  { 1.2677758800420666, 0.30000000000000004, 0.59999999999999998 },
-  { 1.2294913236274980, 0.30000000000000004, 0.69999999999999996 },
-  { 1.1944567571590046, 0.30000000000000004, 0.80000000000000004 },
-  { 1.1622376896064912, 0.30000000000000004, 0.90000000000000002 },
+  { 1.5868678474541662, 0.20000000000000018, 0.0000000000000000, 0.0 },
+  { 1.6731552050562593, 0.20000000000000018, 0.10000000000000001, 0.0 },
+  { 1.7751816279738935, 0.20000000000000018, 0.20000000000000001, 0.0 },
+  { 1.8983924169967101, 0.20000000000000018, 0.30000000000000004, 0.0 },
+  { 2.0512956926676806, 0.20000000000000018, 0.40000000000000002, 0.0 },
+  { 2.2481046259421302, 0.20000000000000018, 0.50000000000000000, 0.0 },
+  { 2.5148333891629315, 0.20000000000000018, 0.60000000000000009, 0.0 },
+  { 2.9058704854500967, 0.20000000000000018, 0.70000000000000007, 0.0 },
+  { 3.5622166386422633, 0.20000000000000018, 0.80000000000000004, 0.0 },
+  { 5.0448269356200370, 0.20000000000000018, 0.90000000000000002, 0.0 },
 };
+const double toler012 = 2.5000000000000020e-13;
 
-// Test function for k=0.30000000000000004.
-template <typename Tp>
-void test013()
+// Test data for k=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.4585997630846713e-16
+// mean(f - f_Boost): 5.1070259132757197e-16
+// variance(f - f_Boost): 1.7591111235252501e-32
+// stddev(f - f_Boost): 1.3263148659067538e-16
+const testcase_comp_ellint_3<double>
+data013[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data013)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data013[i].k), Tp(data013[i].nu));
-      const Tp f0 = data013[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.39999999999999991.
-testcase_comp_ellint_3<double> data014[] = {
-  { 1.6399998658645112, 0.39999999999999991, 0.0000000000000000 },
-  { 1.5620566886683604, 0.39999999999999991, 0.10000000000000001 },
-  { 1.4941414344266770, 0.39999999999999991, 0.20000000000000001 },
-  { 1.4342789859950078, 0.39999999999999991, 0.29999999999999999 },
-  { 1.3809986210732901, 0.39999999999999991, 0.40000000000000002 },
-  { 1.3331797176377398, 0.39999999999999991, 0.50000000000000000 },
-  { 1.2899514672527024, 0.39999999999999991, 0.59999999999999998 },
-  { 1.2506255923253344, 0.39999999999999991, 0.69999999999999996 },
-  { 1.2146499565727209, 0.39999999999999991, 0.80000000000000004 },
-  { 1.1815758115929846, 0.39999999999999991, 0.90000000000000002 },
+  { 1.6080486199305128, 0.30000000000000004, 0.0000000000000000, 0.0 },
+  { 1.6960848815118228, 0.30000000000000004, 0.10000000000000001, 0.0 },
+  { 1.8002173372290500, 0.30000000000000004, 0.20000000000000001, 0.0 },
+  { 1.9260216862473254, 0.30000000000000004, 0.30000000000000004, 0.0 },
+  { 2.0822121773175533, 0.30000000000000004, 0.40000000000000002, 0.0 },
+  { 2.2833505881933975, 0.30000000000000004, 0.50000000000000000, 0.0 },
+  { 2.5560975528589065, 0.30000000000000004, 0.60000000000000009, 0.0 },
+  { 2.9562123549913877, 0.30000000000000004, 0.70000000000000007, 0.0 },
+  { 3.6283050484567174, 0.30000000000000004, 0.80000000000000004, 0.0 },
+  { 5.1479514944016795, 0.30000000000000004, 0.90000000000000002, 0.0 },
 };
-
-// Test function for k=0.39999999999999991.
-template <typename Tp>
-void test014()
+const double toler013 = 2.5000000000000020e-13;
+
+// Test data for k=0.40000000000000013.
+// max(|f - f_Boost|): 2.6645352591003757e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.7696531428672557e-16
+// mean(f - f_Boost): 1.1990408665951691e-15
+// variance(f - f_Boost): 2.6514491536595121e-31
+// stddev(f - f_Boost): 5.1492224205791612e-16
+const testcase_comp_ellint_3<double>
+data014[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data014)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data014[i].k), Tp(data014[i].nu));
-      const Tp f0 = data014[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.50000000000000000.
-testcase_comp_ellint_3<double> data015[] = {
-  { 1.6857503548125963, 0.50000000000000000, 0.0000000000000000 },
-  { 1.6045524936084892, 0.50000000000000000, 0.10000000000000001 },
-  { 1.5338490483665983, 0.50000000000000000, 0.20000000000000001 },
-  { 1.4715681939859637, 0.50000000000000000, 0.29999999999999999 },
-  { 1.4161679518465340, 0.50000000000000000, 0.40000000000000002 },
-  { 1.3664739530045971, 0.50000000000000000, 0.50000000000000000 },
-  { 1.3215740290190876, 0.50000000000000000, 0.59999999999999998 },
-  { 1.2807475181182502, 0.50000000000000000, 0.69999999999999996 },
-  { 1.2434165408189539, 0.50000000000000000, 0.80000000000000004 },
-  { 1.2091116095504744, 0.50000000000000000, 0.90000000000000002 },
+  { 1.6399998658645112, 0.40000000000000013, 0.0000000000000000, 0.0 },
+  { 1.7306968836847190, 0.40000000000000013, 0.10000000000000001, 0.0 },
+  { 1.8380358826317629, 0.40000000000000013, 0.20000000000000001, 0.0 },
+  { 1.9677924132520141, 0.40000000000000013, 0.30000000000000004, 0.0 },
+  { 2.1289968719280030, 0.40000000000000013, 0.40000000000000002, 0.0 },
+  { 2.3367461373176512, 0.40000000000000013, 0.50000000000000000, 0.0 },
+  { 2.6186940209850196, 0.40000000000000013, 0.60000000000000009, 0.0 },
+  { 3.0327078743873246, 0.40000000000000013, 0.70000000000000007, 0.0 },
+  { 3.7289548002199906, 0.40000000000000013, 0.80000000000000004, 0.0 },
+  { 5.3055535102872522, 0.40000000000000013, 0.90000000000000002, 0.0 },
 };
+const double toler014 = 2.5000000000000020e-13;
 
-// Test function for k=0.50000000000000000.
-template <typename Tp>
-void test015()
+// Test data for k=0.50000000000000000.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 3
+// max(|f - f_Boost| / |f_Boost|): 2.1900131385114407e-16
+// mean(f - f_Boost): 2.4424906541753446e-16
+// variance(f - f_Boost): 7.3651365379430888e-33
+// stddev(f - f_Boost): 8.5820373676319358e-17
+const testcase_comp_ellint_3<double>
+data015[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data015)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data015[i].k), Tp(data015[i].nu));
-      const Tp f0 = data015[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.60000000000000009.
-testcase_comp_ellint_3<double> data016[] = {
-  { 1.7507538029157526, 0.60000000000000009, 0.0000000000000000 },
-  { 1.6648615773343014, 0.60000000000000009, 0.10000000000000001 },
-  { 1.5901418016279374, 0.60000000000000009, 0.20000000000000001 },
-  { 1.5243814243493585, 0.60000000000000009, 0.29999999999999999 },
-  { 1.4659345278069984, 0.60000000000000009, 0.40000000000000002 },
-  { 1.4135484285693078, 0.60000000000000009, 0.50000000000000000 },
-  { 1.3662507535812816, 0.60000000000000009, 0.59999999999999998 },
-  { 1.3232737468822811, 0.60000000000000009, 0.69999999999999996 },
-  { 1.2840021261752192, 0.60000000000000009, 0.80000000000000004 },
-  { 1.2479362973851875, 0.60000000000000009, 0.90000000000000002 },
+  { 1.6857503548125961, 0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 1.7803034946545482, 0.50000000000000000, 0.10000000000000001, 0.0 },
+  { 1.8922947612264021, 0.50000000000000000, 0.20000000000000001, 0.0 },
+  { 2.0277924458111314, 0.50000000000000000, 0.30000000000000004, 0.0 },
+  { 2.1962905366178065, 0.50000000000000000, 0.40000000000000002, 0.0 },
+  { 2.4136715042011945, 0.50000000000000000, 0.50000000000000000, 0.0 },
+  { 2.7090491861753558, 0.50000000000000000, 0.60000000000000009, 0.0 },
+  { 3.1433945297859229, 0.50000000000000000, 0.70000000000000007, 0.0 },
+  { 3.8750701888108070, 0.50000000000000000, 0.80000000000000004, 0.0 },
+  { 5.5355132096026463, 0.50000000000000000, 0.90000000000000002, 0.0 },
 };
+const double toler015 = 2.5000000000000020e-13;
 
-// Test function for k=0.60000000000000009.
-template <typename Tp>
-void test016()
+// Test data for k=0.60000000000000009.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 2
+// max(|f - f_Boost| / |f_Boost|): 2.2547200163366559e-16
+// mean(f - f_Boost): -2.2204460492503131e-16
+// variance(f - f_Boost): 6.0868897007794117e-33
+// stddev(f - f_Boost): 7.8018521523926690e-17
+const testcase_comp_ellint_3<double>
+data016[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data016)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data016[i].k), Tp(data016[i].nu));
-      const Tp f0 = data016[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.69999999999999996.
-testcase_comp_ellint_3<double> data017[] = {
-  { 1.8456939983747236, 0.69999999999999996, 0.0000000000000000 },
-  { 1.7528050171757608, 0.69999999999999996, 0.10000000000000001 },
-  { 1.6721098780092147, 0.69999999999999996, 0.20000000000000001 },
-  { 1.6011813647733213, 0.69999999999999996, 0.29999999999999999 },
-  { 1.5382162002954762, 0.69999999999999996, 0.40000000000000002 },
-  { 1.4818433192178544, 0.69999999999999996, 0.50000000000000000 },
-  { 1.4309994736080540, 0.69999999999999996, 0.59999999999999998 },
-  { 1.3848459188329196, 0.69999999999999996, 0.69999999999999996 },
-  { 1.3427110650397533, 0.69999999999999996, 0.80000000000000004 },
-  { 1.3040500499695911, 0.69999999999999996, 0.90000000000000002 },
+  { 1.7507538029157526, 0.60000000000000009, 0.0000000000000000, 0.0 },
+  { 1.8508766487100687, 0.60000000000000009, 0.10000000000000001, 0.0 },
+  { 1.9695980282802217, 0.60000000000000009, 0.20000000000000001, 0.0 },
+  { 2.1134154405060599, 0.60000000000000009, 0.30000000000000004, 0.0 },
+  { 2.2925036420985130, 0.60000000000000009, 0.40000000000000002, 0.0 },
+  { 2.5239007084492711, 0.60000000000000009, 0.50000000000000000, 0.0 },
+  { 2.8388723099514976, 0.60000000000000009, 0.60000000000000009, 0.0 },
+  { 3.3029735898397159, 0.60000000000000009, 0.70000000000000007, 0.0 },
+  { 4.0867036409261832, 0.60000000000000009, 0.80000000000000004, 0.0 },
+  { 5.8709993116265613, 0.60000000000000009, 0.90000000000000002, 0.0 },
 };
-
-// Test function for k=0.69999999999999996.
-template <typename Tp>
-void test017()
+const double toler016 = 2.5000000000000020e-13;
+
+// Test data for k=0.70000000000000018.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 2.9298727220933567e-16
+// mean(f - f_Boost): 4.8849813083506892e-16
+// variance(f - f_Boost): 2.0476296953421943e-31
+// stddev(f - f_Boost): 4.5250742483877478e-16
+const testcase_comp_ellint_3<double>
+data017[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data017)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data017[i].k), Tp(data017[i].nu));
-      const Tp f0 = data017[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.80000000000000004.
-testcase_comp_ellint_3<double> data018[] = {
-  { 1.9953027776647296, 0.80000000000000004, 0.0000000000000000 },
-  { 1.8910755418379521, 0.80000000000000004, 0.10000000000000001 },
-  { 1.8007226661734588, 0.80000000000000004, 0.20000000000000001 },
-  { 1.7214611048717301, 0.80000000000000004, 0.29999999999999999 },
-  { 1.6512267838651289, 0.80000000000000004, 0.40000000000000002 },
-  { 1.5884528947755532, 0.80000000000000004, 0.50000000000000000 },
-  { 1.5319262547427865, 0.80000000000000004, 0.59999999999999998 },
-  { 1.4806912324625332, 0.80000000000000004, 0.69999999999999996 },
-  { 1.4339837018309474, 0.80000000000000004, 0.80000000000000004 },
-  { 1.3911845406776222, 0.80000000000000004, 0.90000000000000002 },
+  { 1.8456939983747238, 0.70000000000000018, 0.0000000000000000, 0.0 },
+  { 1.9541347343119566, 0.70000000000000018, 0.10000000000000001, 0.0 },
+  { 2.0829290325820207, 0.70000000000000018, 0.20000000000000001, 0.0 },
+  { 2.2392290510988540, 0.70000000000000018, 0.30000000000000004, 0.0 },
+  { 2.4342502915307880, 0.70000000000000018, 0.40000000000000002, 0.0 },
+  { 2.6868019968237000, 0.70000000000000018, 0.50000000000000000, 0.0 },
+  { 3.0314573496746746, 0.70000000000000018, 0.60000000000000009, 0.0 },
+  { 3.5408408771788569, 0.70000000000000018, 0.70000000000000007, 0.0 },
+  { 4.4042405729076970, 0.70000000000000018, 0.80000000000000004, 0.0 },
+  { 6.3796094177887763, 0.70000000000000018, 0.90000000000000002, 0.0 },
 };
+const double toler017 = 2.5000000000000020e-13;
 
-// Test function for k=0.80000000000000004.
-template <typename Tp>
-void test018()
+// Test data for k=0.80000000000000004.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.1949393471095187e-16
+// mean(f - f_Boost): 9.5479180117763459e-16
+// variance(f - f_Boost): 5.4782007307014711e-34
+// stddev(f - f_Boost): 2.3405556457178006e-17
+const testcase_comp_ellint_3<double>
+data018[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data018)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data018[i].k), Tp(data018[i].nu));
-      const Tp f0 = data018[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.89999999999999991.
-testcase_comp_ellint_3<double> data019[] = {
-  { 2.2805491384227699, 0.89999999999999991, 0.0000000000000000 },
-  { 2.1537868513875282, 0.89999999999999991, 0.10000000000000001 },
-  { 2.0443194576468890, 0.89999999999999991, 0.20000000000000001 },
-  { 1.9486280260314424, 0.89999999999999991, 0.29999999999999999 },
-  { 1.8641114227238347, 0.89999999999999991, 0.40000000000000002 },
-  { 1.7888013241937859, 0.89999999999999991, 0.50000000000000000 },
-  { 1.7211781128919521, 0.89999999999999991, 0.59999999999999998 },
-  { 1.6600480747670936, 0.89999999999999991, 0.69999999999999996 },
-  { 1.6044591960982200, 0.89999999999999991, 0.80000000000000004 },
-  { 1.5536420236310944, 0.89999999999999991, 0.90000000000000002 },
+  { 1.9953027776647294, 0.80000000000000004, 0.0000000000000000, 0.0 },
+  { 2.1172616484005085, 0.80000000000000004, 0.10000000000000001, 0.0 },
+  { 2.2624789434186798, 0.80000000000000004, 0.20000000000000001, 0.0 },
+  { 2.4392042002725698, 0.80000000000000004, 0.30000000000000004, 0.0 },
+  { 2.6604037035529728, 0.80000000000000004, 0.40000000000000002, 0.0 },
+  { 2.9478781158239751, 0.80000000000000004, 0.50000000000000000, 0.0 },
+  { 3.3418121892288055, 0.80000000000000004, 0.60000000000000009, 0.0 },
+  { 3.9268876980046397, 0.80000000000000004, 0.70000000000000007, 0.0 },
+  { 4.9246422058196071, 0.80000000000000004, 0.80000000000000004, 0.0 },
+  { 7.2263259298637132, 0.80000000000000004, 0.90000000000000002, 0.0 },
 };
-
-// Test function for k=0.89999999999999991.
-template <typename Tp>
-void test019()
+const double toler018 = 2.5000000000000020e-13;
+
+// Test data for k=0.90000000000000013.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 3
+// max(|f - f_Boost| / |f_Boost|): 1.5716352001310461e-16
+// mean(f - f_Boost): 4.4408920985006264e-17
+// variance(f - f_Boost): 2.4347558803117648e-34
+// stddev(f - f_Boost): 1.5603704304785339e-17
+const testcase_comp_ellint_3<double>
+data019[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data019)
-                         / sizeof(testcase_comp_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::comp_ellint_3(Tp(data019[i].k), Tp(data019[i].nu));
-      const Tp f0 = data019[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+  { 2.2805491384227707, 0.90000000000000013, 0.0000000000000000, 0.0 },
+  { 2.4295011187834890, 0.90000000000000013, 0.10000000000000001, 0.0 },
+  { 2.6076835743348421, 0.90000000000000013, 0.20000000000000001, 0.0 },
+  { 2.8256506968858521, 0.90000000000000013, 0.30000000000000004, 0.0 },
+  { 3.1000689868578628, 0.90000000000000013, 0.40000000000000002, 0.0 },
+  { 3.4591069002104686, 0.90000000000000013, 0.50000000000000000, 0.0 },
+  { 3.9549939883570242, 0.90000000000000013, 0.60000000000000009, 0.0 },
+  { 4.6985482312992453, 0.90000000000000013, 0.70000000000000007, 0.0 },
+  { 5.9820740813645727, 0.90000000000000013, 0.80000000000000004, 0.0 },
+  { 8.9942562031858735, 0.90000000000000013, 0.90000000000000002, 0.0 },
+};
+const double toler019 = 2.5000000000000020e-13;
+
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_comp_ellint_3<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+      {
+       const Ret f = std::tr1::comp_ellint_3(data[i].k, data[i].nu);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
+int
+main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
-  test015<double>();
-  test016<double>();
-  test017<double>();
-  test018<double>();
-  test019<double>();
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
+  test(data016, toler016);
+  test(data017, toler017);
+  test(data018, toler018);
+  test(data019, toler019);
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/pr66689.cc b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/pr66689.cc
new file mode 100644 (file)
index 0000000..7b274d6
--- /dev/null
@@ -0,0 +1,20 @@
+
+#include <tr1/cmath>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  double Pi1 = std::tr1::comp_ellint_3(0.75, 0.0);
+  VERIFY(std::abs(Pi1 - 1.91099) < 0.00001);
+
+  double Pi2 = std::tr1::comp_ellint_3(0.75, 0.5);
+  VERIFY(std::abs(Pi2 - 2.80011) < 0.00001);
+}
+
+int
+main()
+{
+  test01();
+  return 0;
+}
index 390e70c..9366b47 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  conf_hyperg
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for a=0.0000000000000000, c=1.0000000000000000.
-testcase_conf_hyperg<double> data001[] = {
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          -10.000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          -9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          -8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          -7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          -6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          -5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          -4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          -3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          -2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.0000000000000000, c=1.0000000000000000.
-template <typename Tp>
-void test001()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data001[i].a), Tp(data001[i].c),
-                   Tp(data001[i].x));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_conf_hyperg<double>
+data001[21] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler001 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=2.0000000000000000.
-testcase_conf_hyperg<double> data002[] = {
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          -10.000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          -9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          -8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          -7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          -6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          -5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          -4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          -3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          -2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test002()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data002)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data002[i].a), Tp(data002[i].c),
-                   Tp(data002[i].x));
-      const Tp f0 = data002[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_conf_hyperg<double>
+data002[21] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler002 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=3.0000000000000000.
-testcase_conf_hyperg<double> data003[] = {
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          -10.000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          -9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          -8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          -7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          -6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          -5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          -4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          -3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          -2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.0000000000000000, c=3.0000000000000000.
-template <typename Tp>
-void test003()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data003)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data003[i].a), Tp(data003[i].c),
-                   Tp(data003[i].x));
-      const Tp f0 = data003[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_conf_hyperg<double>
+data003[21] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 3.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler003 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=4.0000000000000000.
-testcase_conf_hyperg<double> data004[] = {
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          -10.000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          -9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          -8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          -7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          -6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          -5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          -4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          -3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          -2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test004()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data004)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data004[i].a), Tp(data004[i].c),
-                   Tp(data004[i].x));
-      const Tp f0 = data004[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_conf_hyperg<double>
+data004[21] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 4.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler004 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=5.0000000000000000.
-testcase_conf_hyperg<double> data005[] = {
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          -10.000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          -9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          -8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          -7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          -6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          -5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          -4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          -3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          -2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.0000000000000000, c=5.0000000000000000.
-template <typename Tp>
-void test005()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data005)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data005[i].a), Tp(data005[i].c),
-                   Tp(data005[i].x));
-      const Tp f0 = data005[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_conf_hyperg<double>
+data005[21] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler005 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=6.0000000000000000.
-testcase_conf_hyperg<double> data006[] = {
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          -10.000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          -9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          -8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          -7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          -6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          -5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          -4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          -3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          -2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test006()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data006)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data006[i].a), Tp(data006[i].c),
-                   Tp(data006[i].x));
-      const Tp f0 = data006[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_conf_hyperg<double>
+data006[21] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 6.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler006 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=7.0000000000000000.
-testcase_conf_hyperg<double> data007[] = {
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          -10.000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          -9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          -8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          -7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          -6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          -5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          -4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          -3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          -2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.0000000000000000, c=7.0000000000000000.
-template <typename Tp>
-void test007()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data007)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data007[i].a), Tp(data007[i].c),
-                   Tp(data007[i].x));
-      const Tp f0 = data007[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_conf_hyperg<double>
+data007[21] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 7.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler007 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=8.0000000000000000.
-testcase_conf_hyperg<double> data008[] = {
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          -10.000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          -9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          -8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          -7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          -6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          -5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          -4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          -3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          -2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test008()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data008)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data008[i].a), Tp(data008[i].c),
-                   Tp(data008[i].x));
-      const Tp f0 = data008[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_conf_hyperg<double>
+data008[21] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 8.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler008 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=9.0000000000000000.
-testcase_conf_hyperg<double> data009[] = {
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          -10.000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          -9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          -8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          -7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          -6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          -5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          -4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          -3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          -2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.0000000000000000, c=9.0000000000000000.
-template <typename Tp>
-void test009()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data009)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data009[i].a), Tp(data009[i].c),
-                   Tp(data009[i].x));
-      const Tp f0 = data009[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_conf_hyperg<double>
+data009[21] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 9.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler009 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, c=10.000000000000000.
-testcase_conf_hyperg<double> data010[] = {
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          -10.000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          -9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          -8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          -7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          -6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          -5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          -4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          -3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          -2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          1.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          3.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          5.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          7.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          9.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test010()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data010)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data010[i].a), Tp(data010[i].c),
-                   Tp(data010[i].x));
-      const Tp f0 = data010[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_conf_hyperg<double>
+data010[21] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler010 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=1.0000000000000000.
-testcase_conf_hyperg<double> data011[] = {
-  { 0.18354081260932853, 0.50000000000000000, 1.0000000000000000,
-          -10.000000000000000 },
-  { 0.19419827762834704, 0.50000000000000000, 1.0000000000000000,
-          -9.0000000000000000 },
-  { 0.20700192122398287, 0.50000000000000000, 1.0000000000000000,
-          -8.0000000000000000 },
-  { 0.22280243801078498, 0.50000000000000000, 1.0000000000000000,
-          -7.0000000000000000 },
-  { 0.24300035416182644, 0.50000000000000000, 1.0000000000000000,
-          -6.0000000000000000 },
-  { 0.27004644161220326, 0.50000000000000000, 1.0000000000000000,
-          -5.0000000000000000 },
-  { 0.30850832255367100, 0.50000000000000000, 1.0000000000000000,
-          -4.0000000000000000 },
-  { 0.36743360905415834, 0.50000000000000000, 1.0000000000000000,
-          -3.0000000000000000 },
-  { 0.46575960759364043, 0.50000000000000000, 1.0000000000000000,
-          -2.0000000000000000 },
-  { 0.64503527044915010, 0.50000000000000000, 1.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
-          0.0000000000000000 },
-  { 1.7533876543770910, 0.50000000000000000, 1.0000000000000000,
-          1.0000000000000000 },
-  { 3.4415238691253336, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000 },
-  { 7.3801013214774045, 0.50000000000000000, 1.0000000000000000,
-          3.0000000000000000 },
-  { 16.843983681258987, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000 },
-  { 40.078445504076413, 0.50000000000000000, 1.0000000000000000,
-          5.0000000000000000 },
-  { 98.033339697812551, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000 },
-  { 244.33254130132133, 0.50000000000000000, 1.0000000000000000,
-          7.0000000000000000 },
-  { 617.06403040562418, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000 },
-  { 1573.6049422133683, 0.50000000000000000, 1.0000000000000000,
-          9.0000000000000000 },
-  { 4042.7554308904046, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.50000000000000000, c=1.0000000000000000.
-template <typename Tp>
-void test011()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data011)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data011[i].a), Tp(data011[i].c),
-                   Tp(data011[i].x));
-      const Tp f0 = data011[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
-}
+// max(|f - f_GSL|): 1.1823431123048067e-11 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.8179920344425603e-13
+// mean(f - f_GSL): -5.8836665698233256e-13
+// variance(f - f_GSL): 6.6269003617242792e-24
+// stddev(f - f_GSL): 2.5742766676727424e-12
+const testcase_conf_hyperg<double>
+data011[21] =
+{
+  { 0.18354081260932842, 0.50000000000000000, 1.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.19419827762834704, 0.50000000000000000, 1.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.20700192122398287, 0.50000000000000000, 1.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.22280243801078498, 0.50000000000000000, 1.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.24300035416182644, 0.50000000000000000, 1.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.27004644161220326, 0.50000000000000000, 1.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.30850832255367100, 0.50000000000000000, 1.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.36743360905415834, 0.50000000000000000, 1.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.46575960759364043, 0.50000000000000000, 1.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.64503527044915010, 0.50000000000000000, 1.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.7533876543770910, 0.50000000000000000, 1.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 3.4415238691253340, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 7.3801013214774045, 0.50000000000000000, 1.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 16.843983681258987, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 40.078445504076420, 0.50000000000000000, 1.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 98.033339697812693, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 244.33254130132138, 0.50000000000000000, 1.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 617.06403040562441, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 1573.6049422133694, 0.50000000000000000, 1.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 4042.7554308904109, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler011 = 1.0000000000000006e-11;
 
 // Test data for a=0.50000000000000000, c=2.0000000000000000.
-testcase_conf_hyperg<double> data012[] = {
-  { 0.34751307955387079, 0.50000000000000000, 2.0000000000000000,
-          -10.000000000000000 },
-  { 0.36515709992587503, 0.50000000000000000, 2.0000000000000000,
-          -9.0000000000000000 },
-  { 0.38575276072642301, 0.50000000000000000, 2.0000000000000000,
-          -8.0000000000000000 },
-  { 0.41020241461382889, 0.50000000000000000, 2.0000000000000000,
-          -7.0000000000000000 },
-  { 0.43982706745912625, 0.50000000000000000, 2.0000000000000000,
-          -6.0000000000000000 },
-  { 0.47663109114346930, 0.50000000000000000, 2.0000000000000000,
-          -5.0000000000000000 },
-  { 0.52377761180260862, 0.50000000000000000, 2.0000000000000000,
-          -4.0000000000000000 },
-  { 0.58647299647508400, 0.50000000000000000, 2.0000000000000000,
-          -3.0000000000000000 },
-  { 0.67367002294334866, 0.50000000000000000, 2.0000000000000000,
-          -2.0000000000000000 },
-  { 0.80145607363402172, 0.50000000000000000, 2.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
-          0.0000000000000000 },
-  { 1.3281918274866849, 0.50000000000000000, 2.0000000000000000,
-          1.0000000000000000 },
-  { 1.9052621465543667, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000 },
-  { 2.9805776178019903, 0.50000000000000000, 2.0000000000000000,
-          3.0000000000000000 },
-  { 5.0906787293171654, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000 },
-  { 9.4185650450425964, 0.50000000000000000, 2.0000000000000000,
-          5.0000000000000000 },
-  { 18.627776225141986, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000 },
-  { 38.823513069699615, 0.50000000000000000, 2.0000000000000000,
-          7.0000000000000000 },
-  { 84.215287700426927, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000 },
-  { 188.31125697734240, 0.50000000000000000, 2.0000000000000000,
-          9.0000000000000000 },
-  { 431.02590173952245, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.50000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test012()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data012)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data012[i].a), Tp(data012[i].c),
-                   Tp(data012[i].x));
-      const Tp f0 = data012[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.0231815394945443e-12 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.3738284297189904e-15
+// mean(f - f_GSL): -5.2558486663385687e-14
+// variance(f - f_GSL): 4.9460728311082100e-26
+// stddev(f - f_GSL): 2.2239768054339527e-13
+const testcase_conf_hyperg<double>
+data012[21] =
+{
+  { 0.34751307955387056, 0.50000000000000000, 2.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.36515709992587503, 0.50000000000000000, 2.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.38575276072642301, 0.50000000000000000, 2.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.41020241461382889, 0.50000000000000000, 2.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.43982706745912625, 0.50000000000000000, 2.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.47663109114346930, 0.50000000000000000, 2.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.52377761180260862, 0.50000000000000000, 2.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.58647299647508400, 0.50000000000000000, 2.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.67367002294334866, 0.50000000000000000, 2.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.80145607363402172, 0.50000000000000000, 2.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.3281918274866849, 0.50000000000000000, 2.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.9052621465543667, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 2.9805776178019903, 0.50000000000000000, 2.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 5.0906787293171654, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 9.4185650450425982, 0.50000000000000000, 2.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 18.627776225142014, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 38.823513069699622, 0.50000000000000000, 2.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 84.215287700426956, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 188.31125697734257, 0.50000000000000000, 2.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 431.02590173952319, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler012 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=3.0000000000000000.
-testcase_conf_hyperg<double> data013[] = {
-  { 0.44148780381255515, 0.50000000000000000, 3.0000000000000000,
-          -10.000000000000000 },
-  { 0.46154890030153722, 0.50000000000000000, 3.0000000000000000,
-          -9.0000000000000000 },
-  { 0.48454520771815751, 0.50000000000000000, 3.0000000000000000,
-          -8.0000000000000000 },
-  { 0.51124131917976301, 0.50000000000000000, 3.0000000000000000,
-          -7.0000000000000000 },
-  { 0.54269682032387934, 0.50000000000000000, 3.0000000000000000,
-          -6.0000000000000000 },
-  { 0.58041888164962119, 0.50000000000000000, 3.0000000000000000,
-          -5.0000000000000000 },
-  { 0.62661371932049892, 0.50000000000000000, 3.0000000000000000,
-          -4.0000000000000000 },
-  { 0.68461315644636744, 0.50000000000000000, 3.0000000000000000,
-          -3.0000000000000000 },
-  { 0.75961975369132639, 0.50000000000000000, 3.0000000000000000,
-          -2.0000000000000000 },
-  { 0.86004702726553350, 0.50000000000000000, 3.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 3.0000000000000000,
-          0.0000000000000000 },
-  { 1.2039946674617061, 0.50000000000000000, 3.0000000000000000,
-          1.0000000000000000 },
-  { 1.5161750470251780, 0.50000000000000000, 3.0000000000000000,
-          2.0000000000000000 },
-  { 2.0187596221024697, 0.50000000000000000, 3.0000000000000000,
-          3.0000000000000000 },
-  { 2.8698033217756134, 0.50000000000000000, 3.0000000000000000,
-          4.0000000000000000 },
-  { 4.3821186043144440, 0.50000000000000000, 3.0000000000000000,
-          5.0000000000000000 },
-  { 7.1913541951514128, 0.50000000000000000, 3.0000000000000000,
-          6.0000000000000000 },
-  { 12.620107286909638, 0.50000000000000000, 3.0000000000000000,
-          7.0000000000000000 },
-  { 23.478926483036350, 0.50000000000000000, 3.0000000000000000,
-          8.0000000000000000 },
-  { 45.852981860749004, 0.50000000000000000, 3.0000000000000000,
-          9.0000000000000000 },
-  { 93.137265099245667, 0.50000000000000000, 3.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.50000000000000000, c=3.0000000000000000.
-template <typename Tp>
-void test013()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data013)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data013[i].a), Tp(data013[i].c),
-                   Tp(data013[i].x));
-      const Tp f0 = data013[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.4158453015843406e-13 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.5938546713928606e-15
+// mean(f - f_GSL): -1.2672402809650001e-14
+// variance(f - f_GSL): 2.7510400074856614e-27
+// stddev(f - f_GSL): 5.2450357553458695e-14
+const testcase_conf_hyperg<double>
+data013[21] =
+{
+  { 0.44148780381255504, 0.50000000000000000, 3.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.46154890030153722, 0.50000000000000000, 3.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.48454520771815751, 0.50000000000000000, 3.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.51124131917976301, 0.50000000000000000, 3.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.54269682032387934, 0.50000000000000000, 3.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.58041888164962119, 0.50000000000000000, 3.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.62661371932049892, 0.50000000000000000, 3.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.68461315644636744, 0.50000000000000000, 3.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.75961975369132639, 0.50000000000000000, 3.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.86004702726553350, 0.50000000000000000, 3.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 3.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.2039946674617061, 0.50000000000000000, 3.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.5161750470251780, 0.50000000000000000, 3.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 2.0187596221024697, 0.50000000000000000, 3.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 2.8698033217756134, 0.50000000000000000, 3.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 4.3821186043144449, 0.50000000000000000, 3.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 7.1913541951514235, 0.50000000000000000, 3.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 12.620107286909638, 0.50000000000000000, 3.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 23.478926483036361, 0.50000000000000000, 3.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 45.852981860749047, 0.50000000000000000, 3.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 93.137265099245838, 0.50000000000000000, 3.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler013 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=4.0000000000000000.
-testcase_conf_hyperg<double> data014[] = {
-  { 0.50723143075298227, 0.50000000000000000, 4.0000000000000000,
-          -10.000000000000000 },
-  { 0.52815420026166782, 0.50000000000000000, 4.0000000000000000,
-          -9.0000000000000000 },
-  { 0.55181651516426766, 0.50000000000000000, 4.0000000000000000,
-          -8.0000000000000000 },
-  { 0.57884767287882366, 0.50000000000000000, 4.0000000000000000,
-          -7.0000000000000000 },
-  { 0.61008828324275399, 0.50000000000000000, 4.0000000000000000,
-          -6.0000000000000000 },
-  { 0.64668451853659259, 0.50000000000000000, 4.0000000000000000,
-          -5.0000000000000000 },
-  { 0.69023479867386495, 0.50000000000000000, 4.0000000000000000,
-          -4.0000000000000000 },
-  { 0.74302365975861406, 0.50000000000000000, 4.0000000000000000,
-          -3.0000000000000000 },
-  { 0.80840402753201868, 0.50000000000000000, 4.0000000000000000,
-          -2.0000000000000000 },
-  { 0.89143814400301236, 0.50000000000000000, 4.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 4.0000000000000000,
-          0.0000000000000000 },
-  { 1.1467204168940972, 0.50000000000000000, 4.0000000000000000,
-          1.0000000000000000 },
-  { 1.3525055369951857, 0.50000000000000000, 4.0000000000000000,
-          2.0000000000000000 },
-  { 1.6530571499633475, 0.50000000000000000, 4.0000000000000000,
-          3.0000000000000000 },
-  { 2.1112387416058045, 0.50000000000000000, 4.0000000000000000,
-          4.0000000000000000 },
-  { 2.8410480336278194, 0.50000000000000000, 4.0000000000000000,
-          5.0000000000000000 },
-  { 4.0550562221854669, 0.50000000000000000, 4.0000000000000000,
-          6.0000000000000000 },
-  { 6.1601039044778592, 0.50000000000000000, 4.0000000000000000,
-          7.0000000000000000 },
-  { 9.9538034144264458, 0.50000000000000000, 4.0000000000000000,
-          8.0000000000000000 },
-  { 17.034704868473899, 0.50000000000000000, 4.0000000000000000,
-          9.0000000000000000 },
-  { 30.671445325428369, 0.50000000000000000, 4.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.50000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test014()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data014)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data014[i].a), Tp(data014[i].c),
-                   Tp(data014[i].x));
-      const Tp f0 = data014[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 9.2370555648813024e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.0116140491179400e-15
+// mean(f - f_GSL): -4.1977003883446396e-15
+// variance(f - f_GSL): 4.0815875125113411e-28
+// stddev(f - f_GSL): 2.0202939173574080e-14
+const testcase_conf_hyperg<double>
+data014[21] =
+{
+  { 0.50723143075298205, 0.50000000000000000, 4.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.52815420026166782, 0.50000000000000000, 4.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.55181651516426766, 0.50000000000000000, 4.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.57884767287882366, 0.50000000000000000, 4.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.61008828324275399, 0.50000000000000000, 4.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.64668451853659259, 0.50000000000000000, 4.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.69023479867386495, 0.50000000000000000, 4.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.74302365975861406, 0.50000000000000000, 4.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.80840402753201868, 0.50000000000000000, 4.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.89143814400301236, 0.50000000000000000, 4.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 4.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.1467204168940972, 0.50000000000000000, 4.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.3525055369951857, 0.50000000000000000, 4.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.6530571499633475, 0.50000000000000000, 4.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 2.1112387416058045, 0.50000000000000000, 4.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 2.8410480336278199, 0.50000000000000000, 4.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 4.0550562221854713, 0.50000000000000000, 4.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 6.1601039044778583, 0.50000000000000000, 4.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 9.9538034144264511, 0.50000000000000000, 4.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 17.034704868473916, 0.50000000000000000, 4.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 30.671445325428429, 0.50000000000000000, 4.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler014 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=5.0000000000000000.
-testcase_conf_hyperg<double> data015[] = {
-  { 0.55715239162383312, 0.50000000000000000, 5.0000000000000000,
-          -10.000000000000000 },
-  { 0.57823135269518977, 0.50000000000000000, 5.0000000000000000,
-          -9.0000000000000000 },
-  { 0.60181688556797253, 0.50000000000000000, 5.0000000000000000,
-          -8.0000000000000000 },
-  { 0.62842688147829928, 0.50000000000000000, 5.0000000000000000,
-          -7.0000000000000000 },
-  { 0.65873434489521876, 0.50000000000000000, 5.0000000000000000,
-          -6.0000000000000000 },
-  { 0.69362872731932568, 0.50000000000000000, 5.0000000000000000,
-          -5.0000000000000000 },
-  { 0.73430741618153195, 0.50000000000000000, 5.0000000000000000,
-          -4.0000000000000000 },
-  { 0.78241503593870543, 0.50000000000000000, 5.0000000000000000,
-          -3.0000000000000000 },
-  { 0.84026013345254857, 0.50000000000000000, 5.0000000000000000,
-          -2.0000000000000000 },
-  { 0.91115976433208690, 0.50000000000000000, 5.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
-          0.0000000000000000 },
-  { 1.1141687602185972, 0.50000000000000000, 5.0000000000000000,
-          1.0000000000000000 },
-  { 1.2651443108002267, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000 },
-  { 1.4712624889419719, 0.50000000000000000, 5.0000000000000000,
-          3.0000000000000000 },
-  { 1.7626460645467978, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000 },
-  { 2.1901779328181084, 0.50000000000000000, 5.0000000000000000,
-          5.0000000000000000 },
-  { 2.8421796979457072, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000 },
-  { 3.8760354586203549, 0.50000000000000000, 5.0000000000000000,
-          7.0000000000000000 },
-  { 5.5792940156545505, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000 },
-  { 8.4898429002463196, 0.50000000000000000, 5.0000000000000000,
-          9.0000000000000000 },
-  { 13.636227878037923, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.50000000000000000, c=5.0000000000000000.
-template <typename Tp>
-void test015()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data015)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data015[i].a), Tp(data015[i].c),
-                   Tp(data015[i].x));
-      const Tp f0 = data015[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.5527136788005009e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.6053493022967024e-15
+// mean(f - f_GSL): -1.8503717077085944e-15
+// variance(f - f_GSL): 5.9541536579357277e-29
+// stddev(f - f_GSL): 7.7163162570851951e-15
+const testcase_conf_hyperg<double>
+data015[21] =
+{
+  { 0.55715239162383312, 0.50000000000000000, 5.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.57823135269518977, 0.50000000000000000, 5.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.60181688556797253, 0.50000000000000000, 5.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.62842688147829928, 0.50000000000000000, 5.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.65873434489521876, 0.50000000000000000, 5.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.69362872731932568, 0.50000000000000000, 5.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.73430741618153195, 0.50000000000000000, 5.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.78241503593870543, 0.50000000000000000, 5.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.84026013345254857, 0.50000000000000000, 5.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.91115976433208690, 0.50000000000000000, 5.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.1141687602185972, 0.50000000000000000, 5.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.2651443108002267, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.4712624889419719, 0.50000000000000000, 5.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.7626460645467978, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 2.1901779328181084, 0.50000000000000000, 5.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 2.8421796979457090, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 3.8760354586203540, 0.50000000000000000, 5.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 5.5792940156545541, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 8.4898429002463303, 0.50000000000000000, 5.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 13.636227878037948, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler015 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=6.0000000000000000.
-testcase_conf_hyperg<double> data016[] = {
-  { 0.59687111919499192, 0.50000000000000000, 6.0000000000000000,
-          -10.000000000000000 },
-  { 0.61774982278057033, 0.50000000000000000, 6.0000000000000000,
-          -9.0000000000000000 },
-  { 0.64090744485124451, 0.50000000000000000, 6.0000000000000000,
-          -8.0000000000000000 },
-  { 0.66677322792860194, 0.50000000000000000, 6.0000000000000000,
-          -7.0000000000000000 },
-  { 0.69589293014100995, 0.50000000000000000, 6.0000000000000000,
-          -6.0000000000000000 },
-  { 0.72897040032571048, 0.50000000000000000, 6.0000000000000000,
-          -5.0000000000000000 },
-  { 0.76692755408207181, 0.50000000000000000, 6.0000000000000000,
-          -4.0000000000000000 },
-  { 0.81099244559101891, 0.50000000000000000, 6.0000000000000000,
-          -3.0000000000000000 },
-  { 0.86283102401276535, 0.50000000000000000, 6.0000000000000000,
-          -2.0000000000000000 },
-  { 0.92474809223976406, 0.50000000000000000, 6.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 6.0000000000000000,
-          0.0000000000000000 },
-  { 1.0932912594628821, 0.50000000000000000, 6.0000000000000000,
-          1.0000000000000000 },
-  { 1.2115798426781204, 0.50000000000000000, 6.0000000000000000,
-          2.0000000000000000 },
-  { 1.3654106750890422, 0.50000000000000000, 6.0000000000000000,
-          3.0000000000000000 },
-  { 1.5711704305419896, 0.50000000000000000, 6.0000000000000000,
-          4.0000000000000000 },
-  { 1.8549798357448213, 0.50000000000000000, 6.0000000000000000,
-          5.0000000000000000 },
-  { 2.2595503871694818, 0.50000000000000000, 6.0000000000000000,
-          6.0000000000000000 },
-  { 2.8565038772876936, 0.50000000000000000, 6.0000000000000000,
-          7.0000000000000000 },
-  { 3.7689325736317811, 0.50000000000000000, 6.0000000000000000,
-          8.0000000000000000 },
-  { 5.2134738554699460, 0.50000000000000000, 6.0000000000000000,
-          9.0000000000000000 },
-  { 7.5801565545352725, 0.50000000000000000, 6.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.50000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test016()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data016)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data016[i].a), Tp(data016[i].c),
-                   Tp(data016[i].x));
-      const Tp f0 = data016[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.1316282072803006e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.8121163355193836e-15
+// mean(f - f_GSL): -1.1525172350870673e-15
+// variance(f - f_GSL): 2.1345314152612258e-29
+// stddev(f - f_GSL): 4.6200989332061126e-15
+const testcase_conf_hyperg<double>
+data016[21] =
+{
+  { 0.59687111919499192, 0.50000000000000000, 6.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.61774982278057033, 0.50000000000000000, 6.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.64090744485124451, 0.50000000000000000, 6.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.66677322792860194, 0.50000000000000000, 6.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.69589293014100995, 0.50000000000000000, 6.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.72897040032571048, 0.50000000000000000, 6.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.76692755408207181, 0.50000000000000000, 6.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.81099244559101891, 0.50000000000000000, 6.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.86283102401276535, 0.50000000000000000, 6.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.92474809223976406, 0.50000000000000000, 6.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 6.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0932912594628821, 0.50000000000000000, 6.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.2115798426781204, 0.50000000000000000, 6.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.3654106750890422, 0.50000000000000000, 6.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.5711704305419896, 0.50000000000000000, 6.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.8549798357448213, 0.50000000000000000, 6.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 2.2595503871694826, 0.50000000000000000, 6.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 2.8565038772876932, 0.50000000000000000, 6.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 3.7689325736317838, 0.50000000000000000, 6.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 5.2134738554699531, 0.50000000000000000, 6.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 7.5801565545352858, 0.50000000000000000, 6.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler016 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=7.0000000000000000.
-testcase_conf_hyperg<double> data017[] = {
-  { 0.62946736953754090, 0.50000000000000000, 7.0000000000000000,
-          -10.000000000000000 },
-  { 0.64995830964827050, 0.50000000000000000, 7.0000000000000000,
-          -9.0000000000000000 },
-  { 0.67251910396276349, 0.50000000000000000, 7.0000000000000000,
-          -8.0000000000000000 },
-  { 0.69750870596083636, 0.50000000000000000, 7.0000000000000000,
-          -7.0000000000000000 },
-  { 0.72537539174856436, 0.50000000000000000, 7.0000000000000000,
-          -6.0000000000000000 },
-  { 0.75668588434835504, 0.50000000000000000, 7.0000000000000000,
-          -5.0000000000000000 },
-  { 0.79216623458879654, 0.50000000000000000, 7.0000000000000000,
-          -4.0000000000000000 },
-  { 0.83276010491326891, 0.50000000000000000, 7.0000000000000000,
-          -3.0000000000000000 },
-  { 0.87971323375878940, 0.50000000000000000, 7.0000000000000000,
-          -2.0000000000000000 },
-  { 0.93469794840150233, 0.50000000000000000, 7.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 7.0000000000000000,
-          0.0000000000000000 },
-  { 1.0788040971101556, 0.50000000000000000, 7.0000000000000000,
-          1.0000000000000000 },
-  { 1.1756385516794761, 0.50000000000000000, 7.0000000000000000,
-          2.0000000000000000 },
-  { 1.2970810749099917, 0.50000000000000000, 7.0000000000000000,
-          3.0000000000000000 },
-  { 1.4529009687665237, 0.50000000000000000, 7.0000000000000000,
-          4.0000000000000000 },
-  { 1.6579437149144023, 0.50000000000000000, 7.0000000000000000,
-          5.0000000000000000 },
-  { 1.9353010489337750, 0.50000000000000000, 7.0000000000000000,
-          6.0000000000000000 },
-  { 2.3217458547039813, 0.50000000000000000, 7.0000000000000000,
-          7.0000000000000000 },
-  { 2.8772254607646004, 0.50000000000000000, 7.0000000000000000,
-          8.0000000000000000 },
-  { 3.7017478151936545, 0.50000000000000000, 7.0000000000000000,
-          9.0000000000000000 },
-  { 4.9659500648552148, 0.50000000000000000, 7.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.50000000000000000, c=7.0000000000000000.
-template <typename Tp>
-void test017()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data017)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data017[i].a), Tp(data017[i].c),
-                   Tp(data017[i].x));
-      const Tp f0 = data017[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.2434497875801753e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.5039514520700816e-15
+// mean(f - f_GSL): -8.2473710400725917e-16
+// variance(f - f_GSL): 7.0762936218606606e-30
+// stddev(f - f_GSL): 2.6601303768538602e-15
+const testcase_conf_hyperg<double>
+data017[21] =
+{
+  { 0.62946736953754079, 0.50000000000000000, 7.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.64995830964827050, 0.50000000000000000, 7.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.67251910396276349, 0.50000000000000000, 7.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.69750870596083636, 0.50000000000000000, 7.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.72537539174856436, 0.50000000000000000, 7.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.75668588434835504, 0.50000000000000000, 7.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.79216623458879654, 0.50000000000000000, 7.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.83276010491326891, 0.50000000000000000, 7.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.87971323375878940, 0.50000000000000000, 7.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.93469794840150233, 0.50000000000000000, 7.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 7.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0788040971101556, 0.50000000000000000, 7.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.1756385516794761, 0.50000000000000000, 7.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.2970810749099917, 0.50000000000000000, 7.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.4529009687665237, 0.50000000000000000, 7.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.6579437149144023, 0.50000000000000000, 7.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1.9353010489337754, 0.50000000000000000, 7.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 2.3217458547039813, 0.50000000000000000, 7.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 2.8772254607646022, 0.50000000000000000, 7.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 3.7017478151936585, 0.50000000000000000, 7.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 4.9659500648552237, 0.50000000000000000, 7.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler017 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=8.0000000000000000.
-testcase_conf_hyperg<double> data018[] = {
-  { 0.65682574389601245, 0.50000000000000000, 8.0000000000000000,
-          -10.000000000000000 },
-  { 0.67683106084440448, 0.50000000000000000, 8.0000000000000000,
-          -9.0000000000000000 },
-  { 0.69871884883136481, 0.50000000000000000, 8.0000000000000000,
-          -8.0000000000000000 },
-  { 0.72279201131268422, 0.50000000000000000, 8.0000000000000000,
-          -7.0000000000000000 },
-  { 0.74942315553647221, 0.50000000000000000, 8.0000000000000000,
-          -6.0000000000000000 },
-  { 0.77907555763819503, 0.50000000000000000, 8.0000000000000000,
-          -5.0000000000000000 },
-  { 0.81233192258476394, 0.50000000000000000, 8.0000000000000000,
-          -4.0000000000000000 },
-  { 0.84993438521252052, 0.50000000000000000, 8.0000000000000000,
-          -3.0000000000000000 },
-  { 0.89284095871461888, 0.50000000000000000, 8.0000000000000000,
-          -2.0000000000000000 },
-  { 0.94230641231038748, 0.50000000000000000, 8.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 8.0000000000000000,
-          0.0000000000000000 },
-  { 1.0681796709163929, 0.50000000000000000, 8.0000000000000000,
-          1.0000000000000000 },
-  { 1.1499542693515108, 0.50000000000000000, 8.0000000000000000,
-          2.0000000000000000 },
-  { 1.2496850956712680, 0.50000000000000000, 8.0000000000000000,
-          3.0000000000000000 },
-  { 1.3736119127266571, 0.50000000000000000, 8.0000000000000000,
-          4.0000000000000000 },
-  { 1.5308465522192733, 0.50000000000000000, 8.0000000000000000,
-          5.0000000000000000 },
-  { 1.7349787653671500, 0.50000000000000000, 8.0000000000000000,
-          6.0000000000000000 },
-  { 2.0067188996039378, 0.50000000000000000, 8.0000000000000000,
-          7.0000000000000000 },
-  { 2.3783255204306930, 0.50000000000000000, 8.0000000000000000,
-          8.0000000000000000 },
-  { 2.9011558746255721, 0.50000000000000000, 8.0000000000000000,
-          9.0000000000000000 },
-  { 3.6587666457431167, 0.50000000000000000, 8.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.50000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test018()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data018)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data018[i].a), Tp(data018[i].c),
-                   Tp(data018[i].x));
-      const Tp f0 = data018[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.0658141036401503e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.9130420352995081e-15
+// mean(f - f_GSL): -6.7670736739057157e-16
+// variance(f - f_GSL): 5.2305234496654133e-30
+// stddev(f - f_GSL): 2.2870337666211692e-15
+const testcase_conf_hyperg<double>
+data018[21] =
+{
+  { 0.65682574389601267, 0.50000000000000000, 8.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.67683106084440448, 0.50000000000000000, 8.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.69871884883136481, 0.50000000000000000, 8.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.72279201131268422, 0.50000000000000000, 8.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.74942315553647221, 0.50000000000000000, 8.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.77907555763819503, 0.50000000000000000, 8.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.81233192258476394, 0.50000000000000000, 8.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.84993438521252052, 0.50000000000000000, 8.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.89284095871461888, 0.50000000000000000, 8.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.94230641231038748, 0.50000000000000000, 8.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 8.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0681796709163929, 0.50000000000000000, 8.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.1499542693515108, 0.50000000000000000, 8.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.2496850956712680, 0.50000000000000000, 8.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.3736119127266571, 0.50000000000000000, 8.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.5308465522192733, 0.50000000000000000, 8.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1.7349787653671505, 0.50000000000000000, 8.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 2.0067188996039378, 0.50000000000000000, 8.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 2.3783255204306939, 0.50000000000000000, 8.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 2.9011558746255748, 0.50000000000000000, 8.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 3.6587666457431234, 0.50000000000000000, 8.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler018 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=9.0000000000000000.
-testcase_conf_hyperg<double> data019[] = {
-  { 0.68018654063475448, 0.50000000000000000, 9.0000000000000000,
-          -10.000000000000000 },
-  { 0.69965870094538662, 0.50000000000000000, 9.0000000000000000,
-          -9.0000000000000000 },
-  { 0.72084701020942776, 0.50000000000000000, 9.0000000000000000,
-          -8.0000000000000000 },
-  { 0.74400928635822572, 0.50000000000000000, 9.0000000000000000,
-          -7.0000000000000000 },
-  { 0.76945859319172982, 0.50000000000000000, 9.0000000000000000,
-          -6.0000000000000000 },
-  { 0.79757868270124699, 0.50000000000000000, 9.0000000000000000,
-          -5.0000000000000000 },
-  { 0.82884476649794248, 0.50000000000000000, 9.0000000000000000,
-          -4.0000000000000000 },
-  { 0.86385180214855140, 0.50000000000000000, 9.0000000000000000,
-          -3.0000000000000000 },
-  { 0.90335351612716308, 0.50000000000000000, 9.0000000000000000,
-          -2.0000000000000000 },
-  { 0.94831697594473685, 0.50000000000000000, 9.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 9.0000000000000000,
-          0.0000000000000000 },
-  { 1.0600626000640645, 0.50000000000000000, 9.0000000000000000,
-          1.0000000000000000 },
-  { 1.1307298999505393, 0.50000000000000000, 9.0000000000000000,
-          2.0000000000000000 },
-  { 1.2150341092774180, 0.50000000000000000, 9.0000000000000000,
-          3.0000000000000000 },
-  { 1.3171798023006840, 0.50000000000000000, 9.0000000000000000,
-          4.0000000000000000 },
-  { 1.4431045594091672, 0.50000000000000000, 9.0000000000000000,
-          5.0000000000000000 },
-  { 1.6013540635087158, 0.50000000000000000, 9.0000000000000000,
-          6.0000000000000000 },
-  { 1.8044714074708206, 0.50000000000000000, 9.0000000000000000,
-          7.0000000000000000 },
-  { 2.0712406108144252, 0.50000000000000000, 9.0000000000000000,
-          8.0000000000000000 },
-  { 2.4303714711293125, 0.50000000000000000, 9.0000000000000000,
-          9.0000000000000000 },
-  { 2.9266541358556246, 0.50000000000000000, 9.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.50000000000000000, c=9.0000000000000000.
-template <typename Tp>
-void test019()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data019)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data019[i].a), Tp(data019[i].c),
-                   Tp(data019[i].x));
-      const Tp f0 = data019[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 7.1054273576010019e-15 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.4278329545502228e-15
+// mean(f - f_GSL): -2.7491236800241972e-16
+// variance(f - f_GSL): 2.4494365887143733e-30
+// stddev(f - f_GSL): 1.5650675987683002e-15
+const testcase_conf_hyperg<double>
+data019[21] =
+{
+  { 0.68018654063475448, 0.50000000000000000, 9.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.69965870094538662, 0.50000000000000000, 9.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.72084701020942776, 0.50000000000000000, 9.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.74400928635822572, 0.50000000000000000, 9.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.76945859319172982, 0.50000000000000000, 9.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.79757868270124699, 0.50000000000000000, 9.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.82884476649794248, 0.50000000000000000, 9.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.86385180214855140, 0.50000000000000000, 9.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.90335351612716308, 0.50000000000000000, 9.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.94831697594473685, 0.50000000000000000, 9.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 9.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0600626000640645, 0.50000000000000000, 9.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.1307298999505393, 0.50000000000000000, 9.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.2150341092774180, 0.50000000000000000, 9.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.3171798023006840, 0.50000000000000000, 9.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.4431045594091672, 0.50000000000000000, 9.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1.6013540635087158, 0.50000000000000000, 9.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1.8044714074708206, 0.50000000000000000, 9.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 2.0712406108144257, 0.50000000000000000, 9.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 2.4303714711293143, 0.50000000000000000, 9.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 2.9266541358556295, 0.50000000000000000, 9.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler019 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, c=10.000000000000000.
-testcase_conf_hyperg<double> data020[] = {
-  { 0.70040954461104077, 0.50000000000000000, 10.000000000000000,
-          -10.000000000000000 },
-  { 0.71933025737654377, 0.50000000000000000, 10.000000000000000,
-          -9.0000000000000000 },
-  { 0.73981995758615049, 0.50000000000000000, 10.000000000000000,
-          -8.0000000000000000 },
-  { 0.76209985272755054, 0.50000000000000000, 10.000000000000000,
-          -7.0000000000000000 },
-  { 0.78643553963087975, 0.50000000000000000, 10.000000000000000,
-          -6.0000000000000000 },
-  { 0.81314860510626796, 0.50000000000000000, 10.000000000000000,
-          -5.0000000000000000 },
-  { 0.84263196565226672, 0.50000000000000000, 10.000000000000000,
-          -4.0000000000000000 },
-  { 0.87537037798496642, 0.50000000000000000, 10.000000000000000,
-          -3.0000000000000000 },
-  { 0.91196818568151450, 0.50000000000000000, 10.000000000000000,
-          -2.0000000000000000 },
-  { 0.95318731786229316, 0.50000000000000000, 10.000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
-          0.0000000000000000 },
-  { 1.0536628587304602, 0.50000000000000000, 10.000000000000000,
-          1.0000000000000000 },
-  { 1.1158225648376323, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000 },
-  { 1.1886686247111011, 0.50000000000000000, 10.000000000000000,
-          3.0000000000000000 },
-  { 1.2751576744751334, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000 },
-  { 1.3793478044961116, 0.50000000000000000, 10.000000000000000,
-          5.0000000000000000 },
-  { 1.5069047234443802, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000 },
-  { 1.6658803233122232, 0.50000000000000000, 10.000000000000000,
-          7.0000000000000000 },
-  { 1.8679295659745196, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000 },
-  { 2.1302432955522042, 0.50000000000000000, 10.000000000000000,
-          9.0000000000000000 },
-  { 2.4786679001777268, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=0.50000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test020()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data020)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data020[i].a), Tp(data020[i].c),
-                   Tp(data020[i].x));
-      const Tp f0 = data020[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 5.3290705182007514e-15 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.1499735877560022e-15
+// mean(f - f_GSL): -3.4892723631076348e-16
+// variance(f - f_GSL): 1.3020959231780839e-30
+// stddev(f - f_GSL): 1.1410941780493336e-15
+const testcase_conf_hyperg<double>
+data020[21] =
+{
+  { 0.70040954461104099, 0.50000000000000000, 10.000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.71933025737654444, 0.50000000000000000, 10.000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.73981995758615027, 0.50000000000000000, 10.000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.76209985272755054, 0.50000000000000000, 10.000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.78643553963087975, 0.50000000000000000, 10.000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.81314860510626796, 0.50000000000000000, 10.000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.84263196565226672, 0.50000000000000000, 10.000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.87537037798496642, 0.50000000000000000, 10.000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.91196818568151450, 0.50000000000000000, 10.000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.95318731786229316, 0.50000000000000000, 10.000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 10.000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.0536628587304602, 0.50000000000000000, 10.000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.1158225648376323, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.1886686247111011, 0.50000000000000000, 10.000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.2751576744751334, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.3793478044961116, 0.50000000000000000, 10.000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1.5069047234443802, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1.6658803233122232, 0.50000000000000000, 10.000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 1.8679295659745196, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 2.1302432955522050, 0.50000000000000000, 10.000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 2.4786679001777303, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler020 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=1.0000000000000000.
-testcase_conf_hyperg<double> data021[] = {
-  { 4.5399929762484854e-05, 1.0000000000000000, 1.0000000000000000,
-          -10.000000000000000 },
-  { 0.00012340980408667956, 1.0000000000000000, 1.0000000000000000,
-          -9.0000000000000000 },
-  { 0.00033546262790251185, 1.0000000000000000, 1.0000000000000000,
-          -8.0000000000000000 },
-  { 0.00091188196555451624, 1.0000000000000000, 1.0000000000000000,
-          -7.0000000000000000 },
-  { 0.0024787521766663585, 1.0000000000000000, 1.0000000000000000,
-          -6.0000000000000000 },
-  { 0.0067379469990854670, 1.0000000000000000, 1.0000000000000000,
-          -5.0000000000000000 },
-  { 0.018315638888734179, 1.0000000000000000, 1.0000000000000000,
-          -4.0000000000000000 },
-  { 0.049787068367863944, 1.0000000000000000, 1.0000000000000000,
-          -3.0000000000000000 },
-  { 0.13533528323661270, 1.0000000000000000, 1.0000000000000000,
-          -2.0000000000000000 },
-  { 0.36787944117144233, 1.0000000000000000, 1.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
-          0.0000000000000000 },
-  { 2.7182818284590451, 1.0000000000000000, 1.0000000000000000,
-          1.0000000000000000 },
-  { 7.3890560989306504, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000 },
-  { 20.085536923187668, 1.0000000000000000, 1.0000000000000000,
-          3.0000000000000000 },
-  { 54.598150033144236, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000 },
-  { 148.41315910257660, 1.0000000000000000, 1.0000000000000000,
-          5.0000000000000000 },
-  { 403.42879349273511, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000 },
-  { 1096.6331584284585, 1.0000000000000000, 1.0000000000000000,
-          7.0000000000000000 },
-  { 2980.9579870417283, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000 },
-  { 8103.0839275753842, 1.0000000000000000, 1.0000000000000000,
-          9.0000000000000000 },
-  { 22026.465794806718, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=1.0000000000000000, c=1.0000000000000000.
-template <typename Tp>
-void test021()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data021)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data021[i].a), Tp(data021[i].c),
-                   Tp(data021[i].x));
-      const Tp f0 = data021[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_conf_hyperg<double>
+data021[21] =
+{
+  { 4.5399929762484847e-05, 1.0000000000000000, 1.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.00012340980408667956, 1.0000000000000000, 1.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.00033546262790251185, 1.0000000000000000, 1.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.00091188196555451624, 1.0000000000000000, 1.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.0024787521766663585, 1.0000000000000000, 1.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.0067379469990854670, 1.0000000000000000, 1.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.018315638888734182, 1.0000000000000000, 1.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.049787068367863944, 1.0000000000000000, 1.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.13533528323661270, 1.0000000000000000, 1.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.36787944117144228, 1.0000000000000000, 1.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 2.7182818284590455, 1.0000000000000000, 1.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 7.3890560989306504, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 20.085536923187668, 1.0000000000000000, 1.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 54.598150033144236, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 148.41315910257660, 1.0000000000000000, 1.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 403.42879349273511, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1096.6331584284585, 1.0000000000000000, 1.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 2980.9579870417283, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 8103.0839275753842, 1.0000000000000000, 1.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 22026.465794806718, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler021 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=2.0000000000000000.
-testcase_conf_hyperg<double> data022[] = {
-  { 0.099995460007023751, 1.0000000000000000, 2.0000000000000000,
-          -10.000000000000000 },
-  { 0.11109739891065704, 1.0000000000000000, 2.0000000000000000,
-          -9.0000000000000000 },
-  { 0.12495806717151219, 1.0000000000000000, 2.0000000000000000,
-          -8.0000000000000000 },
-  { 0.14272687400492079, 1.0000000000000000, 2.0000000000000000,
-          -7.0000000000000000 },
-  { 0.16625354130388895, 1.0000000000000000, 2.0000000000000000,
-          -6.0000000000000000 },
-  { 0.19865241060018290, 1.0000000000000000, 2.0000000000000000,
-          -5.0000000000000000 },
-  { 0.24542109027781644, 1.0000000000000000, 2.0000000000000000,
-          -4.0000000000000000 },
-  { 0.31673764387737868, 1.0000000000000000, 2.0000000000000000,
-          -3.0000000000000000 },
-  { 0.43233235838169365, 1.0000000000000000, 2.0000000000000000,
-          -2.0000000000000000 },
-  { 0.63212055882855767, 1.0000000000000000, 2.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
-          0.0000000000000000 },
-  { 1.7182818284590451, 1.0000000000000000, 2.0000000000000000,
-          1.0000000000000000 },
-  { 3.1945280494653252, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000 },
-  { 6.3618456410625557, 1.0000000000000000, 2.0000000000000000,
-          3.0000000000000000 },
-  { 13.399537508286059, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000 },
-  { 29.482631820515319, 1.0000000000000000, 2.0000000000000000,
-          5.0000000000000000 },
-  { 67.071465582122514, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000 },
-  { 156.51902263263693, 1.0000000000000000, 2.0000000000000000,
-          7.0000000000000000 },
-  { 372.49474838021604, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000 },
-  { 900.23154750837602, 1.0000000000000000, 2.0000000000000000,
-          9.0000000000000000 },
-  { 2202.5465794806719, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=1.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test022()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data022)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data022[i].a), Tp(data022[i].c),
-                   Tp(data022[i].x));
-      const Tp f0 = data022[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.5474735088646412e-13 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.3593310407919961e-15
+// mean(f - f_GSL): 8.1284185731484669e-15
+// variance(f - f_GSL): 1.0472094711786016e-26
+// stddev(f - f_GSL): 1.0233325320630639e-13
+const testcase_conf_hyperg<double>
+data022[21] =
+{
+  { 0.099995460007023751, 1.0000000000000000, 2.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.11109739891065704, 1.0000000000000000, 2.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.12495806717151219, 1.0000000000000000, 2.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.14272687400492079, 1.0000000000000000, 2.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.16625354130388895, 1.0000000000000000, 2.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.19865241060018290, 1.0000000000000000, 2.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.24542109027781644, 1.0000000000000000, 2.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.31673764387737868, 1.0000000000000000, 2.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.43233235838169365, 1.0000000000000000, 2.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.63212055882855767, 1.0000000000000000, 2.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.7182818284590455, 1.0000000000000000, 2.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 3.1945280494653252, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 6.3618456410625557, 1.0000000000000000, 2.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 13.399537508286059, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 29.482631820515319, 1.0000000000000000, 2.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 67.071465582122514, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 156.51902263263693, 1.0000000000000000, 2.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 372.49474838021604, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 900.23154750837602, 1.0000000000000000, 2.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 2202.5465794806719, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler022 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=3.0000000000000000.
-testcase_conf_hyperg<double> data023[] = {
-  { 0.18000090799859525, 1.0000000000000000, 3.0000000000000000,
-          -10.000000000000000 },
-  { 0.19753391135318732, 1.0000000000000000, 3.0000000000000000,
-          -9.0000000000000000 },
-  { 0.21876048320712196, 1.0000000000000000, 3.0000000000000000,
-          -8.0000000000000000 },
-  { 0.24493517885573690, 1.0000000000000000, 3.0000000000000000,
-          -7.0000000000000000 },
-  { 0.27791548623203705, 1.0000000000000000, 3.0000000000000000,
-          -6.0000000000000000 },
-  { 0.32053903575992687, 1.0000000000000000, 3.0000000000000000,
-          -5.0000000000000000 },
-  { 0.37728945486109178, 1.0000000000000000, 3.0000000000000000,
-          -4.0000000000000000 },
-  { 0.45550823741508090, 1.0000000000000000, 3.0000000000000000,
-          -3.0000000000000000 },
-  { 0.56766764161830641, 1.0000000000000000, 3.0000000000000000,
-          -2.0000000000000000 },
-  { 0.73575888234288467, 1.0000000000000000, 3.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 3.0000000000000000,
-          0.0000000000000000 },
-  { 1.4365636569180902, 1.0000000000000000, 3.0000000000000000,
-          1.0000000000000000 },
-  { 2.1945280494653252, 1.0000000000000000, 3.0000000000000000,
-          2.0000000000000000 },
-  { 3.5745637607083705, 1.0000000000000000, 3.0000000000000000,
-          3.0000000000000000 },
-  { 6.1997687541430295, 1.0000000000000000, 3.0000000000000000,
-          4.0000000000000000 },
-  { 11.393052728206127, 1.0000000000000000, 3.0000000000000000,
-          5.0000000000000000 },
-  { 22.023821860707507, 1.0000000000000000, 3.0000000000000000,
-          6.0000000000000000 },
-  { 44.434006466467693, 1.0000000000000000, 3.0000000000000000,
-          7.0000000000000000 },
-  { 92.873687095054009, 1.0000000000000000, 3.0000000000000000,
-          8.0000000000000000 },
-  { 199.82923277963911, 1.0000000000000000, 3.0000000000000000,
-          9.0000000000000000 },
-  { 440.30931589613436, 1.0000000000000000, 3.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=1.0000000000000000, c=3.0000000000000000.
-template <typename Tp>
-void test023()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data023)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data023[i].a), Tp(data023[i].c),
-                   Tp(data023[i].x));
-      const Tp f0 = data023[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 5.6843418860808015e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 7.7283245979294494e-16
+// mean(f - f_GSL): 2.8456073476404308e-15
+// variance(f - f_GSL): 1.5307759153110761e-28
+// stddev(f - f_GSL): 1.2372452931052420e-14
+const testcase_conf_hyperg<double>
+data023[21] =
+{
+  { 0.18000090799859525, 1.0000000000000000, 3.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.19753391135318732, 1.0000000000000000, 3.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.21876048320712196, 1.0000000000000000, 3.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.24493517885573690, 1.0000000000000000, 3.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.27791548623203705, 1.0000000000000000, 3.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.32053903575992687, 1.0000000000000000, 3.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.37728945486109178, 1.0000000000000000, 3.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.45550823741508090, 1.0000000000000000, 3.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.56766764161830641, 1.0000000000000000, 3.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.73575888234288467, 1.0000000000000000, 3.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 3.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.4365636569180911, 1.0000000000000000, 3.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 2.1945280494653252, 1.0000000000000000, 3.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 3.5745637607083705, 1.0000000000000000, 3.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 6.1997687541430295, 1.0000000000000000, 3.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 11.393052728206127, 1.0000000000000000, 3.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 22.023821860707507, 1.0000000000000000, 3.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 44.434006466467693, 1.0000000000000000, 3.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 92.873687095054009, 1.0000000000000000, 3.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 199.82923277963911, 1.0000000000000000, 3.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 440.30931589613436, 1.0000000000000000, 3.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler023 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=4.0000000000000000.
-testcase_conf_hyperg<double> data024[] = {
-  { 0.24599972760042146, 1.0000000000000000, 4.0000000000000000,
-          -10.000000000000000 },
-  { 0.26748869621560417, 1.0000000000000000, 4.0000000000000000,
-          -9.0000000000000000 },
-  { 0.29296481879732927, 1.0000000000000000, 4.0000000000000000,
-          -8.0000000000000000 },
-  { 0.32359920906182704, 1.0000000000000000, 4.0000000000000000,
-          -7.0000000000000000 },
-  { 0.36104225688398150, 1.0000000000000000, 4.0000000000000000,
-          -6.0000000000000000 },
-  { 0.40767657854404399, 1.0000000000000000, 4.0000000000000000,
-          -5.0000000000000000 },
-  { 0.46703290885418114, 1.0000000000000000, 4.0000000000000000,
-          -4.0000000000000000 },
-  { 0.54449176258491927, 1.0000000000000000, 4.0000000000000000,
-          -3.0000000000000000 },
-  { 0.64849853757254050, 1.0000000000000000, 4.0000000000000000,
-          -2.0000000000000000 },
-  { 0.79272335297134611, 1.0000000000000000, 4.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 4.0000000000000000,
-          0.0000000000000000 },
-  { 1.3096909707542714, 1.0000000000000000, 4.0000000000000000,
-          1.0000000000000000 },
-  { 1.7917920741979876, 1.0000000000000000, 4.0000000000000000,
-          2.0000000000000000 },
-  { 2.5745637607083709, 1.0000000000000000, 4.0000000000000000,
-          3.0000000000000000 },
-  { 3.8998265656072717, 1.0000000000000000, 4.0000000000000000,
-          4.0000000000000000 },
-  { 6.2358316369236775, 1.0000000000000000, 4.0000000000000000,
-          5.0000000000000000 },
-  { 10.511910930353745, 1.0000000000000000, 4.0000000000000000,
-          6.0000000000000000 },
-  { 18.614574199914728, 1.0000000000000000, 4.0000000000000000,
-          7.0000000000000000 },
-  { 34.452632660645271, 1.0000000000000000, 4.0000000000000000,
-          8.0000000000000000 },
-  { 66.276410926546333, 1.0000000000000000, 4.0000000000000000,
-          9.0000000000000000 },
-  { 131.79279476884014, 1.0000000000000000, 4.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=1.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test024()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data024)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data024[i].a), Tp(data024[i].c),
-                   Tp(data024[i].x));
-      const Tp f0 = data024[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8.5265128291212022e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 8.2495029364968388e-16
+// mean(f - f_GSL): 4.6338594337330941e-15
+// variance(f - f_GSL): 3.4132357967227019e-28
+// stddev(f - f_GSL): 1.8474944645986633e-14
+const testcase_conf_hyperg<double>
+data024[21] =
+{
+  { 0.24599972760042138, 1.0000000000000000, 4.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.26748869621560417, 1.0000000000000000, 4.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.29296481879732927, 1.0000000000000000, 4.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.32359920906182715, 1.0000000000000000, 4.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.36104225688398156, 1.0000000000000000, 4.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.40767657854404388, 1.0000000000000000, 4.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.46703290885418114, 1.0000000000000000, 4.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.54449176258491916, 1.0000000000000000, 4.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.64849853757254050, 1.0000000000000000, 4.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.79272335297134611, 1.0000000000000000, 4.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 4.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.3096909707542714, 1.0000000000000000, 4.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.7917920741979876, 1.0000000000000000, 4.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 2.5745637607083705, 1.0000000000000000, 4.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 3.8998265656072717, 1.0000000000000000, 4.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 6.2358316369236775, 1.0000000000000000, 4.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 10.511910930353745, 1.0000000000000000, 4.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 18.614574199914728, 1.0000000000000000, 4.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 34.452632660645271, 1.0000000000000000, 4.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 66.276410926546333, 1.0000000000000000, 4.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 131.79279476884014, 1.0000000000000000, 4.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler024 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=5.0000000000000000.
-testcase_conf_hyperg<double> data025[] = {
-  { 0.30160010895983153, 1.0000000000000000, 5.0000000000000000,
-          -10.000000000000000 },
-  { 0.32556057945973144, 1.0000000000000000, 5.0000000000000000,
-          -9.0000000000000000 },
-  { 0.35351759060133547, 1.0000000000000000, 5.0000000000000000,
-          -8.0000000000000000 },
-  { 0.38651473767895589, 1.0000000000000000, 5.0000000000000000,
-          -7.0000000000000000 },
-  { 0.42597182874401224, 1.0000000000000000, 5.0000000000000000,
-          -6.0000000000000000 },
-  { 0.47385873716476495, 1.0000000000000000, 5.0000000000000000,
-          -5.0000000000000000 },
-  { 0.53296709114581886, 1.0000000000000000, 5.0000000000000000,
-          -4.0000000000000000 },
-  { 0.60734431655344123, 1.0000000000000000, 5.0000000000000000,
-          -3.0000000000000000 },
-  { 0.70300292485491900, 1.0000000000000000, 5.0000000000000000,
-          -2.0000000000000000 },
-  { 0.82910658811461568, 1.0000000000000000, 5.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
-          0.0000000000000000 },
-  { 1.2387638830170857, 1.0000000000000000, 5.0000000000000000,
-          1.0000000000000000 },
-  { 1.5835841483959754, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000 },
-  { 2.0994183476111612, 1.0000000000000000, 5.0000000000000000,
-          3.0000000000000000 },
-  { 2.8998265656072721, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000 },
-  { 4.1886653095389432, 1.0000000000000000, 5.0000000000000000,
-          5.0000000000000000 },
-  { 6.3412739535691678, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000 },
-  { 10.065470971379844, 1.0000000000000000, 5.0000000000000000,
-          7.0000000000000000 },
-  { 16.726316330322632, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000 },
-  { 29.011738189576135, 1.0000000000000000, 5.0000000000000000,
-          9.0000000000000000 },
-  { 52.317117907536058, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=1.0000000000000000, c=5.0000000000000000.
-template <typename Tp>
-void test025()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data025)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data025[i].a), Tp(data025[i].c),
-                   Tp(data025[i].x));
-      const Tp f0 = data025[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 6.3948846218409017e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.3470358174143053e-15
+// mean(f - f_GSL): 4.1316156844979041e-15
+// variance(f - f_GSL): 1.8785030610922107e-28
+// stddev(f - f_GSL): 1.3705849339213571e-14
+const testcase_conf_hyperg<double>
+data025[21] =
+{
+  { 0.30160010895983153, 1.0000000000000000, 5.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.32556057945973133, 1.0000000000000000, 5.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.35351759060133559, 1.0000000000000000, 5.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.38651473767895589, 1.0000000000000000, 5.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.42597182874401246, 1.0000000000000000, 5.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.47385873716476473, 1.0000000000000000, 5.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.53296709114581886, 1.0000000000000000, 5.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.60734431655344123, 1.0000000000000000, 5.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.70300292485491900, 1.0000000000000000, 5.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.82910658811461568, 1.0000000000000000, 5.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.2387638830170857, 1.0000000000000000, 5.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.5835841483959754, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 2.0994183476111612, 1.0000000000000000, 5.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 2.8998265656072730, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 4.1886653095389432, 1.0000000000000000, 5.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 6.3412739535691678, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 10.065470971379845, 1.0000000000000000, 5.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 16.726316330322632, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 29.011738189576135, 1.0000000000000000, 5.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 52.317117907536058, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler025 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=6.0000000000000000.
-testcase_conf_hyperg<double> data026[] = {
-  { 0.34919994552008432, 1.0000000000000000, 6.0000000000000000,
-          -10.000000000000000 },
-  { 0.37468856696681579, 1.0000000000000000, 6.0000000000000000,
-          -9.0000000000000000 },
-  { 0.40405150587416544, 1.0000000000000000, 6.0000000000000000,
-          -8.0000000000000000 },
-  { 0.43820375880074558, 1.0000000000000000, 6.0000000000000000,
-          -7.0000000000000000 },
-  { 0.47835680937998976, 1.0000000000000000, 6.0000000000000000,
-          -6.0000000000000000 },
-  { 0.52614126283523510, 1.0000000000000000, 6.0000000000000000,
-          -5.0000000000000000 },
-  { 0.58379113606772637, 1.0000000000000000, 6.0000000000000000,
-          -4.0000000000000000 },
-  { 0.65442613907759817, 1.0000000000000000, 6.0000000000000000,
-          -3.0000000000000000 },
-  { 0.74249268786270239, 1.0000000000000000, 6.0000000000000000,
-          -2.0000000000000000 },
-  { 0.85446705942692136, 1.0000000000000000, 6.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 6.0000000000000000,
-          0.0000000000000000 },
-  { 1.1938194150854282, 1.0000000000000000, 6.0000000000000000,
-          1.0000000000000000 },
-  { 1.4589603709899384, 1.0000000000000000, 6.0000000000000000,
-          2.0000000000000000 },
-  { 1.8323639126852680, 1.0000000000000000, 6.0000000000000000,
-          3.0000000000000000 },
-  { 2.3747832070090902, 1.0000000000000000, 6.0000000000000000,
-          4.0000000000000000 },
-  { 3.1886653095389415, 1.0000000000000000, 6.0000000000000000,
-          5.0000000000000000 },
-  { 4.4510616279743056, 1.0000000000000000, 6.0000000000000000,
-          6.0000000000000000 },
-  { 6.4753364081284595, 1.0000000000000000, 6.0000000000000000,
-          7.0000000000000000 },
-  { 9.8289477064516344, 1.0000000000000000, 6.0000000000000000,
-          8.0000000000000000 },
-  { 15.562076771986721, 1.0000000000000000, 6.0000000000000000,
-          9.0000000000000000 },
-  { 25.658558953767979, 1.0000000000000000, 6.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=1.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test026()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data026)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data026[i].a), Tp(data026[i].c),
-                   Tp(data026[i].x));
-      const Tp f0 = data026[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8.1712414612411521e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.1846065384904241e-15
+// mean(f - f_GSL): 5.9529101225139347e-15
+// variance(f - f_GSL): 3.0132388232912765e-28
+// stddev(f - f_GSL): 1.7358683196865125e-14
+const testcase_conf_hyperg<double>
+data026[21] =
+{
+  { 0.34919994552008421, 1.0000000000000000, 6.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.37468856696681579, 1.0000000000000000, 6.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.40405150587416555, 1.0000000000000000, 6.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.43820375880074558, 1.0000000000000000, 6.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.47835680937998981, 1.0000000000000000, 6.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.52614126283523510, 1.0000000000000000, 6.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.58379113606772659, 1.0000000000000000, 6.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.65442613907759817, 1.0000000000000000, 6.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.74249268786270239, 1.0000000000000000, 6.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.85446705942692136, 1.0000000000000000, 6.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 6.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.1938194150854282, 1.0000000000000000, 6.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.4589603709899384, 1.0000000000000000, 6.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.8323639126852680, 1.0000000000000000, 6.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 2.3747832070090902, 1.0000000000000000, 6.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 3.1886653095389423, 1.0000000000000000, 6.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 4.4510616279743056, 1.0000000000000000, 6.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 6.4753364081284603, 1.0000000000000000, 6.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 9.8289477064516362, 1.0000000000000000, 6.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 15.562076771986721, 1.0000000000000000, 6.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 25.658558953767979, 1.0000000000000000, 6.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler026 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=7.0000000000000000.
-testcase_conf_hyperg<double> data027[] = {
-  { 0.39048003268794951, 1.0000000000000000, 7.0000000000000000,
-          -10.000000000000000 },
-  { 0.41687428868878945, 1.0000000000000000, 7.0000000000000000,
-          -9.0000000000000000 },
-  { 0.44696137059437596, 1.0000000000000000, 7.0000000000000000,
-          -8.0000000000000000 },
-  { 0.48153963531364646, 1.0000000000000000, 7.0000000000000000,
-          -7.0000000000000000 },
-  { 0.52164319062001030, 1.0000000000000000, 7.0000000000000000,
-          -6.0000000000000000 },
-  { 0.56863048459771781, 1.0000000000000000, 7.0000000000000000,
-          -5.0000000000000000 },
-  { 0.62431329589841034, 1.0000000000000000, 7.0000000000000000,
-          -4.0000000000000000 },
-  { 0.69114772184480400, 1.0000000000000000, 7.0000000000000000,
-          -3.0000000000000000 },
-  { 0.77252193641189282, 1.0000000000000000, 7.0000000000000000,
-          -2.0000000000000000 },
-  { 0.87319764343847150, 1.0000000000000000, 7.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 7.0000000000000000,
-          0.0000000000000000 },
-  { 1.1629164905125695, 1.0000000000000000, 7.0000000000000000,
-          1.0000000000000000 },
-  { 1.3768811129698151, 1.0000000000000000, 7.0000000000000000,
-          2.0000000000000000 },
-  { 1.6647278253705360, 1.0000000000000000, 7.0000000000000000,
-          3.0000000000000000 },
-  { 2.0621748105136359, 1.0000000000000000, 7.0000000000000000,
-          4.0000000000000000 },
-  { 2.6263983714467298, 1.0000000000000000, 7.0000000000000000,
-          5.0000000000000000 },
-  { 3.4510616279743078, 1.0000000000000000, 7.0000000000000000,
-          6.0000000000000000 },
-  { 4.6931454926815448, 1.0000000000000000, 7.0000000000000000,
-          7.0000000000000000 },
-  { 6.6217107798387476, 1.0000000000000000, 7.0000000000000000,
-          8.0000000000000000 },
-  { 9.7080511813245050, 1.0000000000000000, 7.0000000000000000,
-          9.0000000000000000 },
-  { 14.795135372260793, 1.0000000000000000, 7.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=1.0000000000000000, c=7.0000000000000000.
-template <typename Tp>
-void test027()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data027)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data027[i].a), Tp(data027[i].c),
-                   Tp(data027[i].x));
-      const Tp f0 = data027[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.6185277824406512e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.1216529394518888e-15
+// mean(f - f_GSL): 1.1710209521641532e-15
+// variance(f - f_GSL): 1.0637987439241148e-28
+// stddev(f - f_GSL): 1.0314061973461835e-14
+const testcase_conf_hyperg<double>
+data027[21] =
+{
+  { 0.39048003268794934, 1.0000000000000000, 7.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.41687428868878917, 1.0000000000000000, 7.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.44696137059437591, 1.0000000000000000, 7.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.48153963531364674, 1.0000000000000000, 7.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.52164319062001030, 1.0000000000000000, 7.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.56863048459771781, 1.0000000000000000, 7.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.62431329589841034, 1.0000000000000000, 7.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.69114772184480389, 1.0000000000000000, 7.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.77252193641189282, 1.0000000000000000, 7.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.87319764343847150, 1.0000000000000000, 7.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 7.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.1629164905125695, 1.0000000000000000, 7.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.3768811129698151, 1.0000000000000000, 7.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.6647278253705360, 1.0000000000000000, 7.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 2.0621748105136359, 1.0000000000000000, 7.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 2.6263983714467289, 1.0000000000000000, 7.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 3.4510616279743087, 1.0000000000000000, 7.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 4.6931454926815457, 1.0000000000000000, 7.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 6.6217107798387467, 1.0000000000000000, 7.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 9.7080511813245050, 1.0000000000000000, 7.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 14.795135372260791, 1.0000000000000000, 7.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler027 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=8.0000000000000000.
-testcase_conf_hyperg<double> data028[] = {
-  { 0.42666397711843540, 1.0000000000000000, 8.0000000000000000,
-          -10.000000000000000 },
-  { 0.45354221990871918, 1.0000000000000000, 8.0000000000000000,
-          -9.0000000000000000 },
-  { 0.48390880072992104, 1.0000000000000000, 8.0000000000000000,
-          -8.0000000000000000 },
-  { 0.51846036468635348, 1.0000000000000000, 8.0000000000000000,
-          -7.0000000000000000 },
-  { 0.55808294427665472, 1.0000000000000000, 8.0000000000000000,
-          -6.0000000000000000 },
-  { 0.60391732156319489, 1.0000000000000000, 8.0000000000000000,
-          -5.0000000000000000 },
-  { 0.65745173217778197, 1.0000000000000000, 8.0000000000000000,
-          -4.0000000000000000 },
-  { 0.72065531569545760, 1.0000000000000000, 8.0000000000000000,
-          -3.0000000000000000 },
-  { 0.79617322255837530, 1.0000000000000000, 8.0000000000000000,
-          -2.0000000000000000 },
-  { 0.88761649593069913, 1.0000000000000000, 8.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 8.0000000000000000,
-          0.0000000000000000 },
-  { 1.1404154335879861, 1.0000000000000000, 8.0000000000000000,
-          1.0000000000000000 },
-  { 1.3190838953943527, 1.0000000000000000, 8.0000000000000000,
-          2.0000000000000000 },
-  { 1.5510315925312508, 1.0000000000000000, 8.0000000000000000,
-          3.0000000000000000 },
-  { 1.8588059183988628, 1.0000000000000000, 8.0000000000000000,
-          4.0000000000000000 },
-  { 2.2769577200254218, 1.0000000000000000, 8.0000000000000000,
-          5.0000000000000000 },
-  { 2.8595718993033583, 1.0000000000000000, 8.0000000000000000,
-          6.0000000000000000 },
-  { 3.6931454926815368, 1.0000000000000000, 8.0000000000000000,
-          7.0000000000000000 },
-  { 4.9189969323589020, 1.0000000000000000, 8.0000000000000000,
-          8.0000000000000000 },
-  { 6.7729286965857218, 1.0000000000000000, 8.0000000000000000,
-          9.0000000000000000 },
-  { 9.6565947605825802, 1.0000000000000000, 8.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=1.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test028()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data028)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data028[i].a), Tp(data028[i].c),
-                   Tp(data028[i].x));
-      const Tp f0 = data028[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.5099033134902129e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.0695349768517519e-15
+// mean(f - f_GSL): -2.2997476938663959e-16
+// variance(f - f_GSL): 4.3587679517313822e-30
+// stddev(f - f_GSL): 2.0877662588832549e-15
+const testcase_conf_hyperg<double>
+data028[21] =
+{
+  { 0.42666397711843551, 1.0000000000000000, 8.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.45354221990871935, 1.0000000000000000, 8.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.48390880072992098, 1.0000000000000000, 8.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.51846036468635348, 1.0000000000000000, 8.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.55808294427665472, 1.0000000000000000, 8.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.60391732156319500, 1.0000000000000000, 8.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.65745173217778197, 1.0000000000000000, 8.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.72065531569545760, 1.0000000000000000, 8.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.79617322255837530, 1.0000000000000000, 8.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.88761649593069913, 1.0000000000000000, 8.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 8.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.1404154335879861, 1.0000000000000000, 8.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.3190838953943527, 1.0000000000000000, 8.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.5510315925312508, 1.0000000000000000, 8.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.8588059183988626, 1.0000000000000000, 8.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 2.2769577200254218, 1.0000000000000000, 8.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 2.8595718993033583, 1.0000000000000000, 8.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 3.6931454926815390, 1.0000000000000000, 8.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 4.9189969323589047, 1.0000000000000000, 8.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 6.7729286965857236, 1.0000000000000000, 8.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 9.6565947605825802, 1.0000000000000000, 8.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler028 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=9.0000000000000000.
-testcase_conf_hyperg<double> data029[] = {
-  { 0.45866881830525175, 1.0000000000000000, 9.0000000000000000,
-          -10.000000000000000 },
-  { 0.48574024897002721, 1.0000000000000000, 9.0000000000000000,
-          -9.0000000000000000 },
-  { 0.51609119927007907, 1.0000000000000000, 9.0000000000000000,
-          -8.0000000000000000 },
-  { 0.55033101178702437, 1.0000000000000000, 9.0000000000000000,
-          -7.0000000000000000 },
-  { 0.58922274096446048, 1.0000000000000000, 9.0000000000000000,
-          -6.0000000000000000 },
-  { 0.63373228549888783, 1.0000000000000000, 9.0000000000000000,
-          -5.0000000000000000 },
-  { 0.68509653564443607, 1.0000000000000000, 9.0000000000000000,
-          -4.0000000000000000 },
-  { 0.74491915814544640, 1.0000000000000000, 9.0000000000000000,
-          -3.0000000000000000 },
-  { 0.81530710976649901, 1.0000000000000000, 9.0000000000000000,
-          -2.0000000000000000 },
-  { 0.89906803255440670, 1.0000000000000000, 9.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 9.0000000000000000,
-          0.0000000000000000 },
-  { 1.1233234687038898, 1.0000000000000000, 9.0000000000000000,
-          1.0000000000000000 },
-  { 1.2763355815774109, 1.0000000000000000, 9.0000000000000000,
-          2.0000000000000000 },
-  { 1.4694175800833353, 1.0000000000000000, 9.0000000000000000,
-          3.0000000000000000 },
-  { 1.7176118367977251, 1.0000000000000000, 9.0000000000000000,
-          4.0000000000000000 },
-  { 2.0431323520406752, 1.0000000000000000, 9.0000000000000000,
-          5.0000000000000000 },
-  { 2.4794291990711450, 1.0000000000000000, 9.0000000000000000,
-          6.0000000000000000 },
-  { 3.0778805630646140, 1.0000000000000000, 9.0000000000000000,
-          7.0000000000000000 },
-  { 3.9189969323588896, 1.0000000000000000, 9.0000000000000000,
-          8.0000000000000000 },
-  { 5.1314921747428537, 1.0000000000000000, 9.0000000000000000,
-          9.0000000000000000 },
-  { 6.9252758084660462, 1.0000000000000000, 9.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=1.0000000000000000, c=9.0000000000000000.
-template <typename Tp>
-void test029()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data029)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data029[i].a), Tp(data029[i].c),
-                   Tp(data029[i].x));
-      const Tp f0 = data029[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.1316282072803006e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.0780408841975893e-15
+// mean(f - f_GSL): 1.6309704909374323e-15
+// variance(f - f_GSL): 2.0344353333944372e-29
+// stddev(f - f_GSL): 4.5104715201344935e-15
+const testcase_conf_hyperg<double>
+data029[21] =
+{
+  { 0.45866881830525147, 1.0000000000000000, 9.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.48574024897002727, 1.0000000000000000, 9.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.51609119927007907, 1.0000000000000000, 9.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.55033101178702448, 1.0000000000000000, 9.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.58922274096446048, 1.0000000000000000, 9.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.63373228549888794, 1.0000000000000000, 9.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.68509653564443607, 1.0000000000000000, 9.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.74491915814544640, 1.0000000000000000, 9.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.81530710976649901, 1.0000000000000000, 9.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.89906803255440670, 1.0000000000000000, 9.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 9.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.1233234687038898, 1.0000000000000000, 9.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.2763355815774109, 1.0000000000000000, 9.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.4694175800833351, 1.0000000000000000, 9.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.7176118367977251, 1.0000000000000000, 9.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 2.0431323520406743, 1.0000000000000000, 9.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 2.4794291990711450, 1.0000000000000000, 9.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 3.0778805630646149, 1.0000000000000000, 9.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 3.9189969323588909, 1.0000000000000000, 9.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 5.1314921747428537, 1.0000000000000000, 9.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 6.9252758084660471, 1.0000000000000000, 9.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler029 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, c=10.000000000000000.
-testcase_conf_hyperg<double> data030[] = {
-  { 0.48719806352527339, 1.0000000000000000, 10.000000000000000,
-          -10.000000000000000 },
-  { 0.51425975102997279, 1.0000000000000000, 10.000000000000000,
-          -9.0000000000000000 },
-  { 0.54439740082116117, 1.0000000000000000, 10.000000000000000,
-          -8.0000000000000000 },
-  { 0.57814584198811125, 1.0000000000000000, 10.000000000000000,
-          -7.0000000000000000 },
-  { 0.61616588855330923, 1.0000000000000000, 10.000000000000000,
-          -6.0000000000000000 },
-  { 0.65928188610200156, 1.0000000000000000, 10.000000000000000,
-          -5.0000000000000000 },
-  { 0.70853279480001885, 1.0000000000000000, 10.000000000000000,
-          -4.0000000000000000 },
-  { 0.76524252556366068, 1.0000000000000000, 10.000000000000000,
-          -3.0000000000000000 },
-  { 0.83111800605075459, 1.0000000000000000, 10.000000000000000,
-          -2.0000000000000000 },
-  { 0.90838770701033944, 1.0000000000000000, 10.000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
-          0.0000000000000000 },
-  { 1.1099112183350075, 1.0000000000000000, 10.000000000000000,
-          1.0000000000000000 },
-  { 1.2435101170983485, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000 },
-  { 1.4082527402500060, 1.0000000000000000, 10.000000000000000,
-          3.0000000000000000 },
-  { 1.6146266327948817, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000 },
-  { 1.8776382336732149, 1.0000000000000000, 10.000000000000000,
-          5.0000000000000000 },
-  { 2.2191437986067171, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000 },
-  { 2.6715607239402184, 1.0000000000000000, 10.000000000000000,
-          7.0000000000000000 },
-  { 3.2838715489037504, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000 },
-  { 4.1314921747428679, 1.0000000000000000, 10.000000000000000,
-          9.0000000000000000 },
-  { 5.3327482276194447, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=1.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test030()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data030)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data030[i].a), Tp(data030[i].c),
-                   Tp(data030[i].x));
-      const Tp f0 = data030[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.5987211554602254e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.9979310614742812e-15
+// mean(f - f_GSL): 7.0049786077539637e-16
+// variance(f - f_GSL): 1.2268389816744262e-29
+// stddev(f - f_GSL): 3.5026261314539785e-15
+const testcase_conf_hyperg<double>
+data030[21] =
+{
+  { 0.48719806352527351, 1.0000000000000000, 10.000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.51425975102997290, 1.0000000000000000, 10.000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.54439740082116106, 1.0000000000000000, 10.000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.57814584198811136, 1.0000000000000000, 10.000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.61616588855330934, 1.0000000000000000, 10.000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.65928188610200156, 1.0000000000000000, 10.000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.70853279480001885, 1.0000000000000000, 10.000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.76524252556366068, 1.0000000000000000, 10.000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.83111800605075459, 1.0000000000000000, 10.000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.90838770701033944, 1.0000000000000000, 10.000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 10.000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.1099112183350075, 1.0000000000000000, 10.000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.2435101170983485, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.4082527402500060, 1.0000000000000000, 10.000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1.6146266327948817, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1.8776382336732149, 1.0000000000000000, 10.000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 2.2191437986067180, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 2.6715607239402184, 1.0000000000000000, 10.000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 3.2838715489037495, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 4.1314921747428688, 1.0000000000000000, 10.000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 5.3327482276194447, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler030 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=1.0000000000000000.
-testcase_conf_hyperg<double> data031[] = {
-  { -0.00040859936786236367, 2.0000000000000000, 1.0000000000000000,
-          -10.000000000000000 },
-  { -0.00098727843269343649, 2.0000000000000000, 1.0000000000000000,
-          -9.0000000000000000 },
-  { -0.0023482383953175828, 2.0000000000000000, 1.0000000000000000,
-          -8.0000000000000000 },
-  { -0.0054712917933270972, 2.0000000000000000, 1.0000000000000000,
-          -7.0000000000000000 },
-  { -0.012393760883331793, 2.0000000000000000, 1.0000000000000000,
-          -6.0000000000000000 },
-  { -0.026951787996341868, 2.0000000000000000, 1.0000000000000000,
-          -5.0000000000000000 },
-  { -0.054946916666202536, 2.0000000000000000, 1.0000000000000000,
-          -4.0000000000000000 },
-  { -0.099574136735727889, 2.0000000000000000, 1.0000000000000000,
-          -3.0000000000000000 },
-  { -0.13533528323661270, 2.0000000000000000, 1.0000000000000000,
-          -2.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
-          0.0000000000000000 },
-  { 5.4365636569180902, 2.0000000000000000, 1.0000000000000000,
-          1.0000000000000000 },
-  { 22.167168296791949, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000 },
-  { 80.342147692750672, 2.0000000000000000, 1.0000000000000000,
-          3.0000000000000000 },
-  { 272.99075016572118, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000 },
-  { 890.47895461545954, 2.0000000000000000, 1.0000000000000000,
-          5.0000000000000000 },
-  { 2824.0015544491457, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000 },
-  { 8773.0652674276680, 2.0000000000000000, 1.0000000000000000,
-          7.0000000000000000 },
-  { 26828.621883375556, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000 },
-  { 81030.839275753839, 2.0000000000000000, 1.0000000000000000,
-          9.0000000000000000 },
-  { 242291.12374287390, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=2.0000000000000000, c=1.0000000000000000.
-template <typename Tp>
-void test031()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data031)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data031[i].a), Tp(data031[i].c),
-                   Tp(data031[i].x));
-      const Tp f0 = data031[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+// max(|f - f_GSL|): 1.8189894035458565e-12 at index 16
+// max(|f - f_GSL| / |f_GSL|): 1.2471263079384817e-14
+// mean(f - f_GSL): -1.4303634774011364e-13
+// variance(f - f_GSL): 1.1334845858631974e-27
+// stddev(f - f_GSL): 3.3667262821072896e-14
+const testcase_conf_hyperg<double>
+data031[20] =
+{
+  { -0.00040859936786236361, 2.0000000000000000, 1.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -0.00098727843269343649, 2.0000000000000000, 1.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { -0.0023482383953175828, 2.0000000000000000, 1.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { -0.0054712917933270972, 2.0000000000000000, 1.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { -0.012393760883331793, 2.0000000000000000, 1.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { -0.026951787996341868, 2.0000000000000000, 1.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { -0.054946916666202550, 2.0000000000000000, 1.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { -0.099574136735727889, 2.0000000000000000, 1.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { -0.13533528323661270, 2.0000000000000000, 1.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 5.4365636569180911, 2.0000000000000000, 1.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 22.167168296791949, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 80.342147692750672, 2.0000000000000000, 1.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 272.99075016572118, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 890.47895461545954, 2.0000000000000000, 1.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 2824.0015544491457, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 8773.0652674276680, 2.0000000000000000, 1.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 26828.621883375556, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 81030.839275753839, 2.0000000000000000, 1.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 242291.12374287390, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler031 = 1.0000000000000008e-12;
 
 // Test data for a=2.0000000000000000, c=2.0000000000000000.
-testcase_conf_hyperg<double> data032[] = {
-  { 4.5399929762484854e-05, 2.0000000000000000, 2.0000000000000000,
-          -10.000000000000000 },
-  { 0.00012340980408667956, 2.0000000000000000, 2.0000000000000000,
-          -9.0000000000000000 },
-  { 0.00033546262790251185, 2.0000000000000000, 2.0000000000000000,
-          -8.0000000000000000 },
-  { 0.00091188196555451624, 2.0000000000000000, 2.0000000000000000,
-          -7.0000000000000000 },
-  { 0.0024787521766663585, 2.0000000000000000, 2.0000000000000000,
-          -6.0000000000000000 },
-  { 0.0067379469990854670, 2.0000000000000000, 2.0000000000000000,
-          -5.0000000000000000 },
-  { 0.018315638888734179, 2.0000000000000000, 2.0000000000000000,
-          -4.0000000000000000 },
-  { 0.049787068367863944, 2.0000000000000000, 2.0000000000000000,
-          -3.0000000000000000 },
-  { 0.13533528323661270, 2.0000000000000000, 2.0000000000000000,
-          -2.0000000000000000 },
-  { 0.36787944117144233, 2.0000000000000000, 2.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
-          0.0000000000000000 },
-  { 2.7182818284590451, 2.0000000000000000, 2.0000000000000000,
-          1.0000000000000000 },
-  { 7.3890560989306504, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000 },
-  { 20.085536923187668, 2.0000000000000000, 2.0000000000000000,
-          3.0000000000000000 },
-  { 54.598150033144236, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000 },
-  { 148.41315910257660, 2.0000000000000000, 2.0000000000000000,
-          5.0000000000000000 },
-  { 403.42879349273511, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000 },
-  { 1096.6331584284585, 2.0000000000000000, 2.0000000000000000,
-          7.0000000000000000 },
-  { 2980.9579870417283, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000 },
-  { 8103.0839275753842, 2.0000000000000000, 2.0000000000000000,
-          9.0000000000000000 },
-  { 22026.465794806718, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=2.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test032()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data032)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data032[i].a), Tp(data032[i].c),
-                   Tp(data032[i].x));
-      const Tp f0 = data032[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_conf_hyperg<double>
+data032[21] =
+{
+  { 4.5399929762484847e-05, 2.0000000000000000, 2.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.00012340980408667956, 2.0000000000000000, 2.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.00033546262790251185, 2.0000000000000000, 2.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.00091188196555451624, 2.0000000000000000, 2.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.0024787521766663585, 2.0000000000000000, 2.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.0067379469990854670, 2.0000000000000000, 2.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.018315638888734182, 2.0000000000000000, 2.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.049787068367863944, 2.0000000000000000, 2.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.13533528323661270, 2.0000000000000000, 2.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.36787944117144228, 2.0000000000000000, 2.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 2.7182818284590455, 2.0000000000000000, 2.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 7.3890560989306504, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 20.085536923187668, 2.0000000000000000, 2.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 54.598150033144236, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 148.41315910257660, 2.0000000000000000, 2.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 403.42879349273511, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1096.6331584284585, 2.0000000000000000, 2.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 2980.9579870417283, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 8103.0839275753842, 2.0000000000000000, 2.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 22026.465794806718, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler032 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=3.0000000000000000.
-testcase_conf_hyperg<double> data033[] = {
-  { 0.019990012015452256, 2.0000000000000000, 3.0000000000000000,
-          -10.000000000000000 },
-  { 0.024660886468126749, 2.0000000000000000, 3.0000000000000000,
-          -9.0000000000000000 },
-  { 0.031155651135902421, 2.0000000000000000, 3.0000000000000000,
-          -8.0000000000000000 },
-  { 0.040518569154104643, 2.0000000000000000, 3.0000000000000000,
-          -7.0000000000000000 },
-  { 0.054591596375740861, 2.0000000000000000, 3.0000000000000000,
-          -6.0000000000000000 },
-  { 0.076765785440438966, 2.0000000000000000, 3.0000000000000000,
-          -5.0000000000000000 },
-  { 0.11355272569454113, 2.0000000000000000, 3.0000000000000000,
-          -4.0000000000000000 },
-  { 0.17796705033967650, 2.0000000000000000, 3.0000000000000000,
-          -3.0000000000000000 },
-  { 0.29699707514508100, 2.0000000000000000, 3.0000000000000000,
-          -2.0000000000000000 },
-  { 0.52848223531423066, 2.0000000000000000, 3.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 3.0000000000000000,
-          0.0000000000000000 },
-  { 2.0000000000000000, 2.0000000000000000, 3.0000000000000000,
-          1.0000000000000000 },
-  { 4.1945280494653261, 2.0000000000000000, 3.0000000000000000,
-          2.0000000000000000 },
-  { 9.1491275214167409, 2.0000000000000000, 3.0000000000000000,
-          3.0000000000000000 },
-  { 20.599306262429089, 2.0000000000000000, 3.0000000000000000,
-          4.0000000000000000 },
-  { 47.572210912824517, 2.0000000000000000, 3.0000000000000000,
-          5.0000000000000000 },
-  { 112.11910930353754, 2.0000000000000000, 3.0000000000000000,
-          6.0000000000000000 },
-  { 268.60403879880613, 2.0000000000000000, 3.0000000000000000,
-          7.0000000000000000 },
-  { 652.11580966537815, 2.0000000000000000, 3.0000000000000000,
-          8.0000000000000000 },
-  { 1600.6338622371129, 2.0000000000000000, 3.0000000000000000,
-          9.0000000000000000 },
-  { 3964.7838430652091, 2.0000000000000000, 3.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=2.0000000000000000, c=3.0000000000000000.
-template <typename Tp>
-void test033()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data033)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data033[i].a), Tp(data033[i].c),
-                   Tp(data033[i].x));
-      const Tp f0 = data033[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 9.0949470177292824e-13 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.7963989072999328e-15
+// mean(f - f_GSL): -6.7995212634944630e-14
+// variance(f - f_GSL): 3.7176372986523090e-26
+// stddev(f - f_GSL): 1.9281175531207399e-13
+const testcase_conf_hyperg<double>
+data033[21] =
+{
+  { 0.019990012015452252, 2.0000000000000000, 3.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.024660886468126749, 2.0000000000000000, 3.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.031155651135902421, 2.0000000000000000, 3.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.040518569154104643, 2.0000000000000000, 3.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.054591596375740861, 2.0000000000000000, 3.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.076765785440438966, 2.0000000000000000, 3.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.11355272569454114, 2.0000000000000000, 3.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.17796705033967650, 2.0000000000000000, 3.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.29699707514508100, 2.0000000000000000, 3.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.52848223531423089, 2.0000000000000000, 3.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 3.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 2.0000000000000004, 2.0000000000000000, 3.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 4.1945280494653261, 2.0000000000000000, 3.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 9.1491275214167409, 2.0000000000000000, 3.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 20.599306262429089, 2.0000000000000000, 3.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 47.572210912824517, 2.0000000000000000, 3.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 112.11910930353754, 2.0000000000000000, 3.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 268.60403879880613, 2.0000000000000000, 3.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 652.11580966537815, 2.0000000000000000, 3.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 1600.6338622371129, 2.0000000000000000, 3.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 3964.7838430652091, 2.0000000000000000, 3.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler033 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=4.0000000000000000.
-testcase_conf_hyperg<double> data034[] = {
-  { 0.048003268794942940, 2.0000000000000000, 4.0000000000000000,
-          -10.000000000000000 },
-  { 0.057624341628353531, 2.0000000000000000, 4.0000000000000000,
-          -9.0000000000000000 },
-  { 0.070351812026707330, 2.0000000000000000, 4.0000000000000000,
-          -8.0000000000000000 },
-  { 0.087607118443556703, 2.0000000000000000, 4.0000000000000000,
-          -7.0000000000000000 },
-  { 0.11166194492814813, 2.0000000000000000, 4.0000000000000000,
-          -6.0000000000000000 },
-  { 0.14626395019169278, 2.0000000000000000, 4.0000000000000000,
-          -5.0000000000000000 },
-  { 0.19780254687491294, 2.0000000000000000, 4.0000000000000000,
-          -4.0000000000000000 },
-  { 0.27754118707540443, 2.0000000000000000, 4.0000000000000000,
-          -3.0000000000000000 },
-  { 0.40600584970983811, 2.0000000000000000, 4.0000000000000000,
-          -2.0000000000000000 },
-  { 0.62182994108596168, 2.0000000000000000, 4.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 4.0000000000000000,
-          0.0000000000000000 },
-  { 1.6903090292457283, 2.0000000000000000, 4.0000000000000000,
-          1.0000000000000000 },
-  { 3.0000000000000000, 2.0000000000000000, 4.0000000000000000,
-          2.0000000000000000 },
-  { 5.5745637607083705, 2.0000000000000000, 4.0000000000000000,
-          3.0000000000000000 },
-  { 10.799653131214550, 2.0000000000000000, 4.0000000000000000,
-          4.0000000000000000 },
-  { 21.707494910771043, 2.0000000000000000, 4.0000000000000000,
-          5.0000000000000000 },
-  { 45.047643721415056, 2.0000000000000000, 4.0000000000000000,
-          6.0000000000000000 },
-  { 96.072870999573695, 2.0000000000000000, 4.0000000000000000,
-          7.0000000000000000 },
-  { 209.71579596387159, 2.0000000000000000, 4.0000000000000000,
-          8.0000000000000000 },
-  { 466.93487648582493, 2.0000000000000000, 4.0000000000000000,
-          9.0000000000000000 },
-  { 1057.3423581507243, 2.0000000000000000, 4.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=2.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test034()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data034)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data034[i].a), Tp(data034[i].c),
-                   Tp(data034[i].x));
-      const Tp f0 = data034[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.2737367544323206e-12 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.2177310789485502e-15
+// mean(f - f_GSL): -1.3190936438383412e-13
+// variance(f - f_GSL): 2.4083978986000037e-25
+// stddev(f - f_GSL): 4.9075430702134478e-13
+const testcase_conf_hyperg<double>
+data034[21] =
+{
+  { 0.048003268794942940, 2.0000000000000000, 4.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.057624341628353531, 2.0000000000000000, 4.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.070351812026707330, 2.0000000000000000, 4.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.087607118443556675, 2.0000000000000000, 4.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.11166194492814810, 2.0000000000000000, 4.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.14626395019169272, 2.0000000000000000, 4.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.19780254687491297, 2.0000000000000000, 4.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.27754118707540437, 2.0000000000000000, 4.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.40600584970983794, 2.0000000000000000, 4.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.62182994108596157, 2.0000000000000000, 4.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 4.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.6903090292457281, 2.0000000000000000, 4.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 2.9999999999999987, 2.0000000000000000, 4.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 5.5745637607083687, 2.0000000000000000, 4.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 10.799653131214550, 2.0000000000000000, 4.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 21.707494910771032, 2.0000000000000000, 4.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 45.047643721415049, 2.0000000000000000, 4.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 96.072870999573666, 2.0000000000000000, 4.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 209.71579596387159, 2.0000000000000000, 4.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 466.93487648582487, 2.0000000000000000, 4.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 1057.3423581507243, 2.0000000000000000, 4.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler034 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=5.0000000000000000.
-testcase_conf_hyperg<double> data035[] = {
-  { 0.079198583522191404, 2.0000000000000000, 5.0000000000000000,
-          -10.000000000000000 },
-  { 0.093273046483222530, 2.0000000000000000, 5.0000000000000000,
-          -9.0000000000000000 },
-  { 0.11130650338531098, 2.0000000000000000, 5.0000000000000000,
-          -8.0000000000000000 },
-  { 0.13485262321044020, 2.0000000000000000, 5.0000000000000000,
-          -7.0000000000000000 },
-  { 0.16625354130388895, 2.0000000000000000, 5.0000000000000000,
-          -6.0000000000000000 },
-  { 0.20913010268188095, 2.0000000000000000, 5.0000000000000000,
-          -5.0000000000000000 },
-  { 0.26923036197926808, 2.0000000000000000, 5.0000000000000000,
-          -4.0000000000000000 },
-  { 0.35593410067935288, 2.0000000000000000, 5.0000000000000000,
-          -3.0000000000000000 },
-  { 0.48498537572540468, 2.0000000000000000, 5.0000000000000000,
-          -2.0000000000000000 },
-  { 0.68357364754153715, 2.0000000000000000, 5.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
-          0.0000000000000000 },
-  { 1.5224722339658285, 2.0000000000000000, 5.0000000000000000,
-          1.0000000000000000 },
-  { 2.4164158516040235, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000 },
-  { 4.0000000000000009, 2.0000000000000000, 5.0000000000000000,
-          3.0000000000000000 },
-  { 6.8998265656072721, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000 },
-  { 12.377330619077886, 2.0000000000000000, 5.0000000000000000,
-          5.0000000000000000 },
-  { 23.023821860707503, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000 },
-  { 44.261883885519374, 2.0000000000000000, 5.0000000000000000,
-          7.0000000000000000 },
-  { 87.631581651613160, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000 },
-  { 178.07042913745681, 2.0000000000000000, 5.0000000000000000,
-          9.0000000000000000 },
-  { 370.21982535275242, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=2.0000000000000000, c=5.0000000000000000.
-template <typename Tp>
-void test035()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data035)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data035[i].a), Tp(data035[i].c),
-                   Tp(data035[i].x));
-      const Tp f0 = data035[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.8421709430404007e-13 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.6284159117427726e-15
+// mean(f - f_GSL): 1.7819079545233762e-14
+// variance(f - f_GSL): 3.7258148690402422e-27
+// stddev(f - f_GSL): 6.1039453380909643e-14
+const testcase_conf_hyperg<double>
+data035[21] =
+{
+  { 0.079198583522191404, 2.0000000000000000, 5.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.093273046483222530, 2.0000000000000000, 5.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.11130650338531098, 2.0000000000000000, 5.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.13485262321044020, 2.0000000000000000, 5.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.16625354130388895, 2.0000000000000000, 5.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.20913010268188095, 2.0000000000000000, 5.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.26923036197926808, 2.0000000000000000, 5.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.35593410067935288, 2.0000000000000000, 5.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.48498537572540468, 2.0000000000000000, 5.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.68357364754153715, 2.0000000000000000, 5.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.5224722339658285, 2.0000000000000000, 5.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 2.4164158516040235, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 4.0000000000000009, 2.0000000000000000, 5.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 6.8998265656072721, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 12.377330619077886, 2.0000000000000000, 5.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 23.023821860707503, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 44.261883885519381, 2.0000000000000000, 5.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 87.631581651613160, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 178.07042913745681, 2.0000000000000000, 5.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 370.21982535275242, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler035 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=6.0000000000000000.
-testcase_conf_hyperg<double> data036[] = {
-  { 0.11120076271882003, 2.0000000000000000, 6.0000000000000000,
-          -10.000000000000000 },
-  { 0.12904862943139384, 2.0000000000000000, 6.0000000000000000,
-          -9.0000000000000000 },
-  { 0.15138192951001525, 2.0000000000000000, 6.0000000000000000,
-          -8.0000000000000000 },
-  { 0.17975865319179699, 2.0000000000000000, 6.0000000000000000,
-          -7.0000000000000000 },
-  { 0.21643190620010283, 2.0000000000000000, 6.0000000000000000,
-          -6.0000000000000000 },
-  { 0.26472863448288397, 2.0000000000000000, 6.0000000000000000,
-          -5.0000000000000000 },
-  { 0.32967091145818839, 2.0000000000000000, 6.0000000000000000,
-          -4.0000000000000000 },
-  { 0.41901702645681349, 2.0000000000000000, 6.0000000000000000,
-          -3.0000000000000000 },
-  { 0.54504387282378575, 2.0000000000000000, 6.0000000000000000,
-          -2.0000000000000000 },
-  { 0.72766470286539298, 2.0000000000000000, 6.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 6.0000000000000000,
-          0.0000000000000000 },
-  { 1.4185417547437151, 2.0000000000000000, 6.0000000000000000,
-          1.0000000000000000 },
-  { 2.0820792580201224, 2.0000000000000000, 6.0000000000000000,
-          2.0000000000000000 },
-  { 3.1676360873147318, 2.0000000000000000, 6.0000000000000000,
-          3.0000000000000000 },
-  { 4.9999999999999982, 2.0000000000000000, 6.0000000000000000,
-          4.0000000000000000 },
-  { 8.1886653095389406, 2.0000000000000000, 6.0000000000000000,
-          5.0000000000000000 },
-  { 13.902123255948611, 2.0000000000000000, 6.0000000000000000,
-          6.0000000000000000 },
-  { 24.426009224385378, 2.0000000000000000, 6.0000000000000000,
-          7.0000000000000000 },
-  { 44.315790825806538, 2.0000000000000000, 6.0000000000000000,
-          8.0000000000000000 },
-  { 82.810383859933609, 2.0000000000000000, 6.0000000000000000,
-          9.0000000000000000 },
-  { 158.95135372260788, 2.0000000000000000, 6.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=2.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test036()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data036)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data036[i].a), Tp(data036[i].c),
-                   Tp(data036[i].x));
-      const Tp f0 = data036[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 5.1159076974727213e-13 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.2185367269036845e-15
+// mean(f - f_GSL): 3.1802602879202997e-14
+// variance(f - f_GSL): 1.2085325965997663e-26
+// stddev(f - f_GSL): 1.0993327961085153e-13
+const testcase_conf_hyperg<double>
+data036[21] =
+{
+  { 0.11120076271882003, 2.0000000000000000, 6.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.12904862943139384, 2.0000000000000000, 6.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.15138192951001525, 2.0000000000000000, 6.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.17975865319179699, 2.0000000000000000, 6.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.21643190620010283, 2.0000000000000000, 6.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.26472863448288397, 2.0000000000000000, 6.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.32967091145818839, 2.0000000000000000, 6.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.41901702645681349, 2.0000000000000000, 6.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.54504387282378575, 2.0000000000000000, 6.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.72766470286539298, 2.0000000000000000, 6.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 6.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.4185417547437151, 2.0000000000000000, 6.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 2.0820792580201224, 2.0000000000000000, 6.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 3.1676360873147318, 2.0000000000000000, 6.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 4.9999999999999982, 2.0000000000000000, 6.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 8.1886653095389406, 2.0000000000000000, 6.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 13.902123255948611, 2.0000000000000000, 6.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 24.426009224385382, 2.0000000000000000, 6.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 44.315790825806545, 2.0000000000000000, 6.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 82.810383859933609, 2.0000000000000000, 6.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 158.95135372260788, 2.0000000000000000, 6.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler036 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=7.0000000000000000.
-testcase_conf_hyperg<double> data037[] = {
-  { 0.14279950968075858, 2.0000000000000000, 7.0000000000000000,
-          -10.000000000000000 },
-  { 0.16375995835694801, 2.0000000000000000, 7.0000000000000000,
-          -9.0000000000000000 },
-  { 0.18950218227311263, 2.0000000000000000, 7.0000000000000000,
-          -8.0000000000000000 },
-  { 0.22152437623624174, 2.0000000000000000, 7.0000000000000000,
-          -7.0000000000000000 },
-  { 0.26192490317988687, 2.0000000000000000, 7.0000000000000000,
-          -6.0000000000000000 },
-  { 0.31369515402282139, 2.0000000000000000, 7.0000000000000000,
-          -5.0000000000000000 },
-  { 0.38118033691430731, 2.0000000000000000, 7.0000000000000000,
-          -4.0000000000000000 },
-  { 0.47081822524156886, 2.0000000000000000, 7.0000000000000000,
-          -3.0000000000000000 },
-  { 0.59234644511675072, 2.0000000000000000, 7.0000000000000000,
-          -2.0000000000000000 },
-  { 0.76081413936917086, 2.0000000000000000, 7.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 7.0000000000000000,
-          0.0000000000000000 },
-  { 1.3483340379497220, 2.0000000000000000, 7.0000000000000000,
-          1.0000000000000000 },
-  { 1.8693566610905543, 2.0000000000000000, 7.0000000000000000,
-          2.0000000000000000 },
-  { 2.6705443492589280, 2.0000000000000000, 7.0000000000000000,
-          3.0000000000000000 },
-  { 3.9378251894863650, 2.0000000000000000, 7.0000000000000000,
-          4.0000000000000000 },
-  { 6.0000000000000018, 2.0000000000000000, 7.0000000000000000,
-          5.0000000000000000 },
-  { 9.4510616279743118, 2.0000000000000000, 7.0000000000000000,
-          6.0000000000000000 },
-  { 15.386290985363090, 2.0000000000000000, 7.0000000000000000,
-          7.0000000000000000 },
-  { 25.865132339516244, 2.0000000000000000, 7.0000000000000000,
-          8.0000000000000000 },
-  { 44.832204725298020, 2.0000000000000000, 7.0000000000000000,
-          9.0000000000000000 },
-  { 79.975676861303967, 2.0000000000000000, 7.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=2.0000000000000000, c=7.0000000000000000.
-template <typename Tp>
-void test037()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data037)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data037[i].a), Tp(data037[i].c),
-                   Tp(data037[i].x));
-      const Tp f0 = data037[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.1316282072803006e-13 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.6653456287428861e-15
+// mean(f - f_GSL): 7.4160254656806591e-15
+// variance(f - f_GSL): 2.2224165474381737e-27
+// stddev(f - f_GSL): 4.7142513164214887e-14
+const testcase_conf_hyperg<double>
+data037[21] =
+{
+  { 0.14279950968075855, 2.0000000000000000, 7.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.16375995835694801, 2.0000000000000000, 7.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.18950218227311263, 2.0000000000000000, 7.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.22152437623624174, 2.0000000000000000, 7.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.26192490317988687, 2.0000000000000000, 7.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.31369515402282139, 2.0000000000000000, 7.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.38118033691430731, 2.0000000000000000, 7.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.47081822524156886, 2.0000000000000000, 7.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.59234644511675072, 2.0000000000000000, 7.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.76081413936917086, 2.0000000000000000, 7.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 7.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.3483340379497220, 2.0000000000000000, 7.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.8693566610905543, 2.0000000000000000, 7.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 2.6705443492589280, 2.0000000000000000, 7.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 3.9378251894863650, 2.0000000000000000, 7.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 6.0000000000000018, 2.0000000000000000, 7.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 9.4510616279743118, 2.0000000000000000, 7.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 15.386290985363091, 2.0000000000000000, 7.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 25.865132339516240, 2.0000000000000000, 7.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 44.832204725298020, 2.0000000000000000, 7.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 79.975676861303953, 2.0000000000000000, 7.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler037 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=8.0000000000000000.
-testcase_conf_hyperg<double> data038[] = {
-  { 0.17337636610503362, 2.0000000000000000, 8.0000000000000000,
-          -10.000000000000000 },
-  { 0.19686670136921000, 2.0000000000000000, 8.0000000000000000,
-          -9.0000000000000000 },
-  { 0.22527678978110538, 2.0000000000000000, 8.0000000000000000,
-          -8.0000000000000000 },
-  { 0.26001525907740475, 2.0000000000000000, 8.0000000000000000,
-          -7.0000000000000000 },
-  { 0.30300466868014397, 2.0000000000000000, 8.0000000000000000,
-          -6.0000000000000000 },
-  { 0.35690946280485503, 2.0000000000000000, 8.0000000000000000,
-          -5.0000000000000000 },
-  { 0.42548267822218039, 2.0000000000000000, 8.0000000000000000,
-          -4.0000000000000000 },
-  { 0.51410215874088183, 2.0000000000000000, 8.0000000000000000,
-          -3.0000000000000000 },
-  { 0.63061421953299790, 2.0000000000000000, 8.0000000000000000,
-          -2.0000000000000000 },
-  { 0.78668452848510595, 2.0000000000000000, 8.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 8.0000000000000000,
-          0.0000000000000000 },
-  { 1.2979228320600693, 2.0000000000000000, 8.0000000000000000,
-          1.0000000000000000 },
-  { 1.7236644184225898, 2.0000000000000000, 8.0000000000000000,
-          2.0000000000000000 },
-  { 2.3469052224062485, 2.0000000000000000, 8.0000000000000000,
-          3.0000000000000000 },
-  { 3.2823881632022749, 2.0000000000000000, 8.0000000000000000,
-          4.0000000000000000 },
-  { 4.7230422799745782, 2.0000000000000000, 8.0000000000000000,
-          5.0000000000000000 },
-  { 7.0000000000000009, 2.0000000000000000, 8.0000000000000000,
-          6.0000000000000000 },
-  { 10.693145492681536, 2.0000000000000000, 8.0000000000000000,
-          7.0000000000000000 },
-  { 16.837993864717802, 2.0000000000000000, 8.0000000000000000,
-          8.0000000000000000 },
-  { 27.318786089757165, 2.0000000000000000, 8.0000000000000000,
-          9.0000000000000000 },
-  { 45.626379042330321, 2.0000000000000000, 8.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=2.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test038()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data038)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data038[i].a), Tp(data038[i].c),
-                   Tp(data038[i].x));
-      const Tp f0 = data038[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.9079850466805510e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.3209326942856951e-15
+// mean(f - f_GSL): -1.4115692741662704e-15
+// variance(f - f_GSL): 1.0460771032794031e-31
+// stddev(f - f_GSL): 3.2343115237704035e-16
+const testcase_conf_hyperg<double>
+data038[21] =
+{
+  { 0.17337636610503362, 2.0000000000000000, 8.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.19686670136921000, 2.0000000000000000, 8.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.22527678978110538, 2.0000000000000000, 8.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.26001525907740475, 2.0000000000000000, 8.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.30300466868014397, 2.0000000000000000, 8.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.35690946280485503, 2.0000000000000000, 8.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.42548267822218039, 2.0000000000000000, 8.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.51410215874088183, 2.0000000000000000, 8.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.63061421953299790, 2.0000000000000000, 8.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.78668452848510595, 2.0000000000000000, 8.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 8.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.2979228320600693, 2.0000000000000000, 8.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.7236644184225898, 2.0000000000000000, 8.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 2.3469052224062485, 2.0000000000000000, 8.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 3.2823881632022749, 2.0000000000000000, 8.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 4.7230422799745782, 2.0000000000000000, 8.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 7.0000000000000009, 2.0000000000000000, 8.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 10.693145492681536, 2.0000000000000000, 8.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 16.837993864717809, 2.0000000000000000, 8.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 27.318786089757172, 2.0000000000000000, 8.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 45.626379042330321, 2.0000000000000000, 8.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler038 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=9.0000000000000000.
-testcase_conf_hyperg<double> data039[] = {
-  { 0.20263008881072142, 2.0000000000000000, 9.0000000000000000,
-          -10.000000000000000 },
-  { 0.22815601647956382, 2.0000000000000000, 9.0000000000000000,
-          -9.0000000000000000 },
-  { 0.25863201094881560, 2.0000000000000000, 9.0000000000000000,
-          -8.0000000000000000 },
-  { 0.29536583498165569, 2.0000000000000000, 9.0000000000000000,
-          -7.0000000000000000 },
-  { 0.34010436746201422, 2.0000000000000000, 9.0000000000000000,
-          -6.0000000000000000 },
-  { 0.39521257401334392, 2.0000000000000000, 9.0000000000000000,
-          -5.0000000000000000 },
-  { 0.46393810791120338, 2.0000000000000000, 9.0000000000000000,
-          -4.0000000000000000 },
-  { 0.55080841854553553, 2.0000000000000000, 9.0000000000000000,
-          -3.0000000000000000 },
-  { 0.66223601210150940, 2.0000000000000000, 9.0000000000000000,
-          -2.0000000000000000 },
-  { 0.80745573956474603, 2.0000000000000000, 9.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 9.0000000000000000,
-          0.0000000000000000 },
-  { 1.2600591877766618, 2.0000000000000000, 9.0000000000000000,
-          1.0000000000000000 },
-  { 1.6183220921129462, 2.0000000000000000, 9.0000000000000000,
-          2.0000000000000000 },
-  { 2.1223296796666578, 2.0000000000000000, 9.0000000000000000,
-          3.0000000000000000 },
-  { 2.8471644896068233, 2.0000000000000000, 9.0000000000000000,
-          4.0000000000000000 },
-  { 3.9137352959186495, 2.0000000000000000, 9.0000000000000000,
-          5.0000000000000000 },
-  { 5.5205708009288541, 2.0000000000000000, 9.0000000000000000,
-          6.0000000000000000 },
-  { 7.9999999999999982, 2.0000000000000000, 9.0000000000000000,
-          7.0000000000000000 },
-  { 11.918996932358892, 2.0000000000000000, 9.0000000000000000,
-          8.0000000000000000 },
-  { 18.262984349485706, 2.0000000000000000, 9.0000000000000000,
-          9.0000000000000000 },
-  { 28.775827425398138, 2.0000000000000000, 9.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=2.0000000000000000, c=9.0000000000000000.
-template <typename Tp>
-void test039()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data039)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data039[i].a), Tp(data039[i].c),
-                   Tp(data039[i].x));
-      const Tp f0 = data039[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 6.3948846218409017e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.2223112918020366e-15
+// mean(f - f_GSL): 5.1453550415068266e-15
+// variance(f - f_GSL): 1.8153715516608073e-28
+// stddev(f - f_GSL): 1.3473572472291108e-14
+const testcase_conf_hyperg<double>
+data039[21] =
+{
+  { 0.20263008881072142, 2.0000000000000000, 9.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.22815601647956382, 2.0000000000000000, 9.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.25863201094881560, 2.0000000000000000, 9.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.29536583498165569, 2.0000000000000000, 9.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.34010436746201422, 2.0000000000000000, 9.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.39521257401334392, 2.0000000000000000, 9.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.46393810791120338, 2.0000000000000000, 9.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.55080841854553553, 2.0000000000000000, 9.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.66223601210150940, 2.0000000000000000, 9.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.80745573956474603, 2.0000000000000000, 9.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 9.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.2600591877766618, 2.0000000000000000, 9.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.6183220921129462, 2.0000000000000000, 9.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 2.1223296796666578, 2.0000000000000000, 9.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 2.8471644896068233, 2.0000000000000000, 9.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 3.9137352959186495, 2.0000000000000000, 9.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 5.5205708009288541, 2.0000000000000000, 9.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 7.9999999999999982, 2.0000000000000000, 9.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 11.918996932358892, 2.0000000000000000, 9.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 18.262984349485706, 2.0000000000000000, 9.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 28.775827425398141, 2.0000000000000000, 9.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler039 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, c=10.000000000000000.
-testcase_conf_hyperg<double> data040[] = {
-  { 0.23043485654507717, 2.0000000000000000, 10.000000000000000,
-          -10.000000000000000 },
-  { 0.25758423249046342, 2.0000000000000000, 10.000000000000000,
-          -9.0000000000000000 },
-  { 0.28964158686142122, 2.0000000000000000, 10.000000000000000,
-          -8.0000000000000000 },
-  { 0.32781237017833142, 2.0000000000000000, 10.000000000000000,
-          -7.0000000000000000 },
-  { 0.37367756025366927, 2.0000000000000000, 10.000000000000000,
-          -6.0000000000000000 },
-  { 0.42933548067397925, 2.0000000000000000, 10.000000000000000,
-          -5.0000000000000000 },
-  { 0.49760646239977369, 2.0000000000000000, 10.000000000000000,
-          -4.0000000000000000 },
-  { 0.58233221879973318, 2.0000000000000000, 10.000000000000000,
-          -3.0000000000000000 },
-  { 0.68881993949245379, 2.0000000000000000, 10.000000000000000,
-          -2.0000000000000000 },
-  { 0.82451063690694526, 2.0000000000000000, 10.000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
-          0.0000000000000000 },
-  { 1.2306214716549471, 2.0000000000000000, 10.000000000000000,
-          1.0000000000000000 },
-  { 1.5389392974099088, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000 },
-  { 1.9587362987499699, 2.0000000000000000, 10.000000000000000,
-          3.0000000000000000 },
-  { 2.5414934688204727, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000 },
-  { 3.3670852989803555, 2.0000000000000000, 10.000000000000000,
-          5.0000000000000000 },
-  { 4.5617124027865650, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000 },
-  { 6.3284392760597825, 2.0000000000000000, 10.000000000000000,
-          7.0000000000000000 },
-  { 9.0000000000000036, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000 },
-  { 13.131492174742865, 2.0000000000000000, 10.000000000000000,
-          9.0000000000000000 },
-  { 19.665496455238888, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=2.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test040()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data040)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data040[i].a), Tp(data040[i].c),
-                   Tp(data040[i].x));
-      const Tp f0 = data040[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.5527136788005009e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.8065720775912871e-15
+// mean(f - f_GSL): 1.6864816421686901e-15
+// variance(f - f_GSL): 6.0122471886719455e-29
+// stddev(f - f_GSL): 7.7538681886345901e-15
+const testcase_conf_hyperg<double>
+data040[21] =
+{
+  { 0.23043485654507717, 2.0000000000000000, 10.000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.25758423249046342, 2.0000000000000000, 10.000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.28964158686142122, 2.0000000000000000, 10.000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.32781237017833142, 2.0000000000000000, 10.000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.37367756025366927, 2.0000000000000000, 10.000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.42933548067397925, 2.0000000000000000, 10.000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.49760646239977369, 2.0000000000000000, 10.000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.58233221879973318, 2.0000000000000000, 10.000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.68881993949245379, 2.0000000000000000, 10.000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.82451063690694526, 2.0000000000000000, 10.000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 10.000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.2306214716549471, 2.0000000000000000, 10.000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1.5389392974099088, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1.9587362987499699, 2.0000000000000000, 10.000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 2.5414934688204727, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 3.3670852989803555, 2.0000000000000000, 10.000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 4.5617124027865650, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 6.3284392760597825, 2.0000000000000000, 10.000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 9.0000000000000036, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 13.131492174742865, 2.0000000000000000, 10.000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 19.665496455238888, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler040 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, c=1.0000000000000000.
-testcase_conf_hyperg<double> data041[] = {
-  { 0.00049939922738733355, 5.0000000000000000, 1.0000000000000000,
-          -10.000000000000000 },
-  { -0.00057077034390089253, 5.0000000000000000, 1.0000000000000000,
-          -9.0000000000000000 },
-  { -0.0032428054030576147, 5.0000000000000000, 1.0000000000000000,
-          -8.0000000000000000 },
-  { -0.0078649819529077025, 5.0000000000000000, 1.0000000000000000,
-          -7.0000000000000000 },
-  { -0.012393760883331793, 5.0000000000000000, 1.0000000000000000,
-          -6.0000000000000000 },
-  { -0.0087031815404853934, 5.0000000000000000, 1.0000000000000000,
-          -5.0000000000000000 },
-  { 0.018315638888832021, 5.0000000000000000, 1.0000000000000000,
-          -4.0000000000000000 },
-  { 0.068457219005814696, 5.0000000000000000, 1.0000000000000000,
-          -3.0000000000000000 },
-  { 0.045111761078875295, 5.0000000000000000, 1.0000000000000000,
-          -2.0000000000000000 },
-  { -0.22992465073215118, 5.0000000000000000, 1.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
-          0.0000000000000000 },
-  { 23.671704256164183, 5.0000000000000000, 1.0000000000000000,
-          1.0000000000000000 },
-  { 199.50451467112745, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000 },
-  { 1232.7498286606428, 5.0000000000000000, 1.0000000000000000,
-          3.0000000000000000 },
-  { 6460.7810872554019, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000 },
-  { 30480.352550691667, 5.0000000000000000, 1.0000000000000000,
-          5.0000000000000000 },
-  { 133534.93064609534, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000 },
-  { 553479.89366849652, 5.0000000000000000, 1.0000000000000000,
-          7.0000000000000000 },
-  { 2196966.0364497532, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000 },
-  { 8422142.8572236635, 5.0000000000000000, 1.0000000000000000,
-          9.0000000000000000 },
-  { 31373029.447069697, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=5.0000000000000000, c=1.0000000000000000.
-template <typename Tp>
-void test041()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data041)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data041[i].a), Tp(data041[i].c),
-                   Tp(data041[i].x));
-      const Tp f0 = data041[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000034e-10));
-}
+// max(|f - f_GSL|): 1.1175870895385742e-08 at index 20
+// max(|f - f_GSL| / |f_GSL|): 5.3427429899548483e-12
+// mean(f - f_GSL): 7.1806275564715547e-10
+// variance(f - f_GSL): 5.7417019320980887e-18
+// stddev(f - f_GSL): 2.3961848701838697e-09
+const testcase_conf_hyperg<double>
+data041[21] =
+{
+  { 0.00049939922738733312, 5.0000000000000000, 1.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -0.00057077034390089253, 5.0000000000000000, 1.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { -0.0032428054030576147, 5.0000000000000000, 1.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { -0.0078649819529077025, 5.0000000000000000, 1.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { -0.012393760883331793, 5.0000000000000000, 1.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { -0.0087031815404853934, 5.0000000000000000, 1.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.018315638888832021, 5.0000000000000000, 1.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.068457219005814696, 5.0000000000000000, 1.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.045111761078875295, 5.0000000000000000, 1.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { -0.22992465073215118, 5.0000000000000000, 1.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 23.671704256164183, 5.0000000000000000, 1.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 199.50451467112745, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1232.7498286606428, 5.0000000000000000, 1.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 6460.7810872554019, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 30480.352550691663, 5.0000000000000000, 1.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 133534.93064609537, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 553479.89366849652, 5.0000000000000000, 1.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 2196966.0364497532, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 8422142.8572236635, 5.0000000000000000, 1.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 31373029.447069697, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler041 = 5.0000000000000034e-10;
 
 // Test data for a=5.0000000000000000, c=2.0000000000000000.
-testcase_conf_hyperg<double> data042[] = {
-  { -0.00025726626865408083, 5.0000000000000000, 2.0000000000000000,
-          -10.000000000000000 },
-  { -0.00029309828470586396, 5.0000000000000000, 2.0000000000000000,
-          -9.0000000000000000 },
-  { -0.00011182087596750395, 5.0000000000000000, 2.0000000000000000,
-          -8.0000000000000000 },
-  { 0.00064591639226778245, 5.0000000000000000, 2.0000000000000000,
-          -7.0000000000000000 },
-  { 0.0024787521766663585, 5.0000000000000000, 2.0000000000000000,
-          -6.0000000000000000 },
-  { 0.0053342080409426616, 5.0000000000000000, 2.0000000000000000,
-          -5.0000000000000000 },
-  { 0.0061052129629022966, 5.0000000000000000, 2.0000000000000000,
-          -4.0000000000000000 },
-  { -0.0062233835459823200, 5.0000000000000000, 2.0000000000000000,
-          -3.0000000000000000 },
-  { -0.045111761078871798, 5.0000000000000000, 2.0000000000000000,
-          -2.0000000000000000 },
-  { -0.015328310048810216, 5.0000000000000000, 2.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
-          0.0000000000000000 },
-  { 8.2681072282295975, 5.0000000000000000, 2.0000000000000000,
-          1.0000000000000000 },
-  { 46.797355293227440, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000 },
-  { 223.45159827046285, 5.0000000000000000, 2.0000000000000000,
-          3.0000000000000000 },
-  { 964.56731725221459, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000 },
-  { 3889.6615448133625, 5.0000000000000000, 2.0000000000000000,
-          5.0000000000000000 },
-  { 14926.865359231202, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000 },
-  { 55151.509259297891, 5.0000000000000000, 2.0000000000000000,
-          7.0000000000000000 },
-  { 197736.87980710136, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000 },
-  { 691800.79031674843, 5.0000000000000000, 2.0000000000000000,
-          9.0000000000000000 },
-  { 2371516.1505741901, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=5.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test042()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data042)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data042[i].a), Tp(data042[i].c),
-                   Tp(data042[i].x));
-      const Tp f0 = data042[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
-}
+// max(|f - f_GSL|): 1.8626451492309570e-09 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.4711248979266200e-12
+// mean(f - f_GSL): -8.7549301031074165e-11
+// variance(f - f_GSL): 1.6542567669056424e-19
+// stddev(f - f_GSL): 4.0672555450889020e-10
+const testcase_conf_hyperg<double>
+data042[21] =
+{
+  { -0.00025726626865408083, 5.0000000000000000, 2.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -0.00029309828470586396, 5.0000000000000000, 2.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { -0.00011182087596750400, 5.0000000000000000, 2.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.00064591639226778245, 5.0000000000000000, 2.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.0024787521766663585, 5.0000000000000000, 2.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.0053342080409426616, 5.0000000000000000, 2.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.0061052129629022966, 5.0000000000000000, 2.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { -0.0062233835459823200, 5.0000000000000000, 2.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { -0.045111761078871798, 5.0000000000000000, 2.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { -0.015328310048810216, 5.0000000000000000, 2.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 8.2681072282295975, 5.0000000000000000, 2.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 46.797355293227440, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 223.45159827046285, 5.0000000000000000, 2.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 964.56731725221459, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 3889.6615448133625, 5.0000000000000000, 2.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 14926.865359231202, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 55151.509259297891, 5.0000000000000000, 2.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 197736.87980710136, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 691800.79031674843, 5.0000000000000000, 2.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 2371516.1505741901, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler042 = 1.0000000000000006e-10;
 
 // Test data for a=5.0000000000000000, c=3.0000000000000000.
-testcase_conf_hyperg<double> data043[] = {
-  { 0.00012106647936662629, 5.0000000000000000, 3.0000000000000000,
-          -10.000000000000000 },
-  { 0.00021596715715168925, 5.0000000000000000, 3.0000000000000000,
-          -9.0000000000000000 },
-  { 0.00033546262790251185, 5.0000000000000000, 3.0000000000000000,
-          -8.0000000000000000 },
-  { 0.00037995081898104839, 5.0000000000000000, 3.0000000000000000,
-          -7.0000000000000000 },
-  { 0.0000000000000000, 5.0000000000000000, 3.0000000000000000,
-          -6.0000000000000000 },
-  { -0.0016844867497713672, 5.0000000000000000, 3.0000000000000000,
-          -5.0000000000000000 },
-  { -0.0061052129629113917, 5.0000000000000000, 3.0000000000000000,
-          -4.0000000000000000 },
-  { -0.012446767091965986, 5.0000000000000000, 3.0000000000000000,
-          -3.0000000000000000 },
-  { 7.5126173746727200e-18, 5.0000000000000000, 3.0000000000000000,
-          -2.0000000000000000 },
-  { 0.15328310048810098, 5.0000000000000000, 3.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 3.0000000000000000,
-          0.0000000000000000 },
-  { 4.7569931998033290, 5.0000000000000000, 3.0000000000000000,
-          1.0000000000000000 },
-  { 19.704149597148401, 5.0000000000000000, 3.0000000000000000,
-          2.0000000000000000 },
-  { 75.320763461953760, 5.0000000000000000, 3.0000000000000000,
-          3.0000000000000000 },
-  { 272.99075016572118, 5.0000000000000000, 3.0000000000000000,
-          4.0000000000000000 },
-  { 952.31777090819992, 5.0000000000000000, 3.0000000000000000,
-          5.0000000000000000 },
-  { 3227.4303479418809, 5.0000000000000000, 3.0000000000000000,
-          6.0000000000000000 },
-  { 10692.173294677470, 5.0000000000000000, 3.0000000000000000,
-          7.0000000000000000 },
-  { 34777.843182153498, 5.0000000000000000, 3.0000000000000000,
-          8.0000000000000000 },
-  { 111417.40400416154, 5.0000000000000000, 3.0000000000000000,
-          9.0000000000000000 },
-  { 352423.45271690749, 5.0000000000000000, 3.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=5.0000000000000000, c=3.0000000000000000.
-template <typename Tp>
-void test043()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data043)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data043[i].a), Tp(data043[i].c),
-                   Tp(data043[i].x));
-      const Tp f0 = data043[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000028e-11));
-}
+// max(|f - f_GSL|): 5.8207660913467407e-11 at index 20
+// max(|f - f_GSL| / |f_GSL|): 7.8460745975133666e-13
+// mean(f - f_GSL): 4.8403470031658968e-12
+// variance(f - f_GSL): 1.4952368518503471e-22
+// stddev(f - f_GSL): 1.2227987781521321e-11
+const testcase_conf_hyperg<double>
+data043[21] =
+{
+  { 0.00012106647936662628, 5.0000000000000000, 3.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.00021596715715168925, 5.0000000000000000, 3.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.00033546262790251185, 5.0000000000000000, 3.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.00037995081898104839, 5.0000000000000000, 3.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.0000000000000000, 5.0000000000000000, 3.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { -0.0016844867497713668, 5.0000000000000000, 3.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { -0.0061052129629113926, 5.0000000000000000, 3.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { -0.012446767091965986, 5.0000000000000000, 3.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.0000000000000000, 5.0000000000000000, 3.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.15328310048810098, 5.0000000000000000, 3.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 3.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 4.7569931998033299, 5.0000000000000000, 3.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 19.704149597148401, 5.0000000000000000, 3.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 75.320763461953760, 5.0000000000000000, 3.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 272.99075016572118, 5.0000000000000000, 3.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 952.31777090819992, 5.0000000000000000, 3.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 3227.4303479418809, 5.0000000000000000, 3.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 10692.173294677470, 5.0000000000000000, 3.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 34777.843182153498, 5.0000000000000000, 3.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 111417.40400416154, 5.0000000000000000, 3.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 352423.45271690749, 5.0000000000000000, 3.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler043 = 5.0000000000000028e-11;
 
 // Test data for a=5.0000000000000000, c=4.0000000000000000.
-testcase_conf_hyperg<double> data044[] = {
-  { -6.8099894643727278e-05, 5.0000000000000000, 4.0000000000000000,
-          -10.000000000000000 },
-  { -0.00015426225510834944, 5.0000000000000000, 4.0000000000000000,
-          -9.0000000000000000 },
-  { -0.00033546262790251185, 5.0000000000000000, 4.0000000000000000,
-          -8.0000000000000000 },
-  { -0.00068391147416588716, 5.0000000000000000, 4.0000000000000000,
-          -7.0000000000000000 },
-  { -0.0012393760883331792, 5.0000000000000000, 4.0000000000000000,
-          -6.0000000000000000 },
-  { -0.0016844867497713668, 5.0000000000000000, 4.0000000000000000,
-          -5.0000000000000000 },
-  { 0.0000000000000000, 5.0000000000000000, 4.0000000000000000,
-          -4.0000000000000000 },
-  { 0.012446767091965986, 5.0000000000000000, 4.0000000000000000,
-          -3.0000000000000000 },
-  { 0.067667641618306351, 5.0000000000000000, 4.0000000000000000,
-          -2.0000000000000000 },
-  { 0.27590958087858175, 5.0000000000000000, 4.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 4.0000000000000000,
-          0.0000000000000000 },
-  { 3.3978522855738063, 5.0000000000000000, 4.0000000000000000,
-          1.0000000000000000 },
-  { 11.083584148395975, 5.0000000000000000, 4.0000000000000000,
-          2.0000000000000000 },
-  { 35.149689615578417, 5.0000000000000000, 4.0000000000000000,
-          3.0000000000000000 },
-  { 109.19630006628847, 5.0000000000000000, 4.0000000000000000,
-          4.0000000000000000 },
-  { 333.92960798079736, 5.0000000000000000, 4.0000000000000000,
-          5.0000000000000000 },
-  { 1008.5719837318378, 5.0000000000000000, 4.0000000000000000,
-          6.0000000000000000 },
-  { 3015.7411856782610, 5.0000000000000000, 4.0000000000000000,
-          7.0000000000000000 },
-  { 8942.8739611251840, 5.0000000000000000, 4.0000000000000000,
-          8.0000000000000000 },
-  { 26335.022764620000, 5.0000000000000000, 4.0000000000000000,
-          9.0000000000000000 },
-  { 77092.630281823513, 5.0000000000000000, 4.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=5.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test044()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data044)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data044[i].a), Tp(data044[i].c),
-                   Tp(data044[i].x));
-      const Tp f0 = data044[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-}
+// max(|f - f_GSL|): 1.4551915228366852e-11 at index 20
+// max(|f - f_GSL| / |f_GSL|): 4.8846719461489400e-13
+// mean(f - f_GSL): -4.3556563012715198e-13
+// variance(f - f_GSL): 1.0461744613935412e-23
+// stddev(f - f_GSL): 3.2344620285196441e-12
+const testcase_conf_hyperg<double>
+data044[21] =
+{
+  { -6.8099894643727278e-05, 5.0000000000000000, 4.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -0.00015426225510834944, 5.0000000000000000, 4.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { -0.00033546262790251185, 5.0000000000000000, 4.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { -0.00068391147416588716, 5.0000000000000000, 4.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { -0.0012393760883331792, 5.0000000000000000, 4.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { -0.0016844867497713668, 5.0000000000000000, 4.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.0000000000000000, 5.0000000000000000, 4.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.012446767091965986, 5.0000000000000000, 4.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.067667641618306351, 5.0000000000000000, 4.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.27590958087858170, 5.0000000000000000, 4.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 4.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 3.3978522855738067, 5.0000000000000000, 4.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 11.083584148395975, 5.0000000000000000, 4.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 35.149689615578417, 5.0000000000000000, 4.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 109.19630006628847, 5.0000000000000000, 4.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 333.92960798079736, 5.0000000000000000, 4.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1008.5719837318378, 5.0000000000000000, 4.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 3015.7411856782610, 5.0000000000000000, 4.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 8942.8739611251840, 5.0000000000000000, 4.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 26335.022764620000, 5.0000000000000000, 4.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 77092.630281823513, 5.0000000000000000, 4.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler044 = 2.5000000000000014e-11;
 
 // Test data for a=5.0000000000000000, c=5.0000000000000000.
-testcase_conf_hyperg<double> data045[] = {
-  { 4.5399929762484854e-05, 5.0000000000000000, 5.0000000000000000,
-          -10.000000000000000 },
-  { 0.00012340980408667956, 5.0000000000000000, 5.0000000000000000,
-          -9.0000000000000000 },
-  { 0.00033546262790251185, 5.0000000000000000, 5.0000000000000000,
-          -8.0000000000000000 },
-  { 0.00091188196555451624, 5.0000000000000000, 5.0000000000000000,
-          -7.0000000000000000 },
-  { 0.0024787521766663585, 5.0000000000000000, 5.0000000000000000,
-          -6.0000000000000000 },
-  { 0.0067379469990854670, 5.0000000000000000, 5.0000000000000000,
-          -5.0000000000000000 },
-  { 0.018315638888734179, 5.0000000000000000, 5.0000000000000000,
-          -4.0000000000000000 },
-  { 0.049787068367863944, 5.0000000000000000, 5.0000000000000000,
-          -3.0000000000000000 },
-  { 0.13533528323661270, 5.0000000000000000, 5.0000000000000000,
-          -2.0000000000000000 },
-  { 0.36787944117144233, 5.0000000000000000, 5.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
-          0.0000000000000000 },
-  { 2.7182818284590451, 5.0000000000000000, 5.0000000000000000,
-          1.0000000000000000 },
-  { 7.3890560989306504, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000 },
-  { 20.085536923187668, 5.0000000000000000, 5.0000000000000000,
-          3.0000000000000000 },
-  { 54.598150033144236, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000 },
-  { 148.41315910257660, 5.0000000000000000, 5.0000000000000000,
-          5.0000000000000000 },
-  { 403.42879349273511, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000 },
-  { 1096.6331584284585, 5.0000000000000000, 5.0000000000000000,
-          7.0000000000000000 },
-  { 2980.9579870417283, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000 },
-  { 8103.0839275753842, 5.0000000000000000, 5.0000000000000000,
-          9.0000000000000000 },
-  { 22026.465794806718, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=5.0000000000000000, c=5.0000000000000000.
-template <typename Tp>
-void test045()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data045)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data045[i].a), Tp(data045[i].c),
-                   Tp(data045[i].x));
-      const Tp f0 = data045[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_conf_hyperg<double>
+data045[21] =
+{
+  { 4.5399929762484847e-05, 5.0000000000000000, 5.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.00012340980408667956, 5.0000000000000000, 5.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.00033546262790251185, 5.0000000000000000, 5.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.00091188196555451624, 5.0000000000000000, 5.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.0024787521766663585, 5.0000000000000000, 5.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.0067379469990854670, 5.0000000000000000, 5.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.018315638888734182, 5.0000000000000000, 5.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.049787068367863944, 5.0000000000000000, 5.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.13533528323661270, 5.0000000000000000, 5.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.36787944117144228, 5.0000000000000000, 5.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 2.7182818284590455, 5.0000000000000000, 5.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 7.3890560989306504, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 20.085536923187668, 5.0000000000000000, 5.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 54.598150033144236, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 148.41315910257660, 5.0000000000000000, 5.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 403.42879349273511, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1096.6331584284585, 5.0000000000000000, 5.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 2980.9579870417283, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 8103.0839275753842, 5.0000000000000000, 5.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 22026.465794806718, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler045 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, c=6.0000000000000000.
-testcase_conf_hyperg<double> data046[] = {
-  { 0.0011648967743076431, 5.0000000000000000, 6.0000000000000000,
-          -10.000000000000000 },
-  { 0.0019205128456127479, 5.0000000000000000, 6.0000000000000000,
-          -9.0000000000000000 },
-  { 0.0032972446271226320, 5.0000000000000000, 6.0000000000000000,
-          -8.0000000000000000 },
-  { 0.0059047424914709006, 5.0000000000000000, 6.0000000000000000,
-          -7.0000000000000000 },
-  { 0.011033078698817415, 5.0000000000000000, 6.0000000000000000,
-          -6.0000000000000000 },
-  { 0.021485057853495842, 5.0000000000000000, 6.0000000000000000,
-          -5.0000000000000000 },
-  { 0.043495671658608563, 5.0000000000000000, 6.0000000000000000,
-          -4.0000000000000000 },
-  { 0.091228027395668113, 5.0000000000000000, 6.0000000000000000,
-          -3.0000000000000000 },
-  { 0.19744881503891684, 5.0000000000000000, 6.0000000000000000,
-          -2.0000000000000000 },
-  { 0.43918161928124549, 5.0000000000000000, 6.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 6.0000000000000000,
-          0.0000000000000000 },
-  { 2.3226822806570353, 5.0000000000000000, 6.0000000000000000,
-          1.0000000000000000 },
-  { 5.4863201236633126, 5.0000000000000000, 6.0000000000000000,
-          2.0000000000000000 },
-  { 13.144500379942246, 5.0000000000000000, 6.0000000000000000,
-          3.0000000000000000 },
-  { 31.873916035045447, 5.0000000000000000, 6.0000000000000000,
-          4.0000000000000000 },
-  { 78.086286951596321, 5.0000000000000000, 6.0000000000000000,
-          5.0000000000000000 },
-  { 192.98291046720354, 5.0000000000000000, 6.0000000000000000,
-          6.0000000000000000 },
-  { 480.54877204888402, 5.0000000000000000, 6.0000000000000000,
-          7.0000000000000000 },
-  { 1204.4605636118313, 5.0000000000000000, 6.0000000000000000,
-          8.0000000000000000 },
-  { 3036.1329048350581, 5.0000000000000000, 6.0000000000000000,
-          9.0000000000000000 },
-  { 7691.6406555465064, 5.0000000000000000, 6.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=5.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test046()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data046)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data046[i].a), Tp(data046[i].c),
-                   Tp(data046[i].x));
-      const Tp f0 = data046[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
-}
+// max(|f - f_GSL|): 9.0949470177292824e-13 at index 19
+// max(|f - f_GSL| / |f_GSL|): 1.4519358507818386e-13
+// mean(f - f_GSL): 3.9988628727782860e-14
+// variance(f - f_GSL): 4.7329726232182936e-26
+// stddev(f - f_GSL): 2.1755396165591409e-13
+const testcase_conf_hyperg<double>
+data046[21] =
+{
+  { 0.0011648967743076429, 5.0000000000000000, 6.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.0019205128456127479, 5.0000000000000000, 6.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.0032972446271226324, 5.0000000000000000, 6.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.0059047424914709015, 5.0000000000000000, 6.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.011033078698817415, 5.0000000000000000, 6.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.021485057853495849, 5.0000000000000000, 6.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.043495671658608570, 5.0000000000000000, 6.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.091228027395668113, 5.0000000000000000, 6.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.19744881503891684, 5.0000000000000000, 6.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.43918161928124544, 5.0000000000000000, 6.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 6.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 2.3226822806570357, 5.0000000000000000, 6.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 5.4863201236633126, 5.0000000000000000, 6.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 13.144500379942246, 5.0000000000000000, 6.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 31.873916035045458, 5.0000000000000000, 6.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 78.086286951596321, 5.0000000000000000, 6.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 192.98291046720357, 5.0000000000000000, 6.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 480.54877204888402, 5.0000000000000000, 6.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 1204.4605636118315, 5.0000000000000000, 6.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 3036.1329048350581, 5.0000000000000000, 6.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 7691.6406555465046, 5.0000000000000000, 6.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler046 = 1.0000000000000006e-11;
 
 // Test data for a=5.0000000000000000, c=7.0000000000000000.
-testcase_conf_hyperg<double> data047[] = {
-  { 0.0036308901122103932, 5.0000000000000000, 7.0000000000000000,
-          -10.000000000000000 },
-  { 0.0055327336019229401, 5.0000000000000000, 7.0000000000000000,
-          -9.0000000000000000 },
-  { 0.0086767852656603455, 5.0000000000000000, 7.0000000000000000,
-          -8.0000000000000000 },
-  { 0.014030481266326614, 5.0000000000000000, 7.0000000000000000,
-          -7.0000000000000000 },
-  { 0.023426839582149212, 5.0000000000000000, 7.0000000000000000,
-          -6.0000000000000000 },
-  { 0.040427681994512799, 5.0000000000000000, 7.0000000000000000,
-          -5.0000000000000000 },
-  { 0.072123784177593755, 5.0000000000000000, 7.0000000000000000,
-          -4.0000000000000000 },
-  { 0.13295857409596740, 5.0000000000000000, 7.0000000000000000,
-          -3.0000000000000000 },
-  { 0.25298991319893882, 5.0000000000000000, 7.0000000000000000,
-          -2.0000000000000000 },
-  { 0.49602437239337821, 5.0000000000000000, 7.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 7.0000000000000000,
-          0.0000000000000000 },
-  { 2.0681072498819240, 5.0000000000000000, 7.0000000000000000,
-          1.0000000000000000 },
-  { 4.3768811129698140, 5.0000000000000000, 7.0000000000000000,
-          2.0000000000000000 },
-  { 9.4566368471992224, 5.0000000000000000, 7.0000000000000000,
-          3.0000000000000000 },
-  { 20.811741224531826, 5.0000000000000000, 7.0000000000000000,
-          4.0000000000000000 },
-  { 46.556488803696276, 5.0000000000000000, 7.0000000000000000,
-          5.0000000000000000 },
-  { 105.66804767556316, 5.0000000000000000, 7.0000000000000000,
-          6.0000000000000000 },
-  { 242.93097638084427, 5.0000000000000000, 7.0000000000000000,
-          7.0000000000000000 },
-  { 564.89804380887358, 5.0000000000000000, 7.0000000000000000,
-          8.0000000000000000 },
-  { 1326.9606865425994, 5.0000000000000000, 7.0000000000000000,
-          9.0000000000000000 },
-  { 3145.3685154983909, 5.0000000000000000, 7.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=5.0000000000000000, c=7.0000000000000000.
-template <typename Tp>
-void test047()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data047)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data047[i].a), Tp(data047[i].c),
-                   Tp(data047[i].x));
-      const Tp f0 = data047[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
-}
+// max(|f - f_GSL|): 1.0004441719502211e-11 at index 20
+// max(|f - f_GSL| / |f_GSL|): 5.0762860793473551e-14
+// mean(f - f_GSL): 3.9645909323339697e-13
+// variance(f - f_GSL): 4.8464498327008765e-24
+// stddev(f - f_GSL): 2.2014653830348723e-12
+const testcase_conf_hyperg<double>
+data047[21] =
+{
+  { 0.0036308901122103932, 5.0000000000000000, 7.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.0055327336019229401, 5.0000000000000000, 7.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.0086767852656603455, 5.0000000000000000, 7.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.014030481266326614, 5.0000000000000000, 7.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.023426839582149212, 5.0000000000000000, 7.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.040427681994512799, 5.0000000000000000, 7.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.072123784177593755, 5.0000000000000000, 7.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.13295857409596740, 5.0000000000000000, 7.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.25298991319893882, 5.0000000000000000, 7.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.49602437239337821, 5.0000000000000000, 7.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 7.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 2.0681072498819240, 5.0000000000000000, 7.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 4.3768811129698140, 5.0000000000000000, 7.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 9.4566368471992224, 5.0000000000000000, 7.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 20.811741224531826, 5.0000000000000000, 7.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 46.556488803696276, 5.0000000000000000, 7.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 105.66804767556316, 5.0000000000000000, 7.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 242.93097638084427, 5.0000000000000000, 7.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 564.89804380887358, 5.0000000000000000, 7.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 1326.9606865425994, 5.0000000000000000, 7.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 3145.3685154983905, 5.0000000000000000, 7.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler047 = 5.0000000000000029e-12;
 
 // Test data for a=5.0000000000000000, c=8.0000000000000000.
-testcase_conf_hyperg<double> data048[] = {
-  { 0.0075295293831406122, 5.0000000000000000, 8.0000000000000000,
-          -10.000000000000000 },
-  { 0.010936052508673187, 5.0000000000000000, 8.0000000000000000,
-          -9.0000000000000000 },
-  { 0.016247454253649721, 5.0000000000000000, 8.0000000000000000,
-          -8.0000000000000000 },
-  { 0.024729468107576008, 5.0000000000000000, 8.0000000000000000,
-          -7.0000000000000000 },
-  { 0.038615775445860964, 5.0000000000000000, 8.0000000000000000,
-          -6.0000000000000000 },
-  { 0.061937865588523586, 5.0000000000000000, 8.0000000000000000,
-          -5.0000000000000000 },
-  { 0.10213565389690644, 5.0000000000000000, 8.0000000000000000,
-          -4.0000000000000000 },
-  { 0.17324118243379236, 5.0000000000000000, 8.0000000000000000,
-          -3.0000000000000000 },
-  { 0.30228316551605494, 5.0000000000000000, 8.0000000000000000,
-          -2.0000000000000000 },
-  { 0.54238748802203829, 5.0000000000000000, 8.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 8.0000000000000000,
-          0.0000000000000000 },
-  { 1.8922997283093959, 5.0000000000000000, 8.0000000000000000,
-          1.0000000000000000 },
-  { 3.6699742831126270, 5.0000000000000000, 8.0000000000000000,
-          2.0000000000000000 },
-  { 7.2831842359960941, 5.0000000000000000, 8.0000000000000000,
-          3.0000000000000000 },
-  { 14.764676530664770, 5.0000000000000000, 8.0000000000000000,
-          4.0000000000000000 },
-  { 30.522558591756702, 5.0000000000000000, 8.0000000000000000,
-          5.0000000000000000 },
-  { 64.236147093730224, 5.0000000000000000, 8.0000000000000000,
-          6.0000000000000000 },
-  { 137.40503032883328, 5.0000000000000000, 8.0000000000000000,
-          7.0000000000000000 },
-  { 298.29153884828759, 5.0000000000000000, 8.0000000000000000,
-          8.0000000000000000 },
-  { 656.29389355002741, 5.0000000000000000, 8.0000000000000000,
-          9.0000000000000000 },
-  { 1461.6183101433730, 5.0000000000000000, 8.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=5.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test048()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data048)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data048[i].a), Tp(data048[i].c),
-                   Tp(data048[i].x));
-      const Tp f0 = data048[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-}
+// max(|f - f_GSL|): 6.2527760746888816e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.7668660800670828e-14
+// mean(f - f_GSL): -1.0866266550578816e-14
+// variance(f - f_GSL): 1.1381792138997471e-26
+// stddev(f - f_GSL): 1.0668548232537298e-13
+const testcase_conf_hyperg<double>
+data048[21] =
+{
+  { 0.0075295293831406113, 5.0000000000000000, 8.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.010936052508673187, 5.0000000000000000, 8.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.016247454253649721, 5.0000000000000000, 8.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.024729468107576008, 5.0000000000000000, 8.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.038615775445860964, 5.0000000000000000, 8.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.061937865588523586, 5.0000000000000000, 8.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.10213565389690644, 5.0000000000000000, 8.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.17324118243379236, 5.0000000000000000, 8.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.30228316551605494, 5.0000000000000000, 8.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.54238748802203829, 5.0000000000000000, 8.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 8.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.8922997283093959, 5.0000000000000000, 8.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 3.6699742831126270, 5.0000000000000000, 8.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 7.2831842359960941, 5.0000000000000000, 8.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 14.764676530664770, 5.0000000000000000, 8.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 30.522558591756702, 5.0000000000000000, 8.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 64.236147093730224, 5.0000000000000000, 8.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 137.40503032883331, 5.0000000000000000, 8.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 298.29153884828770, 5.0000000000000000, 8.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 656.29389355002752, 5.0000000000000000, 8.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 1461.6183101433730, 5.0000000000000000, 8.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler048 = 2.5000000000000015e-12;
 
 // Test data for a=5.0000000000000000, c=9.0000000000000000.
-testcase_conf_hyperg<double> data049[] = {
-  { 0.012801285049305222, 5.0000000000000000, 9.0000000000000000,
-          -10.000000000000000 },
-  { 0.017955923031350202, 5.0000000000000000, 9.0000000000000000,
-          -9.0000000000000000 },
-  { 0.025661650371090718, 5.0000000000000000, 9.0000000000000000,
-          -8.0000000000000000 },
-  { 0.037414616710204310, 5.0000000000000000, 9.0000000000000000,
-          -7.0000000000000000 },
-  { 0.055720934057414885, 5.0000000000000000, 9.0000000000000000,
-          -6.0000000000000000 },
-  { 0.084862956151755986, 5.0000000000000000, 9.0000000000000000,
-          -5.0000000000000000 },
-  { 0.13230635170162319, 5.0000000000000000, 9.0000000000000000,
-          -4.0000000000000000 },
-  { 0.21132914572142125, 5.0000000000000000, 9.0000000000000000,
-          -3.0000000000000000 },
-  { 0.34601808641639625, 5.0000000000000000, 9.0000000000000000,
-          -2.0000000000000000 },
-  { 0.58092180965710882, 5.0000000000000000, 9.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 9.0000000000000000,
-          0.0000000000000000 },
-  { 1.7643922061378634, 5.0000000000000000, 9.0000000000000000,
-          1.0000000000000000 },
-  { 3.1888010096332451, 5.0000000000000000, 9.0000000000000000,
-          2.0000000000000000 },
-  { 5.8981194929479273, 5.0000000000000000, 9.0000000000000000,
-          3.0000000000000000 },
-  { 11.152835510393174, 5.0000000000000000, 9.0000000000000000,
-          4.0000000000000000 },
-  { 21.533483453443495, 5.0000000000000000, 9.0000000000000000,
-          5.0000000000000000 },
-  { 42.397145995355721, 5.0000000000000000, 9.0000000000000000,
-          6.0000000000000000 },
-  { 85.010891404859976, 5.0000000000000000, 9.0000000000000000,
-          7.0000000000000000 },
-  { 173.36225868739959, 5.0000000000000000, 9.0000000000000000,
-          8.0000000000000000 },
-  { 359.10444177844266, 5.0000000000000000, 9.0000000000000000,
-          9.0000000000000000 },
-  { 754.64844371961385, 5.0000000000000000, 9.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=5.0000000000000000, c=9.0000000000000000.
-template <typename Tp>
-void test049()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data049)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data049[i].a), Tp(data049[i].c),
-                   Tp(data049[i].x));
-      const Tp f0 = data049[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+// max(|f - f_GSL|): 1.4779288903810084e-12 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.3332193464342236e-14
+// mean(f - f_GSL): 1.0197547171765718e-13
+// variance(f - f_GSL): 9.9395510042396581e-26
+// stddev(f - f_GSL): 3.1527053468790352e-13
+const testcase_conf_hyperg<double>
+data049[21] =
+{
+  { 0.012801285049305222, 5.0000000000000000, 9.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.017955923031350202, 5.0000000000000000, 9.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.025661650371090718, 5.0000000000000000, 9.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.037414616710204310, 5.0000000000000000, 9.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.055720934057414885, 5.0000000000000000, 9.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.084862956151756000, 5.0000000000000000, 9.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.13230635170162319, 5.0000000000000000, 9.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.21132914572142125, 5.0000000000000000, 9.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.34601808641639625, 5.0000000000000000, 9.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.58092180965710882, 5.0000000000000000, 9.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 9.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.7643922061378634, 5.0000000000000000, 9.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 3.1888010096332451, 5.0000000000000000, 9.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 5.8981194929479273, 5.0000000000000000, 9.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 11.152835510393174, 5.0000000000000000, 9.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 21.533483453443495, 5.0000000000000000, 9.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 42.397145995355721, 5.0000000000000000, 9.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 85.010891404859976, 5.0000000000000000, 9.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 173.36225868739959, 5.0000000000000000, 9.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 359.10444177844266, 5.0000000000000000, 9.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 754.64844371961408, 5.0000000000000000, 9.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler049 = 1.0000000000000008e-12;
 
 // Test data for a=5.0000000000000000, c=10.000000000000000.
-testcase_conf_hyperg<double> data050[] = {
-  { 0.019313731161840469, 5.0000000000000000, 10.000000000000000,
-          -10.000000000000000 },
-  { 0.026361085775183927, 5.0000000000000000, 10.000000000000000,
-          -9.0000000000000000 },
-  { 0.036556772070711910, 5.0000000000000000, 10.000000000000000,
-          -8.0000000000000000 },
-  { 0.051563934048344140, 5.0000000000000000, 10.000000000000000,
-          -7.0000000000000000 },
-  { 0.074056625794521824, 5.0000000000000000, 10.000000000000000,
-          -6.0000000000000000 },
-  { 0.10841132531381445, 5.0000000000000000, 10.000000000000000,
-          -5.0000000000000000 },
-  { 0.16192115120742598, 5.0000000000000000, 10.000000000000000,
-          -4.0000000000000000 },
-  { 0.24696279814742436, 5.0000000000000000, 10.000000000000000,
-          -3.0000000000000000 },
-  { 0.38492640633381947, 5.0000000000000000, 10.000000000000000,
-          -2.0000000000000000 },
-  { 0.61345628229723270, 5.0000000000000000, 10.000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
-          0.0000000000000000 },
-  { 1.6675470647226096, 5.0000000000000000, 10.000000000000000,
-          1.0000000000000000 },
-  { 2.8442428103603667, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000 },
-  { 4.9603804008438397, 5.0000000000000000, 10.000000000000000,
-          3.0000000000000000 },
-  { 8.8405953071624790, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000 },
-  { 16.089667272320334, 5.0000000000000000, 10.000000000000000,
-          5.0000000000000000 },
-  { 29.876575194426895, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000 },
-  { 56.546719856432318, 5.0000000000000000, 10.000000000000000,
-          7.0000000000000000 },
-  { 108.97420168465270, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000 },
-  { 213.60609045832913, 5.0000000000000000, 10.000000000000000,
-          9.0000000000000000 },
-  { 425.41323880637168, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=5.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test050()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data050)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data050[i].a), Tp(data050[i].c),
-                   Tp(data050[i].x));
-      const Tp f0 = data050[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+// max(|f - f_GSL|): 5.1159076974727213e-13 at index 20
+// max(|f - f_GSL| / |f_GSL|): 7.6335218104993094e-15
+// mean(f - f_GSL): -5.4482542815883388e-14
+// variance(f - f_GSL): 1.0969766384238795e-26
+// stddev(f - f_GSL): 1.0473665253500703e-13
+const testcase_conf_hyperg<double>
+data050[21] =
+{
+  { 0.019313731161840469, 5.0000000000000000, 10.000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.026361085775183930, 5.0000000000000000, 10.000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.036556772070711917, 5.0000000000000000, 10.000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.051563934048344140, 5.0000000000000000, 10.000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.074056625794521838, 5.0000000000000000, 10.000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.10841132531381448, 5.0000000000000000, 10.000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.16192115120742598, 5.0000000000000000, 10.000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.24696279814742444, 5.0000000000000000, 10.000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.38492640633381947, 5.0000000000000000, 10.000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.61345628229723270, 5.0000000000000000, 10.000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 10.000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1.6675470647226096, 5.0000000000000000, 10.000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 2.8442428103603667, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 4.9603804008438415, 5.0000000000000000, 10.000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 8.8405953071624790, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 16.089667272320337, 5.0000000000000000, 10.000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 29.876575194426895, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 56.546719856432318, 5.0000000000000000, 10.000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 108.97420168465273, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 213.60609045832919, 5.0000000000000000, 10.000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 425.41323880637168, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler050 = 5.0000000000000039e-13;
 
 // Test data for a=10.000000000000000, c=1.0000000000000000.
-testcase_conf_hyperg<double> data051[] = {
-  { 0.00067155063653961283, 10.000000000000000, 1.0000000000000000,
-          -10.000000000000000 },
-  { -0.00071555648905258641, 10.000000000000000, 1.0000000000000000,
-          -9.0000000000000000 },
-  { -0.0035372078786207375, 10.000000000000000, 1.0000000000000000,
-          -8.0000000000000000 },
-  { -0.0047884005574714370, 10.000000000000000, 1.0000000000000000,
-          -7.0000000000000000 },
-  { 0.0024787521766663585, 10.000000000000000, 1.0000000000000000,
-          -6.0000000000000000 },
-  { 0.018136827242522878, 10.000000000000000, 1.0000000000000000,
-          -5.0000000000000000 },
-  { 0.0099686175680129968, 10.000000000000000, 1.0000000000000000,
-          -4.0000000000000000 },
-  { -0.052832081031434205, 10.000000000000000, 1.0000000000000000,
-          -3.0000000000000000 },
-  { 0.0010979582061524211, 10.000000000000000, 1.0000000000000000,
-          -2.0000000000000000 },
-  { 0.11394854824644544, 10.000000000000000, 1.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
-          0.0000000000000000 },
-  { 131.63017574352625, 10.000000000000000, 1.0000000000000000,
-          1.0000000000000000 },
-  { 2431.2913698755492, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000 },
-  { 27127.328899791049, 10.000000000000000, 1.0000000000000000,
-          3.0000000000000000 },
-  { 232066.49977835573, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000 },
-  { 1674401.3794931532, 10.000000000000000, 1.0000000000000000,
-          5.0000000000000000 },
-  { 10707495.820386337, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000 },
-  { 62515499.242815509, 10.000000000000000, 1.0000000000000000,
-          7.0000000000000000 },
-  { 339773485.00937450, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000 },
-  { 1742442474.2135217, 10.000000000000000, 1.0000000000000000,
-          9.0000000000000000 },
-  { 8514625476.5462780, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=10.000000000000000, c=1.0000000000000000.
-template <typename Tp>
-void test051()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data051)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data051[i].a), Tp(data051[i].c),
-                   Tp(data051[i].x));
-      const Tp f0 = data051[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
-}
+// max(|f - f_GSL|): 4.7683715820312500e-06 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.8747416388037654e-14
+// mean(f - f_GSL): 2.1263162844129998e-07
+// variance(f - f_GSL): 1.0896252425486273e-12
+// stddev(f - f_GSL): 1.0438511591930276e-06
+const testcase_conf_hyperg<double>
+data051[21] =
+{
+  { 0.00067155063653961272, 10.000000000000000, 1.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -0.00071555648905258684, 10.000000000000000, 1.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { -0.0035372078786207375, 10.000000000000000, 1.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { -0.0047884005574714370, 10.000000000000000, 1.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.0024787521766663585, 10.000000000000000, 1.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.018136827242522881, 10.000000000000000, 1.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.0099686175680129968, 10.000000000000000, 1.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { -0.052832081031434205, 10.000000000000000, 1.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.0010979582061523968, 10.000000000000000, 1.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.11394854824644536, 10.000000000000000, 1.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 1.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 131.63017574352625, 10.000000000000000, 1.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 2431.2913698755478, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 27127.328899791049, 10.000000000000000, 1.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 232066.49977835570, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1674401.3794931530, 10.000000000000000, 1.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 10707495.820386341, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 62515499.242815509, 10.000000000000000, 1.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 339773485.00937450, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 1742442474.2135217, 10.000000000000000, 1.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 8514625476.5462780, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler051 = 2.5000000000000015e-12;
 
 // Test data for a=10.000000000000000, c=2.0000000000000000.
-testcase_conf_hyperg<double> data052[] = {
-  { -0.00014116415550486912, 10.000000000000000, 2.0000000000000000,
-          -10.000000000000000 },
-  { -0.00016988130843806985, 10.000000000000000, 2.0000000000000000,
-          -9.0000000000000000 },
-  { 6.6619209703391391e-05, 10.000000000000000, 2.0000000000000000,
-          -8.0000000000000000 },
-  { 0.00072582919646365740, 10.000000000000000, 2.0000000000000000,
-          -7.0000000000000000 },
-  { 0.0012039653429522313, 10.000000000000000, 2.0000000000000000,
-          -6.0000000000000000 },
-  { -0.00061450715370021350, 10.000000000000000, 2.0000000000000000,
-          -5.0000000000000000 },
-  { -0.0053557899960354968, 10.000000000000000, 2.0000000000000000,
-          -4.0000000000000000 },
-  { -0.00078903612815141419, 10.000000000000000, 2.0000000000000000,
-          -3.0000000000000000 },
-  { 0.023725444715554326, 10.000000000000000, 2.0000000000000000,
-          -2.0000000000000000 },
-  { -0.057297669024384767, 10.000000000000000, 2.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
-          0.0000000000000000 },
-  { 34.432116659636534, 10.000000000000000, 2.0000000000000000,
-          1.0000000000000000 },
-  { 432.53475371634494, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000 },
-  { 3789.1768909683515, 10.000000000000000, 2.0000000000000000,
-          3.0000000000000000 },
-  { 27089.676185774806, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000 },
-  { 169243.72183073507, 10.000000000000000, 2.0000000000000000,
-          5.0000000000000000 },
-  { 959019.40135397331, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000 },
-  { 5043073.3458297960, 10.000000000000000, 2.0000000000000000,
-          7.0000000000000000 },
-  { 24989309.819281481, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000 },
-  { 117948708.50540228, 10.000000000000000, 2.0000000000000000,
-          9.0000000000000000 },
-  { 534524325.69810420, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=10.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test052()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data052)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data052[i].a), Tp(data052[i].c),
-                   Tp(data052[i].x));
-      const Tp f0 = data052[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000017e-10));
-}
+// max(|f - f_GSL|): 1.7881393432617188e-07 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.0525079910466156e-12
+// mean(f - f_GSL): 8.5256729623701921e-09
+// variance(f - f_GSL): 1.5223998278110878e-15
+// stddev(f - f_GSL): 3.9017942383102262e-08
+const testcase_conf_hyperg<double>
+data052[21] =
+{
+  { -0.00014116415550486912, 10.000000000000000, 2.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -0.00016988130843806985, 10.000000000000000, 2.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 6.6619209703391378e-05, 10.000000000000000, 2.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.00072582919646365740, 10.000000000000000, 2.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.0012039653429522313, 10.000000000000000, 2.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { -0.00061450715370021329, 10.000000000000000, 2.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { -0.0053557899960354968, 10.000000000000000, 2.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { -0.00078903612815141473, 10.000000000000000, 2.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.023725444715554326, 10.000000000000000, 2.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { -0.057297669024384761, 10.000000000000000, 2.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 2.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 34.432116659636570, 10.000000000000000, 2.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 432.53475371634494, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 3789.1768909683506, 10.000000000000000, 2.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 27089.676185774806, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 169243.72183073507, 10.000000000000000, 2.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 959019.40135397331, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 5043073.3458297960, 10.000000000000000, 2.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 24989309.819281481, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 117948708.50540228, 10.000000000000000, 2.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 534524325.69810420, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler052 = 2.5000000000000017e-10;
 
 // Test data for a=10.000000000000000, c=3.0000000000000000.
-testcase_conf_hyperg<double> data053[] = {
-  { 1.4973169075105230e-05, 10.000000000000000, 3.0000000000000000,
-          -10.000000000000000 },
-  { 5.7627971015476259e-05, 10.000000000000000, 3.0000000000000000,
-          -9.0000000000000000 },
-  { 9.5964794084281178e-05, 10.000000000000000, 3.0000000000000000,
-          -8.0000000000000000 },
-  { 1.5479477810339013e-05, 10.000000000000000, 3.0000000000000000,
-          -7.0000000000000000 },
-  { -0.00035410745380947978, 10.000000000000000, 3.0000000000000000,
-          -6.0000000000000000 },
-  { -0.00078393993138610115, 10.000000000000000, 3.0000000000000000,
-          -5.0000000000000000 },
-  { 0.00038117202625584341, 10.000000000000000, 3.0000000000000000,
-          -4.0000000000000000 },
-  { 0.0045341794406447526, 10.000000000000000, 3.0000000000000000,
-          -3.0000000000000000 },
-  { -0.0031029253652133434, 10.000000000000000, 3.0000000000000000,
-          -2.0000000000000000 },
-  { -0.028487137061611361, 10.000000000000000, 3.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 3.0000000000000000,
-          0.0000000000000000 },
-  { 15.691485606063281, 10.000000000000000, 3.0000000000000000,
-          1.0000000000000000 },
-  { 141.71088859081422, 10.000000000000000, 3.0000000000000000,
-          2.0000000000000000 },
-  { 997.55177799313742, 10.000000000000000, 3.0000000000000000,
-          3.0000000000000000 },
-  { 6038.6324280926056, 10.000000000000000, 3.0000000000000000,
-          4.0000000000000000 },
-  { 32946.952425437157, 10.000000000000000, 3.0000000000000000,
-          5.0000000000000000 },
-  { 166431.66712118863, 10.000000000000000, 3.0000000000000000,
-          6.0000000000000000 },
-  { 791818.30272061308, 10.000000000000000, 3.0000000000000000,
-          7.0000000000000000 },
-  { 3589678.0198700386, 10.000000000000000, 3.0000000000000000,
-          8.0000000000000000 },
-  { 15637649.698874988, 10.000000000000000, 3.0000000000000000,
-          9.0000000000000000 },
-  { 65871447.346678361, 10.000000000000000, 3.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=10.000000000000000, c=3.0000000000000000.
-template <typename Tp>
-void test053()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data053)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data053[i].a), Tp(data053[i].c),
-                   Tp(data053[i].x));
-      const Tp f0 = data053[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
-}
+// max(|f - f_GSL|): 4.4703483581542969e-08 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.1351688299459524e-11
+// mean(f - f_GSL): -2.1241869003958644e-09
+// variance(f - f_GSL): 9.5182316557710101e-17
+// stddev(f - f_GSL): 9.7561425039669288e-09
+const testcase_conf_hyperg<double>
+data053[21] =
+{
+  { 1.4973169075105230e-05, 10.000000000000000, 3.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 5.7627971015476266e-05, 10.000000000000000, 3.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 9.5964794084281178e-05, 10.000000000000000, 3.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 1.5479477810339013e-05, 10.000000000000000, 3.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { -0.00035410745380947978, 10.000000000000000, 3.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { -0.00078393993138610137, 10.000000000000000, 3.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.00038117202625584330, 10.000000000000000, 3.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.0045341794406447526, 10.000000000000000, 3.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { -0.0031029253652133403, 10.000000000000000, 3.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { -0.028487137061611340, 10.000000000000000, 3.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 3.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 15.691485606063274, 10.000000000000000, 3.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 141.71088859081416, 10.000000000000000, 3.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 997.55177799313731, 10.000000000000000, 3.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 6038.6324280926056, 10.000000000000000, 3.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 32946.952425437150, 10.000000000000000, 3.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 166431.66712118863, 10.000000000000000, 3.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 791818.30272061308, 10.000000000000000, 3.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 3589678.0198700386, 10.000000000000000, 3.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 15637649.698874988, 10.000000000000000, 3.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 65871447.346678361, 10.000000000000000, 3.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler053 = 2.5000000000000013e-09;
 
 // Test data for a=10.000000000000000, c=4.0000000000000000.
-testcase_conf_hyperg<double> data054[] = {
-  { 6.9661267889527031e-06, 10.000000000000000, 4.0000000000000000,
-          -10.000000000000000 },
-  { -3.0301514396282926e-06, 10.000000000000000, 4.0000000000000000,
-          -9.0000000000000000 },
-  { -3.7983599138168025e-05, 10.000000000000000, 4.0000000000000000,
-          -8.0000000000000000 },
-  { -9.3615660121163871e-05, 10.000000000000000, 4.0000000000000000,
-          -7.0000000000000000 },
-  { -7.0821490761895943e-05, 10.000000000000000, 4.0000000000000000,
-          -6.0000000000000000 },
-  { 0.00030692863727646260, 10.000000000000000, 4.0000000000000000,
-          -5.0000000000000000 },
-  { 0.0010659895649527829, 10.000000000000000, 4.0000000000000000,
-          -4.0000000000000000 },
-  { -0.00042230102633456065, 10.000000000000000, 4.0000000000000000,
-          -3.0000000000000000 },
-  { -0.010168047735237568, 10.000000000000000, 4.0000000000000000,
-          -2.0000000000000000 },
-  { 0.036903514708782073, 10.000000000000000, 4.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 4.0000000000000000,
-          0.0000000000000000 },
-  { 9.3384756433214022, 10.000000000000000, 4.0000000000000000,
-          1.0000000000000000 },
-  { 63.905561372021388, 10.000000000000000, 4.0000000000000000,
-          2.0000000000000000 },
-  { 370.08498456728779, 10.000000000000000, 4.0000000000000000,
-          3.0000000000000000 },
-  { 1922.9526217493540, 10.000000000000000, 4.0000000000000000,
-          4.0000000000000000 },
-  { 9245.0380014351485, 10.000000000000000, 4.0000000000000000,
-          5.0000000000000000 },
-  { 41898.961838459785, 10.000000000000000, 4.0000000000000000,
-          6.0000000000000000 },
-  { 181211.14084739226, 10.000000000000000, 4.0000000000000000,
-          7.0000000000000000 },
-  { 754384.25570692297, 10.000000000000000, 4.0000000000000000,
-          8.0000000000000000 },
-  { 3042060.4915799876, 10.000000000000000, 4.0000000000000000,
-          9.0000000000000000 },
-  { 11939626.424402930, 10.000000000000000, 4.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=10.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test054()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data054)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data054[i].a), Tp(data054[i].c),
-                   Tp(data054[i].x));
-      const Tp f0 = data054[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000026e-09));
-}
+// max(|f - f_GSL|): 3.7252902984619141e-09 at index 20
+// max(|f - f_GSL| / |f_GSL|): 7.5580354912480585e-11
+// mean(f - f_GSL): -3.0836124902575546e-10
+// variance(f - f_GSL): 6.1295871676623622e-19
+// stddev(f - f_GSL): 7.8291680066673511e-10
+const testcase_conf_hyperg<double>
+data054[21] =
+{
+  { 6.9661267889527014e-06, 10.000000000000000, 4.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -3.0301514396282942e-06, 10.000000000000000, 4.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { -3.7983599138168025e-05, 10.000000000000000, 4.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { -9.3615660121163871e-05, 10.000000000000000, 4.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { -7.0821490761895943e-05, 10.000000000000000, 4.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.00030692863727646260, 10.000000000000000, 4.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.0010659895649527829, 10.000000000000000, 4.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { -0.00042230102633456049, 10.000000000000000, 4.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { -0.010168047735237568, 10.000000000000000, 4.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.036903514708782073, 10.000000000000000, 4.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 4.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 9.3384756433213987, 10.000000000000000, 4.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 63.905561372021388, 10.000000000000000, 4.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 370.08498456728779, 10.000000000000000, 4.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1922.9526217493540, 10.000000000000000, 4.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 9245.0380014351485, 10.000000000000000, 4.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 41898.961838459785, 10.000000000000000, 4.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 181211.14084739226, 10.000000000000000, 4.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 754384.25570692308, 10.000000000000000, 4.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 3042060.4915799876, 10.000000000000000, 4.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 11939626.424402930, 10.000000000000000, 4.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler054 = 5.0000000000000026e-09;
 
 // Test data for a=10.000000000000000, c=5.0000000000000000.
-testcase_conf_hyperg<double> data055[] = {
-  { -6.2454929831989742e-06, 10.000000000000000, 5.0000000000000000,
-          -10.000000000000000 },
-  { -1.1459481808048817e-05, 10.000000000000000, 5.0000000000000000,
-          -9.0000000000000000 },
-  { -8.1646988801669512e-06, 10.000000000000000, 5.0000000000000000,
-          -8.0000000000000000 },
-  { 3.1240400671775088e-05, 10.000000000000000, 5.0000000000000000,
-          -7.0000000000000000 },
-  { 0.00014164298152379191, 10.000000000000000, 5.0000000000000000,
-          -6.0000000000000000 },
-  { 0.00023172833594738379, 10.000000000000000, 5.0000000000000000,
-          -5.0000000000000000 },
-  { -0.00036825094062005220, 10.000000000000000, 5.0000000000000000,
-          -4.0000000000000000 },
-  { -0.0030227862937631683, 10.000000000000000, 5.0000000000000000,
-          -3.0000000000000000 },
-  { -0.00028642387986584615, 10.000000000000000, 5.0000000000000000,
-          -2.0000000000000000 },
-  { 0.10617896040159881, 10.000000000000000, 5.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
-          0.0000000000000000 },
-  { 6.4803694966028260, 10.000000000000000, 5.0000000000000000,
-          1.0000000000000000 },
-  { 35.201619637445276, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000 },
-  { 171.58787257237464, 10.000000000000000, 5.0000000000000000,
-          3.0000000000000000 },
-  { 775.87148867205678, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000 },
-  { 3317.4071019773678, 10.000000000000000, 5.0000000000000000,
-          5.0000000000000000 },
-  { 13578.260535269774, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000 },
-  { 53651.761875039716, 10.000000000000000, 5.0000000000000000,
-          7.0000000000000000 },
-  { 205900.60390283042, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000 },
-  { 770979.49612334219, 10.000000000000000, 5.0000000000000000,
-          9.0000000000000000 },
-  { 2826613.2348531331, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=10.000000000000000, c=5.0000000000000000.
-template <typename Tp>
-void test055()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data055)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data055[i].a), Tp(data055[i].c),
-                   Tp(data055[i].x));
-      const Tp f0 = data055[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
-}
+// max(|f - f_GSL|): 1.1641532182693481e-10 at index 19
+// max(|f - f_GSL| / |f_GSL|): 4.6733947661248822e-11
+// mean(f - f_GSL): -5.7681855797857804e-12
+// variance(f - f_GSL): 1.7467781563495526e-24
+// stddev(f - f_GSL): 1.3216573520960538e-12
+const testcase_conf_hyperg<double>
+data055[21] =
+{
+  { -6.2454929831989734e-06, 10.000000000000000, 5.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -1.1459481808048817e-05, 10.000000000000000, 5.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { -8.1646988801669512e-06, 10.000000000000000, 5.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 3.1240400671775088e-05, 10.000000000000000, 5.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.00014164298152379191, 10.000000000000000, 5.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.00023172833594738382, 10.000000000000000, 5.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { -0.00036825094062005215, 10.000000000000000, 5.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { -0.0030227862937631683, 10.000000000000000, 5.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { -0.00028642387986584918, 10.000000000000000, 5.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.10617896040159878, 10.000000000000000, 5.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 5.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 6.4803694966028269, 10.000000000000000, 5.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 35.201619637445276, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 171.58787257237464, 10.000000000000000, 5.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 775.87148867205678, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 3317.4071019773678, 10.000000000000000, 5.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 13578.260535269774, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 53651.761875039716, 10.000000000000000, 5.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 205900.60390283042, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 770979.49612334219, 10.000000000000000, 5.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 2826613.2348531331, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler055 = 2.5000000000000013e-09;
 
 // Test data for a=10.000000000000000, c=6.0000000000000000.
-testcase_conf_hyperg<double> data056[] = {
-  { 9.6084507433830306e-07, 10.000000000000000, 6.0000000000000000,
-          -10.000000000000000 },
-  { 7.7131127554174726e-06, 10.000000000000000, 6.0000000000000000,
-          -9.0000000000000000 },
-  { 2.3074149009167486e-05, 10.000000000000000, 6.0000000000000000,
-          -8.0000000000000000 },
-  { 4.0105919781332888e-05, 10.000000000000000, 6.0000000000000000,
-          -7.0000000000000000 },
-  { -7.7443012320393170e-21, 10.000000000000000, 6.0000000000000000,
-          -6.0000000000000000 },
-  { -0.00029188857701064686, 10.000000000000000, 6.0000000000000000,
-          -5.0000000000000000 },
-  { -0.0010659895649527829, 10.000000000000000, 6.0000000000000000,
-          -4.0000000000000000 },
-  { -0.00044452739614164190, 10.000000000000000, 6.0000000000000000,
-          -3.0000000000000000 },
-  { 0.020049671590609292, 10.000000000000000, 6.0000000000000000,
-          -2.0000000000000000 },
-  { 0.17092282236966813, 10.000000000000000, 6.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 6.0000000000000000,
-          0.0000000000000000 },
-  { 4.9520550902714540, 10.000000000000000, 6.0000000000000000,
-          1.0000000000000000 },
-  { 22.206263831706924, 10.000000000000000, 6.0000000000000000,
-          2.0000000000000000 },
-  { 93.074943420842843, 10.000000000000000, 6.0000000000000000,
-          3.0000000000000000 },
-  { 371.20964440523989, 10.000000000000000, 6.0000000000000000,
-          4.0000000000000000 },
-  { 1424.6976175888544, 10.000000000000000, 6.0000000000000000,
-          5.0000000000000000 },
-  { 5302.2070001902330, 10.000000000000000, 6.0000000000000000,
-          6.0000000000000000 },
-  { 19239.311823447424, 10.000000000000000, 6.0000000000000000,
-          7.0000000000000000 },
-  { 68341.221999215923, 10.000000000000000, 6.0000000000000000,
-          8.0000000000000000 },
-  { 238389.83519072225, 10.000000000000000, 6.0000000000000000,
-          9.0000000000000000 },
-  { 818592.04096678516, 10.000000000000000, 6.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=10.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test056()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data056)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data056[i].a), Tp(data056[i].c),
-                   Tp(data056[i].x));
-      const Tp f0 = data056[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000012e-08));
-}
+// max(|f - f_GSL|): 2.3283064365386963e-10 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.5542822249778647e-10
+// mean(f - f_GSL): -1.6360259531513281e-11
+// variance(f - f_GSL): 2.4601199281092265e-21
+// stddev(f - f_GSL): 4.9599596047843236e-11
+const testcase_conf_hyperg<double>
+data056[21] =
+{
+  { 9.6084507433830306e-07, 10.000000000000000, 6.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 7.7131127554174726e-06, 10.000000000000000, 6.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 2.3074149009167486e-05, 10.000000000000000, 6.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 4.0105919781332888e-05, 10.000000000000000, 6.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { -1.0325734976052423e-20, 10.000000000000000, 6.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { -0.00029188857701064686, 10.000000000000000, 6.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { -0.0010659895649527829, 10.000000000000000, 6.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { -0.00044452739614164207, 10.000000000000000, 6.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.020049671590609285, 10.000000000000000, 6.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.17092282236966808, 10.000000000000000, 6.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 6.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 4.9520550902714575, 10.000000000000000, 6.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 22.206263831706924, 10.000000000000000, 6.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 93.074943420842843, 10.000000000000000, 6.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 371.20964440523989, 10.000000000000000, 6.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1424.6976175888547, 10.000000000000000, 6.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 5302.2070001902330, 10.000000000000000, 6.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 19239.311823447424, 10.000000000000000, 6.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 68341.221999215923, 10.000000000000000, 6.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 238389.83519072225, 10.000000000000000, 6.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 818592.04096678528, 10.000000000000000, 6.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler056 = 2.5000000000000012e-08;
 
 // Test data for a=10.000000000000000, c=7.0000000000000000.
-testcase_conf_hyperg<double> data057[] = {
-  { 3.9634859316455036e-06, 10.000000000000000, 7.0000000000000000,
-          -10.000000000000000 },
-  { 4.4074930030956985e-06, 10.000000000000000, 7.0000000000000000,
-          -9.0000000000000000 },
-  { -5.3248036175001926e-06, 10.000000000000000, 7.0000000000000000,
-          -8.0000000000000000 },
-  { -5.0660109197473119e-05, 10.000000000000000, 7.0000000000000000,
-          -7.0000000000000000 },
-  { -0.00017705372690473989, 10.000000000000000, 7.0000000000000000,
-          -6.0000000000000000 },
-  { -0.00034759250392107569, 10.000000000000000, 7.0000000000000000,
-          -5.0000000000000000 },
-  { 0.00029072442680530428, 10.000000000000000, 7.0000000000000000,
-          -4.0000000000000000 },
-  { 0.0071124383382662791, 10.000000000000000, 7.0000000000000000,
-          -3.0000000000000000 },
-  { 0.046185850628367831, 10.000000000000000, 7.0000000000000000,
-          -2.0000000000000000 },
-  { 0.22919473120601763, 10.000000000000000, 7.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 7.0000000000000000,
-          0.0000000000000000 },
-  { 4.0342754120781059, 10.000000000000000, 7.0000000000000000,
-          1.0000000000000000 },
-  { 15.423188523958421, 10.000000000000000, 7.0000000000000000,
-          2.0000000000000000 },
-  { 56.669907747565212, 10.000000000000000, 7.0000000000000000,
-          3.0000000000000000 },
-  { 201.92649139242229, 10.000000000000000, 7.0000000000000000,
-          4.0000000000000000 },
-  { 702.01780019948944, 10.000000000000000, 7.0000000000000000,
-          5.0000000000000000 },
-  { 2391.7564185640722, 10.000000000000000, 7.0000000000000000,
-          6.0000000000000000 },
-  { 8011.5144629634615, 10.000000000000000, 7.0000000000000000,
-          7.0000000000000000 },
-  { 26450.087535814702, 10.000000000000000, 7.0000000000000000,
-          8.0000000000000000 },
-  { 86239.964657766584, 10.000000000000000, 7.0000000000000000,
-          9.0000000000000000 },
-  { 278127.83396458323, 10.000000000000000, 7.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=10.000000000000000, c=7.0000000000000000.
-template <typename Tp>
-void test057()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data057)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data057[i].a), Tp(data057[i].c),
-                   Tp(data057[i].x));
-      const Tp f0 = data057[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000004e-06));
-}
+// max(|f - f_GSL|): 2.3283064365386963e-10 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.7003920331697668e-08
+// mean(f - f_GSL): -1.3064360298085007e-11
+// variance(f - f_GSL): 2.5356040132507882e-21
+// stddev(f - f_GSL): 5.0354781433849840e-11
+const testcase_conf_hyperg<double>
+data057[21] =
+{
+  { 3.9634859316455028e-06, 10.000000000000000, 7.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 4.4074930030956985e-06, 10.000000000000000, 7.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { -5.3248036175001926e-06, 10.000000000000000, 7.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { -5.0660109197473119e-05, 10.000000000000000, 7.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { -0.00017705372690473989, 10.000000000000000, 7.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { -0.00034759250392107574, 10.000000000000000, 7.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.00029072442680530428, 10.000000000000000, 7.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.0071124383382662791, 10.000000000000000, 7.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.046185850628367824, 10.000000000000000, 7.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.22919473120601758, 10.000000000000000, 7.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 7.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 4.0342754120781059, 10.000000000000000, 7.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 15.423188523958418, 10.000000000000000, 7.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 56.669907747565212, 10.000000000000000, 7.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 201.92649139242229, 10.000000000000000, 7.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 702.01780019948944, 10.000000000000000, 7.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 2391.7564185640726, 10.000000000000000, 7.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 8011.5144629634615, 10.000000000000000, 7.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 26450.087535814702, 10.000000000000000, 7.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 86239.964657766584, 10.000000000000000, 7.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 278127.83396458329, 10.000000000000000, 7.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler057 = 1.0000000000000004e-06;
 
 // Test data for a=10.000000000000000, c=8.0000000000000000.
-testcase_conf_hyperg<double> data058[] = {
-  { -5.0444366402760924e-06, 10.000000000000000, 8.0000000000000000,
-          -10.000000000000000 },
-  { -1.5426225510834945e-05, 10.000000000000000, 8.0000000000000000,
-          -9.0000000000000000 },
-  { -3.7273625322501334e-05, 10.000000000000000, 8.0000000000000000,
-          -8.0000000000000000 },
-  { -6.3325136496841480e-05, 10.000000000000000, 8.0000000000000000,
-          -7.0000000000000000 },
-  { -2.7519677388747149e-19, 10.000000000000000, 8.0000000000000000,
-          -6.0000000000000000 },
-  { 0.00065507818046664273, 10.000000000000000, 8.0000000000000000,
-          -5.0000000000000000 },
-  { 0.0040701419752742617, 10.000000000000000, 8.0000000000000000,
-          -4.0000000000000000 },
-  { 0.018670150637948978, 10.000000000000000, 8.0000000000000000,
-          -3.0000000000000000 },
-  { 0.075186268464784836, 10.000000000000000, 8.0000000000000000,
-          -2.0000000000000000 },
-  { 0.28101901756151842, 10.000000000000000, 8.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 8.0000000000000000,
-          0.0000000000000000 },
-  { 3.4356061998579595, 10.000000000000000, 8.0000000000000000,
-          1.0000000000000000 },
-  { 11.494087265003234, 10.000000000000000, 8.0000000000000000,
-          2.0000000000000000 },
-  { 37.660381730976880, 10.000000000000000, 8.0000000000000000,
-          3.0000000000000000 },
-  { 121.32922229587608, 10.000000000000000, 8.0000000000000000,
-          4.0000000000000000 },
-  { 385.46195489141422, 10.000000000000000, 8.0000000000000000,
-          5.0000000000000000 },
-  { 1210.2863804782053, 10.000000000000000, 8.0000000000000000,
-          6.0000000000000000 },
-  { 3762.0609740531836, 10.000000000000000, 8.0000000000000000,
-          7.0000000000000000 },
-  { 11592.614394051165, 10.000000000000000, 8.0000000000000000,
-          8.0000000000000000 },
-  { 35450.992183142305, 10.000000000000000, 8.0000000000000000,
-          9.0000000000000000 },
-  { 107684.94388572175, 10.000000000000000, 8.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=10.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test058()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data058)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data058[i].a), Tp(data058[i].c),
-                   Tp(data058[i].x));
-      const Tp f0 = data058[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
-}
+// max(|f - f_GSL|): 2.9103830456733704e-11 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.9656147630620638e-11
+// mean(f - f_GSL): -2.2995627648324885e-12
+// variance(f - f_GSL): 3.7719610241202714e-23
+// stddev(f - f_GSL): 6.1416292822998289e-12
+const testcase_conf_hyperg<double>
+data058[21] =
+{
+  { -5.0444366402760966e-06, 10.000000000000000, 8.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -1.5426225510834945e-05, 10.000000000000000, 8.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { -3.7273625322501334e-05, 10.000000000000000, 8.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { -6.3325136496841588e-05, 10.000000000000000, 8.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.0000000000000000, 10.000000000000000, 8.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.00065507818046664252, 10.000000000000000, 8.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.0040701419752742626, 10.000000000000000, 8.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.018670150637948978, 10.000000000000000, 8.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.075186268464784836, 10.000000000000000, 8.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.28101901756151837, 10.000000000000000, 8.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 8.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 3.4356061998579603, 10.000000000000000, 8.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 11.494087265003234, 10.000000000000000, 8.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 37.660381730976880, 10.000000000000000, 8.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 121.32922229587608, 10.000000000000000, 8.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 385.46195489141422, 10.000000000000000, 8.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 1210.2863804782053, 10.000000000000000, 8.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 3762.0609740531836, 10.000000000000000, 8.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 11592.614394051165, 10.000000000000000, 8.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 35450.992183142305, 10.000000000000000, 8.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 107684.94388572175, 10.000000000000000, 8.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler058 = 2.5000000000000013e-09;
 
 // Test data for a=10.000000000000000, c=9.0000000000000000.
-testcase_conf_hyperg<double> data059[] = {
-  { -5.0444366402760974e-06, 10.000000000000000, 9.0000000000000000,
-          -10.000000000000000 },
-  { 0.0000000000000000, 10.000000000000000, 9.0000000000000000,
-          -9.0000000000000000 },
-  { 3.7273625322501334e-05, 10.000000000000000, 9.0000000000000000,
-          -8.0000000000000000 },
-  { 0.00020264043678989247, 10.000000000000000, 9.0000000000000000,
-          -7.0000000000000000 },
-  { 0.00082625072555545290, 10.000000000000000, 9.0000000000000000,
-          -6.0000000000000000 },
-  { 0.0029946431107046520, 10.000000000000000, 9.0000000000000000,
-          -5.0000000000000000 },
-  { 0.010175354938185655, 10.000000000000000, 9.0000000000000000,
-          -4.0000000000000000 },
-  { 0.033191378911909299, 10.000000000000000, 9.0000000000000000,
-          -3.0000000000000000 },
-  { 0.10526077585069878, 10.000000000000000, 9.0000000000000000,
-          -2.0000000000000000 },
-  { 0.32700394770794872, 10.000000000000000, 9.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 9.0000000000000000,
-          0.0000000000000000 },
-  { 3.0203131427322725, 10.000000000000000, 9.0000000000000000,
-          1.0000000000000000 },
-  { 9.0310685653596838, 10.000000000000000, 9.0000000000000000,
-          2.0000000000000000 },
-  { 26.780715897583555, 10.000000000000000, 9.0000000000000000,
-          3.0000000000000000 },
-  { 78.863994492319449, 10.000000000000000, 9.0000000000000000,
-          4.0000000000000000 },
-  { 230.86491415956360, 10.000000000000000, 9.0000000000000000,
-          5.0000000000000000 },
-  { 672.38132248789179, 10.000000000000000, 9.0000000000000000,
-          6.0000000000000000 },
-  { 1949.5700594283705, 10.000000000000000, 9.0000000000000000,
-          7.0000000000000000 },
-  { 5630.6984199677090, 10.000000000000000, 9.0000000000000000,
-          8.0000000000000000 },
-  { 16206.167855150768, 10.000000000000000, 9.0000000000000000,
-          9.0000000000000000 },
-  { 46500.316677925293, 10.000000000000000, 9.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=10.000000000000000, c=9.0000000000000000.
-template <typename Tp>
-void test059()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data059)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data059[i].a), Tp(data059[i].c),
-                   Tp(data059[i].x));
-      const Tp f0 = data059[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
-}
+// max(|f - f_GSL|): 9.0949470177292824e-12 at index 19
+// max(|f - f_GSL| / |f_GSL|): 3.7408111247866129e-11
+// mean(f - f_GSL): 4.8555562242291194e-13
+// variance(f - f_GSL): 1.2377623779491325e-26
+// stddev(f - f_GSL): 1.1125476969321956e-13
+const testcase_conf_hyperg<double>
+data059[21] =
+{
+  { -5.0444366402760966e-06, 10.000000000000000, 9.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.0000000000000000, 10.000000000000000, 9.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 3.7273625322501334e-05, 10.000000000000000, 9.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.00020264043678989247, 10.000000000000000, 9.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.00082625072555545290, 10.000000000000000, 9.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.0029946431107046520, 10.000000000000000, 9.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.010175354938185657, 10.000000000000000, 9.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.033191378911909299, 10.000000000000000, 9.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.10526077585069878, 10.000000000000000, 9.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.32700394770794866, 10.000000000000000, 9.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 9.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 3.0203131427322729, 10.000000000000000, 9.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 9.0310685653596838, 10.000000000000000, 9.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 26.780715897583555, 10.000000000000000, 9.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 78.863994492319449, 10.000000000000000, 9.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 230.86491415956360, 10.000000000000000, 9.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 672.38132248789179, 10.000000000000000, 9.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1949.5700594283705, 10.000000000000000, 9.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 5630.6984199677090, 10.000000000000000, 9.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 16206.167855150768, 10.000000000000000, 9.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 46500.316677925293, 10.000000000000000, 9.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler059 = 2.5000000000000013e-09;
 
 // Test data for a=10.000000000000000, c=10.000000000000000.
-testcase_conf_hyperg<double> data060[] = {
-  { 4.5399929762484854e-05, 10.000000000000000, 10.000000000000000,
-          -10.000000000000000 },
-  { 0.00012340980408667956, 10.000000000000000, 10.000000000000000,
-          -9.0000000000000000 },
-  { 0.00033546262790251185, 10.000000000000000, 10.000000000000000,
-          -8.0000000000000000 },
-  { 0.00091188196555451624, 10.000000000000000, 10.000000000000000,
-          -7.0000000000000000 },
-  { 0.0024787521766663585, 10.000000000000000, 10.000000000000000,
-          -6.0000000000000000 },
-  { 0.0067379469990854670, 10.000000000000000, 10.000000000000000,
-          -5.0000000000000000 },
-  { 0.018315638888734179, 10.000000000000000, 10.000000000000000,
-          -4.0000000000000000 },
-  { 0.049787068367863944, 10.000000000000000, 10.000000000000000,
-          -3.0000000000000000 },
-  { 0.13533528323661270, 10.000000000000000, 10.000000000000000,
-          -2.0000000000000000 },
-  { 0.36787944117144233, 10.000000000000000, 10.000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
-          0.0000000000000000 },
-  { 2.7182818284590451, 10.000000000000000, 10.000000000000000,
-          1.0000000000000000 },
-  { 7.3890560989306504, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000 },
-  { 20.085536923187668, 10.000000000000000, 10.000000000000000,
-          3.0000000000000000 },
-  { 54.598150033144236, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000 },
-  { 148.41315910257660, 10.000000000000000, 10.000000000000000,
-          5.0000000000000000 },
-  { 403.42879349273511, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000 },
-  { 1096.6331584284585, 10.000000000000000, 10.000000000000000,
-          7.0000000000000000 },
-  { 2980.9579870417283, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000 },
-  { 8103.0839275753842, 10.000000000000000, 10.000000000000000,
-          9.0000000000000000 },
-  { 22026.465794806718, 10.000000000000000, 10.000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=10.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test060()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data060)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data060[i].a), Tp(data060[i].c),
-                   Tp(data060[i].x));
-      const Tp f0 = data060[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_conf_hyperg<double>
+data060[21] =
+{
+  { 4.5399929762484847e-05, 10.000000000000000, 10.000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.00012340980408667956, 10.000000000000000, 10.000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.00033546262790251185, 10.000000000000000, 10.000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 0.00091188196555451624, 10.000000000000000, 10.000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.0024787521766663585, 10.000000000000000, 10.000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.0067379469990854670, 10.000000000000000, 10.000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.018315638888734182, 10.000000000000000, 10.000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.049787068367863944, 10.000000000000000, 10.000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.13533528323661270, 10.000000000000000, 10.000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.36787944117144228, 10.000000000000000, 10.000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 10.000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 2.7182818284590455, 10.000000000000000, 10.000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 7.3890560989306504, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 20.085536923187668, 10.000000000000000, 10.000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 54.598150033144236, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 148.41315910257660, 10.000000000000000, 10.000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 403.42879349273511, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1096.6331584284585, 10.000000000000000, 10.000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 2980.9579870417283, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 8103.0839275753842, 10.000000000000000, 10.000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 22026.465794806718, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler060 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, c=1.0000000000000000.
-testcase_conf_hyperg<double> data061[] = {
-  { 0.00018021852293239465, 20.000000000000000, 1.0000000000000000,
-          -10.000000000000000 },
-  { 0.0017726368057851861, 20.000000000000000, 1.0000000000000000,
-          -9.0000000000000000 },
-  { 0.00058280040382329248, 20.000000000000000, 1.0000000000000000,
-          -8.0000000000000000 },
-  { -0.0049657717020590141, 20.000000000000000, 1.0000000000000000,
-          -7.0000000000000000 },
-  { -0.0012360336087128597, 20.000000000000000, 1.0000000000000000,
-          -6.0000000000000000 },
-  { 0.014898894139255305, 20.000000000000000, 1.0000000000000000,
-          -5.0000000000000000 },
-  { -0.013800784612552089, 20.000000000000000, 1.0000000000000000,
-          -4.0000000000000000 },
-  { -0.012192213426039619, 20.000000000000000, 1.0000000000000000,
-          -3.0000000000000000 },
-  { 0.050311246773136239, 20.000000000000000, 1.0000000000000000,
-          -2.0000000000000000 },
-  { -0.025985814502838461, 20.000000000000000, 1.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
-          0.0000000000000000 },
-  { 1563.6577385252015, 20.000000000000000, 1.0000000000000000,
-          1.0000000000000000 },
-  { 86377.091910766278, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000 },
-  { 2216718.8789979252, 20.000000000000000, 1.0000000000000000,
-          3.0000000000000000 },
-  { 38045018.520647161, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000 },
-  { 504376263.68346798, 20.000000000000000, 1.0000000000000000,
-          5.0000000000000000 },
-  { 5565635666.7972031, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000 },
-  { 53451562646.544518, 20.000000000000000, 1.0000000000000000,
-          7.0000000000000000 },
-  { 460009135340.33868, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000 },
-  { 3620401937301.4907, 20.000000000000000, 1.0000000000000000,
-          9.0000000000000000 },
-  { 26446266822604.152, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=20.000000000000000, c=1.0000000000000000.
-template <typename Tp>
-void test061()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data061)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data061[i].a), Tp(data061[i].c),
-                   Tp(data061[i].x));
-      const Tp f0 = data061[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-}
+// max(|f - f_GSL|): 0.0039062500000000000 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.8043537688323639e-14
+// mean(f - f_GSL): -3.3615948355170052e-05
+// variance(f - f_GSL): 7.8735813272906564e-07
+// stddev(f - f_GSL): 0.00088733203071289252
+const testcase_conf_hyperg<double>
+data061[21] =
+{
+  { 0.00018021852293239455, 20.000000000000000, 1.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 0.0017726368057851866, 20.000000000000000, 1.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 0.00058280040382329280, 20.000000000000000, 1.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { -0.0049657717020590141, 20.000000000000000, 1.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { -0.0012360336087128597, 20.000000000000000, 1.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 0.014898894139255305, 20.000000000000000, 1.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { -0.013800784612552078, 20.000000000000000, 1.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { -0.012192213426039619, 20.000000000000000, 1.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.050311246773136212, 20.000000000000000, 1.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { -0.025985814502838493, 20.000000000000000, 1.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 1.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 1563.6577385252017, 20.000000000000000, 1.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 86377.091910766088, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 2216718.8789979252, 20.000000000000000, 1.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 38045018.520647161, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 504376263.68346804, 20.000000000000000, 1.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 5565635666.7972050, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 53451562646.544518, 20.000000000000000, 1.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 460009135340.33832, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 3620401937301.4907, 20.000000000000000, 1.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 26446266822604.152, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler061 = 2.5000000000000015e-12;
 
 // Test data for a=20.000000000000000, c=2.0000000000000000.
-testcase_conf_hyperg<double> data062[] = {
-  { 6.6647681992684102e-05, 20.000000000000000, 2.0000000000000000,
-          -10.000000000000000 },
-  { -3.7248253270227178e-05, 20.000000000000000, 2.0000000000000000,
-          -9.0000000000000000 },
-  { -0.00024392611307344028, 20.000000000000000, 2.0000000000000000,
-          -8.0000000000000000 },
-  { 2.4034559592246216e-05, 20.000000000000000, 2.0000000000000000,
-          -7.0000000000000000 },
-  { 0.00081645960584843073, 20.000000000000000, 2.0000000000000000,
-          -6.0000000000000000 },
-  { -0.00051326387116462115, 20.000000000000000, 2.0000000000000000,
-          -5.0000000000000000 },
-  { -0.0021786279856333920, 20.000000000000000, 2.0000000000000000,
-          -4.0000000000000000 },
-  { 0.0061029380625179973, 20.000000000000000, 2.0000000000000000,
-          -3.0000000000000000 },
-  { -0.011834301617155171, 20.000000000000000, 2.0000000000000000,
-          -2.0000000000000000 },
-  { 0.037622016973681095, 20.000000000000000, 2.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
-          0.0000000000000000 },
-  { 303.10954080179744, 20.000000000000000, 2.0000000000000000,
-          1.0000000000000000 },
-  { 11508.923130556599, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000 },
-  { 234541.86023461280, 20.000000000000000, 2.0000000000000000,
-          3.0000000000000000 },
-  { 3398931.2897027107, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000 },
-  { 39382712.287920594, 20.000000000000000, 2.0000000000000000,
-          5.0000000000000000 },
-  { 388350500.37087941, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000 },
-  { 3385284070.5527201, 20.000000000000000, 2.0000000000000000,
-          7.0000000000000000 },
-  { 26751585258.405773, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000 },
-  { 195061928138.27673, 20.000000000000000, 2.0000000000000000,
-          9.0000000000000000 },
-  { 1329571695324.3132, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=20.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test062()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data062)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data062[i].a), Tp(data062[i].c),
-                   Tp(data062[i].x));
-      const Tp f0 = data062[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000017e-10));
-}
+// max(|f - f_GSL|): 0.00097656250000000000 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.3638062074418344e-12
+// mean(f - f_GSL): 4.3034663341234841e-05
+// variance(f - f_GSL): 4.5752396645413330e-08
+// stddev(f - f_GSL): 0.00021389809874193210
+const testcase_conf_hyperg<double>
+data062[21] =
+{
+  { 6.6647681992684074e-05, 20.000000000000000, 2.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -3.7248253270227151e-05, 20.000000000000000, 2.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { -0.00024392611307344034, 20.000000000000000, 2.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 2.4034559592246202e-05, 20.000000000000000, 2.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 0.00081645960584843073, 20.000000000000000, 2.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { -0.00051326387116462039, 20.000000000000000, 2.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { -0.0021786279856333920, 20.000000000000000, 2.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.0061029380625179973, 20.000000000000000, 2.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { -0.011834301617155166, 20.000000000000000, 2.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.037622016973681061, 20.000000000000000, 2.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 2.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 303.10954080179823, 20.000000000000000, 2.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 11508.923130556599, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 234541.86023461280, 20.000000000000000, 2.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 3398931.2897027107, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 39382712.287920594, 20.000000000000000, 2.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 388350500.37087941, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 3385284070.5527182, 20.000000000000000, 2.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 26751585258.405773, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 195061928138.27676, 20.000000000000000, 2.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 1329571695324.3132, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler062 = 2.5000000000000017e-10;
 
 // Test data for a=20.000000000000000, c=3.0000000000000000.
-testcase_conf_hyperg<double> data063[] = {
-  { -8.6671962318505729e-06, 20.000000000000000, 3.0000000000000000,
-          -10.000000000000000 },
-  { -1.8205565180535418e-05, 20.000000000000000, 3.0000000000000000,
-          -9.0000000000000000 },
-  { 1.5620588717927631e-05, 20.000000000000000, 3.0000000000000000,
-          -8.0000000000000000 },
-  { 7.6532767373103759e-05, 20.000000000000000, 3.0000000000000000,
-          -7.0000000000000000 },
-  { -5.2708600380172109e-05, 20.000000000000000, 3.0000000000000000,
-          -6.0000000000000000 },
-  { -0.00028546308121326264, 20.000000000000000, 3.0000000000000000,
-          -5.0000000000000000 },
-  { 0.00056490746026256289, 20.000000000000000, 3.0000000000000000,
-          -4.0000000000000000 },
-  { -5.0602588875468348e-07, 20.000000000000000, 3.0000000000000000,
-          -3.0000000000000000 },
-  { -0.0021376080642211705, 20.000000000000000, 3.0000000000000000,
-          -2.0000000000000000 },
-  { 0.0028873127225376070, 20.000000000000000, 3.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 3.0000000000000000,
-          0.0000000000000000 },
-  { 106.38207299128953, 20.000000000000000, 3.0000000000000000,
-          1.0000000000000000 },
-  { 2880.5734732831320, 20.000000000000000, 3.0000000000000000,
-          2.0000000000000000 },
-  { 47353.756965165747, 20.000000000000000, 3.0000000000000000,
-          3.0000000000000000 },
-  { 584732.27978148917, 20.000000000000000, 3.0000000000000000,
-          4.0000000000000000 },
-  { 5957333.1101321029, 20.000000000000000, 3.0000000000000000,
-          5.0000000000000000 },
-  { 52725595.633352734, 20.000000000000000, 3.0000000000000000,
-          6.0000000000000000 },
-  { 418560160.03369552, 20.000000000000000, 3.0000000000000000,
-          7.0000000000000000 },
-  { 3045067611.3150902, 20.000000000000000, 3.0000000000000000,
-          8.0000000000000000 },
-  { 20614600690.354652, 20.000000000000000, 3.0000000000000000,
-          9.0000000000000000 },
-  { 131344201933.74118, 20.000000000000000, 3.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=20.000000000000000, c=3.0000000000000000.
-template <typename Tp>
-void test063()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data063)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data063[i].a), Tp(data063[i].c),
-                   Tp(data063[i].x));
-      const Tp f0 = data063[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000007e-09));
-}
+// max(|f - f_GSL|): 1.5258789062500000e-05 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.0636412229856690e-11
+// mean(f - f_GSL): 4.4497851428053653e-07
+// variance(f - f_GSL): 1.1521071605323705e-11
+// stddev(f - f_GSL): 3.3942704083976139e-06
+const testcase_conf_hyperg<double>
+data063[21] =
+{
+  { -8.6671962318505695e-06, 20.000000000000000, 3.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -1.8205565180535425e-05, 20.000000000000000, 3.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 1.5620588717927631e-05, 20.000000000000000, 3.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 7.6532767373103759e-05, 20.000000000000000, 3.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { -5.2708600380172109e-05, 20.000000000000000, 3.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { -0.00028546308121326275, 20.000000000000000, 3.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.00056490746026256267, 20.000000000000000, 3.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { -5.0602588875468348e-07, 20.000000000000000, 3.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { -0.0021376080642211692, 20.000000000000000, 3.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.0028873127225376104, 20.000000000000000, 3.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 3.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 106.38207299128948, 20.000000000000000, 3.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 2880.5734732831320, 20.000000000000000, 3.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 47353.756965165718, 20.000000000000000, 3.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 584732.27978148905, 20.000000000000000, 3.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 5957333.1101320982, 20.000000000000000, 3.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 52725595.633352734, 20.000000000000000, 3.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 418560160.03369552, 20.000000000000000, 3.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 3045067611.3150902, 20.000000000000000, 3.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 20614600690.354652, 20.000000000000000, 3.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 131344201933.74118, 20.000000000000000, 3.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler063 = 1.0000000000000007e-09;
 
 // Test data for a=20.000000000000000, c=4.0000000000000000.
-testcase_conf_hyperg<double> data064[] = {
-  { -1.1286669552452404e-06, 20.000000000000000, 4.0000000000000000,
-          -10.000000000000000 },
-  { 3.9595188785137704e-06, 20.000000000000000, 4.0000000000000000,
-          -9.0000000000000000 },
-  { 8.6940153052790034e-06, 20.000000000000000, 4.0000000000000000,
-          -8.0000000000000000 },
-  { -1.0858814018067509e-05, 20.000000000000000, 4.0000000000000000,
-          -7.0000000000000000 },
-  { -4.1826023828710966e-05, 20.000000000000000, 4.0000000000000000,
-          -6.0000000000000000 },
-  { 6.6455893622436357e-05, 20.000000000000000, 4.0000000000000000,
-          -5.0000000000000000 },
-  { 0.00014238710517977903, 20.000000000000000, 4.0000000000000000,
-          -4.0000000000000000 },
-  { -0.00071796294700866132, 20.000000000000000, 4.0000000000000000,
-          -3.0000000000000000 },
-  { 0.0020884061677332653, 20.000000000000000, 4.0000000000000000,
-          -2.0000000000000000 },
-  { -0.012768833157321986, 20.000000000000000, 4.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 4.0000000000000000,
-          0.0000000000000000 },
-  { 50.659916934657751, 20.000000000000000, 4.0000000000000000,
-          1.0000000000000000 },
-  { 1014.3134442335910, 20.000000000000000, 4.0000000000000000,
-          2.0000000000000000 },
-  { 13665.584449611581, 20.000000000000000, 4.0000000000000000,
-          3.0000000000000000 },
-  { 145123.62797278629, 20.000000000000000, 4.0000000000000000,
-          4.0000000000000000 },
-  { 1308144.4519382305, 20.000000000000000, 4.0000000000000000,
-          5.0000000000000000 },
-  { 10438124.578674613, 20.000000000000000, 4.0000000000000000,
-          6.0000000000000000 },
-  { 75719160.524424642, 20.000000000000000, 4.0000000000000000,
-          7.0000000000000000 },
-  { 508510905.96310234, 20.000000000000000, 4.0000000000000000,
-          8.0000000000000000 },
-  { 3203200954.5618095, 20.000000000000000, 4.0000000000000000,
-          9.0000000000000000 },
-  { 19111993543.124691, 20.000000000000000, 4.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=20.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test064()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data064)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data064[i].a), Tp(data064[i].c),
-                   Tp(data064[i].x));
-      const Tp f0 = data064[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000007e-09));
-}
+// max(|f - f_GSL|): 1.5258789062500000e-05 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.8743522900030841e-11
+// mean(f - f_GSL): -8.3223886940195093e-07
+// variance(f - f_GSL): 1.0926580899883890e-11
+// stddev(f - f_GSL): 3.3055379138475917e-06
+const testcase_conf_hyperg<double>
+data064[21] =
+{
+  { -1.1286669552452397e-06, 20.000000000000000, 4.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 3.9595188785137704e-06, 20.000000000000000, 4.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 8.6940153052790051e-06, 20.000000000000000, 4.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { -1.0858814018067509e-05, 20.000000000000000, 4.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { -4.1826023828710966e-05, 20.000000000000000, 4.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 6.6455893622436316e-05, 20.000000000000000, 4.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 0.00014238710517977906, 20.000000000000000, 4.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { -0.00071796294700866132, 20.000000000000000, 4.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.0020884061677332645, 20.000000000000000, 4.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { -0.012768833157321973, 20.000000000000000, 4.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 4.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 50.659916934657737, 20.000000000000000, 4.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 1014.3134442335910, 20.000000000000000, 4.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 13665.584449611577, 20.000000000000000, 4.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 145123.62797278623, 20.000000000000000, 4.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 1308144.4519382305, 20.000000000000000, 4.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 10438124.578674613, 20.000000000000000, 4.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 75719160.524424627, 20.000000000000000, 4.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 508510905.96310252, 20.000000000000000, 4.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 3203200954.5618095, 20.000000000000000, 4.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 19111993543.124691, 20.000000000000000, 4.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler064 = 1.0000000000000007e-09;
 
 // Test data for a=20.000000000000000, c=5.0000000000000000.
-testcase_conf_hyperg<double> data065[] = {
-  { 8.4755643455670995e-07, 20.000000000000000, 5.0000000000000000,
-          -10.000000000000000 },
-  { 8.5721061862565634e-07, 20.000000000000000, 5.0000000000000000,
-          -9.0000000000000000 },
-  { -2.8228700837555599e-06, 20.000000000000000, 5.0000000000000000,
-          -8.0000000000000000 },
-  { -6.6486802159657585e-06, 20.000000000000000, 5.0000000000000000,
-          -7.0000000000000000 },
-  { 1.1816828026110384e-05, 20.000000000000000, 5.0000000000000000,
-          -6.0000000000000000 },
-  { 3.6173872819745767e-05, 20.000000000000000, 5.0000000000000000,
-          -5.0000000000000000 },
-  { -0.00011481934287296673, 20.000000000000000, 5.0000000000000000,
-          -4.0000000000000000 },
-  { 1.2650647218867087e-07, 20.000000000000000, 5.0000000000000000,
-          -3.0000000000000000 },
-  { 0.0010626537950495971, 20.000000000000000, 5.0000000000000000,
-          -2.0000000000000000 },
-  { -0.0085499011205641979, 20.000000000000000, 5.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
-          0.0000000000000000 },
-  { 29.126637808809363, 20.000000000000000, 5.0000000000000000,
-          1.0000000000000000 },
-  { 446.26914983518060, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000 },
-  { 5005.6470164856382, 20.000000000000000, 5.0000000000000000,
-          3.0000000000000000 },
-  { 46145.715220935213, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000 },
-  { 370342.18574452243, 20.000000000000000, 5.0000000000000000,
-          5.0000000000000000 },
-  { 2676402.7371661114, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000 },
-  { 17803174.102029990, 20.000000000000000, 5.0000000000000000,
-          7.0000000000000000 },
-  { 110674464.63597310, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000 },
-  { 650149739.34228516, 20.000000000000000, 5.0000000000000000,
-          9.0000000000000000 },
-  { 3639417243.5150661, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=20.000000000000000, c=5.0000000000000000.
-template <typename Tp>
-void test065()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data065)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data065[i].a), Tp(data065[i].c),
-                   Tp(data065[i].x));
-      const Tp f0 = data065[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000005e-07));
-}
+// max(|f - f_GSL|): 3.3378601074218750e-06 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.7481076775232650e-09
+// mean(f - f_GSL): -1.3214810701104223e-07
+// variance(f - f_GSL): 5.3952094505284637e-13
+// stddev(f - f_GSL): 7.3452089490554747e-07
+const testcase_conf_hyperg<double>
+data065[21] =
+{
+  { 8.4755643455670974e-07, 20.000000000000000, 5.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 8.5721061862565697e-07, 20.000000000000000, 5.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { -2.8228700837555599e-06, 20.000000000000000, 5.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { -6.6486802159657585e-06, 20.000000000000000, 5.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 1.1816828026110384e-05, 20.000000000000000, 5.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 3.6173872819745774e-05, 20.000000000000000, 5.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { -0.00011481934287296670, 20.000000000000000, 5.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 1.2650647218867087e-07, 20.000000000000000, 5.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.0010626537950495965, 20.000000000000000, 5.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { -0.0085499011205641944, 20.000000000000000, 5.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 5.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 29.126637808809381, 20.000000000000000, 5.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 446.26914983518060, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 5005.6470164856382, 20.000000000000000, 5.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 46145.715220935184, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 370342.18574452243, 20.000000000000000, 5.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 2676402.7371661114, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 17803174.102030005, 20.000000000000000, 5.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 110674464.63597310, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 650149739.34228492, 20.000000000000000, 5.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 3639417243.5150661, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler065 = 1.0000000000000005e-07;
 
 // Test data for a=20.000000000000000, c=6.0000000000000000.
-testcase_conf_hyperg<double> data066[] = {
-  { -1.9022359545309947e-08, 20.000000000000000, 6.0000000000000000,
-          -10.000000000000000 },
-  { -7.4533809656234677e-07, 20.000000000000000, 6.0000000000000000,
-          -9.0000000000000000 },
-  { -9.7852420358724059e-07, 20.000000000000000, 6.0000000000000000,
-          -8.0000000000000000 },
-  { 3.0181569866746340e-06, 20.000000000000000, 6.0000000000000000,
-          -7.0000000000000000 },
-  { 7.9816910701457280e-06, 20.000000000000000, 6.0000000000000000,
-          -6.0000000000000000 },
-  { -2.0133163153966078e-05, 20.000000000000000, 6.0000000000000000,
-          -5.0000000000000000 },
-  { -4.7462368393259678e-05, 20.000000000000000, 6.0000000000000000,
-          -4.0000000000000000 },
-  { 0.00031910869938964821, 20.000000000000000, 6.0000000000000000,
-          -3.0000000000000000 },
-  { -0.0010380528468056445, 20.000000000000000, 6.0000000000000000,
-          -2.0000000000000000 },
-  { 0.0084752097558651162, 20.000000000000000, 6.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 6.0000000000000000,
-          0.0000000000000000 },
-  { 19.002159564861387, 20.000000000000000, 6.0000000000000000,
-          1.0000000000000000 },
-  { 229.93981298721295, 20.000000000000000, 6.0000000000000000,
-          2.0000000000000000 },
-  { 2180.3120758940981, 20.000000000000000, 6.0000000000000000,
-          3.0000000000000000 },
-  { 17610.732510305290, 20.000000000000000, 6.0000000000000000,
-          4.0000000000000000 },
-  { 126633.20907014773, 20.000000000000000, 6.0000000000000000,
-          5.0000000000000000 },
-  { 832692.83016874129, 20.000000000000000, 6.0000000000000000,
-          6.0000000000000000 },
-  { 5097225.0940651651, 20.000000000000000, 6.0000000000000000,
-          7.0000000000000000 },
-  { 29414585.342530537, 20.000000000000000, 6.0000000000000000,
-          8.0000000000000000 },
-  { 161513229.88138971, 20.000000000000000, 6.0000000000000000,
-          9.0000000000000000 },
-  { 849871092.10959554, 20.000000000000000, 6.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=20.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test066()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data066)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data066[i].a), Tp(data066[i].c),
-                   Tp(data066[i].x));
-      const Tp f0 = data066[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000019e-07));
-}
+// max(|f - f_GSL|): 3.5762786865234375e-07 at index 20
+// max(|f - f_GSL| / |f_GSL|): 7.4494596183568454e-09
+// mean(f - f_GSL): -1.3194579482834487e-08
+// variance(f - f_GSL): 6.2283002611266565e-15
+// stddev(f - f_GSL): 7.8919580974094487e-08
+const testcase_conf_hyperg<double>
+data066[21] =
+{
+  { -1.9022359545310003e-08, 20.000000000000000, 6.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -7.4533809656234698e-07, 20.000000000000000, 6.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { -9.7852420358724080e-07, 20.000000000000000, 6.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 3.0181569866746340e-06, 20.000000000000000, 6.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 7.9816910701457280e-06, 20.000000000000000, 6.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { -2.0133163153966071e-05, 20.000000000000000, 6.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { -4.7462368393259685e-05, 20.000000000000000, 6.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 0.00031910869938964821, 20.000000000000000, 6.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { -0.0010380528468056441, 20.000000000000000, 6.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.0084752097558651058, 20.000000000000000, 6.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 6.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 19.002159564861383, 20.000000000000000, 6.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 229.93981298721295, 20.000000000000000, 6.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 2180.3120758940972, 20.000000000000000, 6.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 17610.732510305290, 20.000000000000000, 6.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 126633.20907014767, 20.000000000000000, 6.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 832692.83016874129, 20.000000000000000, 6.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 5097225.0940651651, 20.000000000000000, 6.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 29414585.342530526, 20.000000000000000, 6.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 161513229.88138971, 20.000000000000000, 6.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 849871092.10959554, 20.000000000000000, 6.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler066 = 5.0000000000000019e-07;
 
 // Test data for a=20.000000000000000, c=7.0000000000000000.
-testcase_conf_hyperg<double> data067[] = {
-  { -1.7754301607387143e-07, 20.000000000000000, 7.0000000000000000,
-          -10.000000000000000 },
-  { -6.2128605089471174e-08, 20.000000000000000, 7.0000000000000000,
-          -9.0000000000000000 },
-  { 9.1338873372533148e-07, 20.000000000000000, 7.0000000000000000,
-          -8.0000000000000000 },
-  { 1.6657400269273180e-06, 20.000000000000000, 7.0000000000000000,
-          -7.0000000000000000 },
-  { -4.7904165143355465e-06, 20.000000000000000, 7.0000000000000000,
-          -6.0000000000000000 },
-  { -1.5503088351319615e-05, 20.000000000000000, 7.0000000000000000,
-          -5.0000000000000000 },
-  { 5.6425108496954350e-05, 20.000000000000000, 7.0000000000000000,
-          -4.0000000000000000 },
-  { 9.1083552345479015e-05, 20.000000000000000, 7.0000000000000000,
-          -3.0000000000000000 },
-  { -0.0018058773247853399, 20.000000000000000, 7.0000000000000000,
-          -2.0000000000000000 },
-  { 0.032850147696977763, 20.000000000000000, 7.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 7.0000000000000000,
-          0.0000000000000000 },
-  { 13.551527852090816, 20.000000000000000, 7.0000000000000000,
-          1.0000000000000000 },
-  { 133.23579819973102, 20.000000000000000, 7.0000000000000000,
-          2.0000000000000000 },
-  { 1083.6769250393436, 20.000000000000000, 7.0000000000000000,
-          3.0000000000000000 },
-  { 7739.1410905637622, 20.000000000000000, 7.0000000000000000,
-          4.0000000000000000 },
-  { 50175.328973240226, 20.000000000000000, 7.0000000000000000,
-          5.0000000000000000 },
-  { 301599.46814102860, 20.000000000000000, 7.0000000000000000,
-          6.0000000000000000 },
-  { 1705051.1866143674, 20.000000000000000, 7.0000000000000000,
-          7.0000000000000000 },
-  { 9159788.2353733126, 20.000000000000000, 7.0000000000000000,
-          8.0000000000000000 },
-  { 47122070.398665302, 20.000000000000000, 7.0000000000000000,
-          9.0000000000000000 },
-  { 233529421.53991729, 20.000000000000000, 7.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=20.000000000000000, c=7.0000000000000000.
-template <typename Tp>
-void test067()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data067)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data067[i].a), Tp(data067[i].c),
-                   Tp(data067[i].x));
-      const Tp f0 = data067[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000009e-07));
-}
+// max(|f - f_GSL|): 1.7881393432617188e-07 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.3690711970375556e-09
+// mean(f - f_GSL): -7.4560448694733496e-09
+// variance(f - f_GSL): 1.5415851296503409e-15
+// stddev(f - f_GSL): 3.9263024968159810e-08
+const testcase_conf_hyperg<double>
+data067[21] =
+{
+  { -1.7754301607387138e-07, 20.000000000000000, 7.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -6.2128605089471266e-08, 20.000000000000000, 7.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 9.1338873372533148e-07, 20.000000000000000, 7.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 1.6657400269273180e-06, 20.000000000000000, 7.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { -4.7904165143355465e-06, 20.000000000000000, 7.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { -1.5503088351319618e-05, 20.000000000000000, 7.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 5.6425108496954337e-05, 20.000000000000000, 7.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 9.1083552345479015e-05, 20.000000000000000, 7.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { -0.0018058773247853388, 20.000000000000000, 7.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.032850147696977743, 20.000000000000000, 7.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 7.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 13.551527852090807, 20.000000000000000, 7.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 133.23579819973105, 20.000000000000000, 7.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 1083.6769250393436, 20.000000000000000, 7.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 7739.1410905637622, 20.000000000000000, 7.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 50175.328973240226, 20.000000000000000, 7.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 301599.46814102860, 20.000000000000000, 7.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 1705051.1866143662, 20.000000000000000, 7.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 9159788.2353733145, 20.000000000000000, 7.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 47122070.398665302, 20.000000000000000, 7.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 233529421.53991735, 20.000000000000000, 7.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler067 = 2.5000000000000009e-07;
 
 // Test data for a=20.000000000000000, c=8.0000000000000000.
-testcase_conf_hyperg<double> data068[] = {
-  { 4.4385719622857060e-08, 20.000000000000000, 8.0000000000000000,
-          -10.000000000000000 },
-  { 2.7870855352561929e-07, 20.000000000000000, 8.0000000000000000,
-          -9.0000000000000000 },
-  { 2.7221706037028333e-07, 20.000000000000000, 8.0000000000000000,
-          -8.0000000000000000 },
-  { -1.5211293805365477e-06, 20.000000000000000, 8.0000000000000000,
-          -7.0000000000000000 },
-  { -4.2978336531553922e-06, 20.000000000000000, 8.0000000000000000,
-          -6.0000000000000000 },
-  { 1.1339557446266738e-05, 20.000000000000000, 8.0000000000000000,
-          -5.0000000000000000 },
-  { 5.3526365220658982e-05, 20.000000000000000, 8.0000000000000000,
-          -4.0000000000000000 },
-  { -0.00029461053269513242, 20.000000000000000, 8.0000000000000000,
-          -3.0000000000000000 },
-  { -0.00026793636646740187, 20.000000000000000, 8.0000000000000000,
-          -2.0000000000000000 },
-  { 0.061061258434452835, 20.000000000000000, 8.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 8.0000000000000000,
-          0.0000000000000000 },
-  { 10.312756690132913, 20.000000000000000, 8.0000000000000000,
-          1.0000000000000000 },
-  { 84.471824856846425, 20.000000000000000, 8.0000000000000000,
-          2.0000000000000000 },
-  { 597.47335666854985, 20.000000000000000, 8.0000000000000000,
-          3.0000000000000000 },
-  { 3805.9786364107408, 20.000000000000000, 8.0000000000000000,
-          4.0000000000000000 },
-  { 22386.068461641658, 20.000000000000000, 8.0000000000000000,
-          5.0000000000000000 },
-  { 123573.63516975302, 20.000000000000000, 8.0000000000000000,
-          6.0000000000000000 },
-  { 647514.24141570868, 20.000000000000000, 8.0000000000000000,
-          7.0000000000000000 },
-  { 3247628.2434586394, 20.000000000000000, 8.0000000000000000,
-          8.0000000000000000 },
-  { 15690070.625286423, 20.000000000000000, 8.0000000000000000,
-          9.0000000000000000 },
-  { 73379158.893325061, 20.000000000000000, 8.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=20.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test068()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data068)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data068[i].a), Tp(data068[i].c),
-                   Tp(data068[i].x));
-      const Tp f0 = data068[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000005e-07));
-}
+// max(|f - f_GSL|): 5.9604644775390625e-08 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.2249582729983602e-09
+// mean(f - f_GSL): -2.6616969148797329e-09
+// variance(f - f_GSL): 1.7023121382985524e-16
+// stddev(f - f_GSL): 1.3047268443235743e-08
+const testcase_conf_hyperg<double>
+data068[21] =
+{
+  { 4.4385719622857066e-08, 20.000000000000000, 8.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { 2.7870855352561944e-07, 20.000000000000000, 8.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { 2.7221706037028333e-07, 20.000000000000000, 8.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { -1.5211293805365477e-06, 20.000000000000000, 8.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { -4.2978336531553913e-06, 20.000000000000000, 8.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 1.1339557446266733e-05, 20.000000000000000, 8.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { 5.3526365220658988e-05, 20.000000000000000, 8.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { -0.00029461053269513242, 20.000000000000000, 8.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { -0.00026793636646740143, 20.000000000000000, 8.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.061061258434452807, 20.000000000000000, 8.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 8.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 10.312756690132913, 20.000000000000000, 8.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 84.471824856846425, 20.000000000000000, 8.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 597.47335666854985, 20.000000000000000, 8.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 3805.9786364107408, 20.000000000000000, 8.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 22386.068461641658, 20.000000000000000, 8.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 123573.63516975302, 20.000000000000000, 8.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 647514.24141570868, 20.000000000000000, 8.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 3247628.2434586394, 20.000000000000000, 8.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 15690070.625286419, 20.000000000000000, 8.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 73379158.893325046, 20.000000000000000, 8.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler068 = 1.0000000000000005e-07;
 
 // Test data for a=20.000000000000000, c=9.0000000000000000.
-testcase_conf_hyperg<double> data069[] = {
-  { 7.3976263576568592e-08, 20.000000000000000, 9.0000000000000000,
-          -10.000000000000000 },
-  { -9.0753238092548416e-09, 20.000000000000000, 9.0000000000000000,
-          -9.0000000000000000 },
-  { -5.5549484970396693e-07, 20.000000000000000, 9.0000000000000000,
-          -8.0000000000000000 },
-  { -1.1104933512848787e-06, 20.000000000000000, 9.0000000000000000,
-          -7.0000000000000000 },
-  { 3.2483424385770483e-06, 20.000000000000000, 9.0000000000000000,
-          -6.0000000000000000 },
-  { 1.7493431113569438e-05, 20.000000000000000, 9.0000000000000000,
-          -5.0000000000000000 },
-  { -3.9066110636117253e-05, 20.000000000000000, 9.0000000000000000,
-          -4.0000000000000000 },
-  { -0.00040356155493308509, 20.000000000000000, 9.0000000000000000,
-          -3.0000000000000000 },
-  { 0.0037671531470534567, 20.000000000000000, 9.0000000000000000,
-          -2.0000000000000000 },
-  { 0.090944344485248449, 20.000000000000000, 9.0000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 9.0000000000000000,
-          0.0000000000000000 },
-  { 8.2390942957149722, 20.000000000000000, 9.0000000000000000,
-          1.0000000000000000 },
-  { 57.468054562166706, 20.000000000000000, 9.0000000000000000,
-          2.0000000000000000 },
-  { 358.00109079775746, 20.000000000000000, 9.0000000000000000,
-          3.0000000000000000 },
-  { 2051.3704389046998, 20.000000000000000, 9.0000000000000000,
-          4.0000000000000000 },
-  { 11012.597503064211, 20.000000000000000, 9.0000000000000000,
-          5.0000000000000000 },
-  { 56082.113308934473, 20.000000000000000, 9.0000000000000000,
-          6.0000000000000000 },
-  { 273348.46918863337, 20.000000000000000, 9.0000000000000000,
-          7.0000000000000000 },
-  { 1283674.4996444662, 20.000000000000000, 9.0000000000000000,
-          8.0000000000000000 },
-  { 5838026.8730425332, 20.000000000000000, 9.0000000000000000,
-          9.0000000000000000 },
-  { 25817349.972859707, 20.000000000000000, 9.0000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=20.000000000000000, c=9.0000000000000000.
-template <typename Tp>
-void test069()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data069)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data069[i].a), Tp(data069[i].c),
-                   Tp(data069[i].x));
-      const Tp f0 = data069[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000004e-06));
-}
+// max(|f - f_GSL|): 7.4505805969238281e-09 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.7712852063552690e-08
+// mean(f - f_GSL): 2.9817087070221364e-10
+// variance(f - f_GSL): 2.6857406568168514e-18
+// stddev(f - f_GSL): 1.6388229485874463e-09
+const testcase_conf_hyperg<double>
+data069[21] =
+{
+  { 7.3976263576568565e-08, 20.000000000000000, 9.0000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -9.0753238092548168e-09, 20.000000000000000, 9.0000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { -5.5549484970396693e-07, 20.000000000000000, 9.0000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { -1.1104933512848787e-06, 20.000000000000000, 9.0000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 3.2483424385770483e-06, 20.000000000000000, 9.0000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { 1.7493431113569438e-05, 20.000000000000000, 9.0000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { -3.9066110636117233e-05, 20.000000000000000, 9.0000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { -0.00040356155493308509, 20.000000000000000, 9.0000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.0037671531470534550, 20.000000000000000, 9.0000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.090944344485248435, 20.000000000000000, 9.0000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 9.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 8.2390942957149722, 20.000000000000000, 9.0000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 57.468054562166706, 20.000000000000000, 9.0000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 358.00109079775746, 20.000000000000000, 9.0000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 2051.3704389047002, 20.000000000000000, 9.0000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 11012.597503064209, 20.000000000000000, 9.0000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 56082.113308934473, 20.000000000000000, 9.0000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 273348.46918863337, 20.000000000000000, 9.0000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 1283674.4996444662, 20.000000000000000, 9.0000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 5838026.8730425332, 20.000000000000000, 9.0000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 25817349.972859699, 20.000000000000000, 9.0000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler069 = 1.0000000000000004e-06;
 
 // Test data for a=20.000000000000000, c=10.000000000000000.
-testcase_conf_hyperg<double> data070[] = {
-  { -4.1157677792944940e-08, 20.000000000000000, 10.000000000000000,
-          -10.000000000000000 },
-  { -2.0187210039960906e-07, 20.000000000000000, 10.000000000000000,
-          -9.0000000000000000 },
-  { -2.2272304939386817e-07, 20.000000000000000, 10.000000000000000,
-          -8.0000000000000000 },
-  { 1.2925568212606171e-06, 20.000000000000000, 10.000000000000000,
-          -7.0000000000000000 },
-  { 5.5744573775996227e-06, 20.000000000000000, 10.000000000000000,
-          -6.0000000000000000 },
-  { -6.2568272011787340e-06, 20.000000000000000, 10.000000000000000,
-          -5.0000000000000000 },
-  { -0.00011955177906335608, 20.000000000000000, 10.000000000000000,
-          -4.0000000000000000 },
-  { 9.2475405516991078e-05, 20.000000000000000, 10.000000000000000,
-          -3.0000000000000000 },
-  { 0.010123531287569982, 20.000000000000000, 10.000000000000000,
-          -2.0000000000000000 },
-  { 0.12118937229909535, 20.000000000000000, 10.000000000000000,
-          -1.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
-          0.0000000000000000 },
-  { 6.8319857942415494, 20.000000000000000, 10.000000000000000,
-          1.0000000000000000 },
-  { 41.356658140815220, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000 },
-  { 229.57496033810907, 20.000000000000000, 10.000000000000000,
-          3.0000000000000000 },
-  { 1192.7830549969506, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000 },
-  { 5878.6003887215920, 20.000000000000000, 10.000000000000000,
-          5.0000000000000000 },
-  { 27741.749322673899, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000 },
-  { 126220.54599305884, 20.000000000000000, 10.000000000000000,
-          7.0000000000000000 },
-  { 556592.10886612453, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000 },
-  { 2388555.2873243922, 20.000000000000000, 10.000000000000000,
-          9.0000000000000000 },
-  { 10008079.497419352, 20.000000000000000, 10.000000000000000,
-          10.000000000000000 },
-};
-
-// Test function for a=20.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test070()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data070)
-                         / sizeof(testcase_conf_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::conf_hyperg(Tp(data070[i].a), Tp(data070[i].c),
-                   Tp(data070[i].x));
-      const Tp f0 = data070[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000009e-07));
-}
+// max(|f - f_GSL|): 1.8626451492309570e-09 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.6960738533111097e-09
+// mean(f - f_GSL): 1.6480220132168215e-10
+// variance(f - f_GSL): 1.5134021047767599e-19
+// stddev(f - f_GSL): 3.8902469134706086e-10
+const testcase_conf_hyperg<double>
+data070[21] =
+{
+  { -4.1157677792944940e-08, 20.000000000000000, 10.000000000000000, 
+         -10.000000000000000, 0.0 },
+  { -2.0187210039960914e-07, 20.000000000000000, 10.000000000000000, 
+         -9.0000000000000000, 0.0 },
+  { -2.2272304939386817e-07, 20.000000000000000, 10.000000000000000, 
+         -8.0000000000000000, 0.0 },
+  { 1.2925568212606171e-06, 20.000000000000000, 10.000000000000000, 
+         -7.0000000000000000, 0.0 },
+  { 5.5744573775996210e-06, 20.000000000000000, 10.000000000000000, 
+         -6.0000000000000000, 0.0 },
+  { -6.2568272011787289e-06, 20.000000000000000, 10.000000000000000, 
+         -5.0000000000000000, 0.0 },
+  { -0.00011955177906335608, 20.000000000000000, 10.000000000000000, 
+         -4.0000000000000000, 0.0 },
+  { 9.2475405516991146e-05, 20.000000000000000, 10.000000000000000, 
+         -3.0000000000000000, 0.0 },
+  { 0.010123531287569976, 20.000000000000000, 10.000000000000000, 
+         -2.0000000000000000, 0.0 },
+  { 0.12118937229909534, 20.000000000000000, 10.000000000000000, 
+         -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 10.000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 6.8319857942415538, 20.000000000000000, 10.000000000000000, 
+         1.0000000000000000, 0.0 },
+  { 41.356658140815220, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.0 },
+  { 229.57496033810904, 20.000000000000000, 10.000000000000000, 
+         3.0000000000000000, 0.0 },
+  { 1192.7830549969501, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.0 },
+  { 5878.6003887215920, 20.000000000000000, 10.000000000000000, 
+         5.0000000000000000, 0.0 },
+  { 27741.749322673899, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.0 },
+  { 126220.54599305880, 20.000000000000000, 10.000000000000000, 
+         7.0000000000000000, 0.0 },
+  { 556592.10886612453, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0 },
+  { 2388555.2873243927, 20.000000000000000, 10.000000000000000, 
+         9.0000000000000000, 0.0 },
+  { 10008079.497419352, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.0 },
+};
+const double toler070 = 2.5000000000000009e-07;
+
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_conf_hyperg<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+        {
+       const Ret f = std::tr1::conf_hyperg(data[i].a, data[i].c,
+                    data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
-{
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
-  test015<double>();
-  test016<double>();
-  test017<double>();
-  test018<double>();
-  test019<double>();
-  test020<double>();
-  test021<double>();
-  test022<double>();
-  test023<double>();
-  test024<double>();
-  test025<double>();
-  test026<double>();
-  test027<double>();
-  test028<double>();
-  test029<double>();
-  test030<double>();
-  test031<double>();
-  test032<double>();
-  test033<double>();
-  test034<double>();
-  test035<double>();
-  test036<double>();
-  test037<double>();
-  test038<double>();
-  test039<double>();
-  test040<double>();
-  test041<double>();
-  test042<double>();
-  test043<double>();
-  test044<double>();
-  test045<double>();
-  test046<double>();
-  test047<double>();
-  test048<double>();
-  test049<double>();
-  test050<double>();
-  test051<double>();
-  test052<double>();
-  test053<double>();
-  test054<double>();
-  test055<double>();
-  test056<double>();
-  test057<double>();
-  test058<double>();
-  test059<double>();
-  test060<double>();
-  test061<double>();
-  test062<double>();
-  test063<double>();
-  test064<double>();
-  test065<double>();
-  test066<double>();
-  test067<double>();
-  test068<double>();
-  test069<double>();
-  test070<double>();
+int
+main()
+{
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
+  test(data016, toler016);
+  test(data017, toler017);
+  test(data018, toler018);
+  test(data019, toler019);
+  test(data020, toler020);
+  test(data021, toler021);
+  test(data022, toler022);
+  test(data023, toler023);
+  test(data024, toler024);
+  test(data025, toler025);
+  test(data026, toler026);
+  test(data027, toler027);
+  test(data028, toler028);
+  test(data029, toler029);
+  test(data030, toler030);
+  test(data031, toler031);
+  test(data032, toler032);
+  test(data033, toler033);
+  test(data034, toler034);
+  test(data035, toler035);
+  test(data036, toler036);
+  test(data037, toler037);
+  test(data038, toler038);
+  test(data039, toler039);
+  test(data040, toler040);
+  test(data041, toler041);
+  test(data042, toler042);
+  test(data043, toler043);
+  test(data044, toler044);
+  test(data045, toler045);
+  test(data046, toler046);
+  test(data047, toler047);
+  test(data048, toler048);
+  test(data049, toler049);
+  test(data050, toler050);
+  test(data051, toler051);
+  test(data052, toler052);
+  test(data053, toler053);
+  test(data054, toler054);
+  test(data055, toler055);
+  test(data056, toler056);
+  test(data057, toler057);
+  test(data058, toler058);
+  test(data059, toler059);
+  test(data060, toler060);
+  test(data061, toler061);
+  test(data062, toler062);
+  test(data063, toler063);
+  test(data064, toler064);
+  test(data065, toler065);
+  test(data066, toler066);
+  test(data067, toler067);
+  test(data068, toler068);
+  test(data069, toler069);
+  test(data070, toler070);
   return 0;
 }
index 13bee82..a61251b 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  cyl_bessel_i
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for nu=0.0000000000000000.
-testcase_cyl_bessel_i<double> data001[] = {
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
-  { 1.0156861412236078, 0.0000000000000000, 0.25000000000000000 },
-  { 1.0634833707413236, 0.0000000000000000, 0.50000000000000000 },
-  { 1.1456467780440014, 0.0000000000000000, 0.75000000000000000 },
-  { 1.2660658777520082, 0.0000000000000000, 1.0000000000000000 },
-  { 1.4304687177218294, 0.0000000000000000, 1.2500000000000000 },
-  { 1.6467231897728904, 0.0000000000000000, 1.5000000000000000 },
-  { 1.9252521538585023, 0.0000000000000000, 1.7500000000000000 },
-  { 2.2795853023360668, 0.0000000000000000, 2.0000000000000000 },
-  { 2.7270783071907951, 0.0000000000000000, 2.2500000000000000 },
-  { 3.2898391440501231, 0.0000000000000000, 2.5000000000000000 },
-  { 3.9959131072376550, 0.0000000000000000, 2.7500000000000000 },
-  { 4.8807925858650245, 0.0000000000000000, 3.0000000000000000 },
-  { 5.9893359979395138, 0.0000000000000000, 3.2500000000000000 },
-  { 7.3782034322254750, 0.0000000000000000, 3.5000000000000000 },
-  { 9.1189458608445655, 0.0000000000000000, 3.7500000000000000 },
-  { 11.301921952136325, 0.0000000000000000, 4.0000000000000000 },
-  { 14.041263683000595, 0.0000000000000000, 4.2500000000000000 },
-  { 17.481171855609272, 0.0000000000000000, 4.5000000000000000 },
-  { 21.803898740902120, 0.0000000000000000, 4.7500000000000000 },
-  { 27.239871823604439, 0.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 5.2402526762307389e-14 at index 12
+// max(|f - f_GSL| / |f_GSL|): 1.0747725055352992e-14
+// mean(f - f_GSL): -1.9624513654326576e-14
+// variance(f - f_GSL): 4.0630093099383162e-30
+// stddev(f - f_GSL): 2.0156907773610308e-15
+const testcase_cyl_bessel_i<double>
+data007[21] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0156861412236078, 0.0000000000000000, 0.25000000000000000, 0.0 },
+  { 1.0634833707413236, 0.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.1456467780440014, 0.0000000000000000, 0.75000000000000000, 0.0 },
+  { 1.2660658777520082, 0.0000000000000000, 1.0000000000000000, 0.0 },
+  { 1.4304687177218294, 0.0000000000000000, 1.2500000000000000, 0.0 },
+  { 1.6467231897728904, 0.0000000000000000, 1.5000000000000000, 0.0 },
+  { 1.9252521538585021, 0.0000000000000000, 1.7500000000000000, 0.0 },
+  { 2.2795853023360668, 0.0000000000000000, 2.0000000000000000, 0.0 },
+  { 2.7270783071907951, 0.0000000000000000, 2.2500000000000000, 0.0 },
+  { 3.2898391440501231, 0.0000000000000000, 2.5000000000000000, 0.0 },
+  { 3.9959131072376550, 0.0000000000000000, 2.7500000000000000, 0.0 },
+  { 4.8807925858650245, 0.0000000000000000, 3.0000000000000000, 0.0 },
+  { 5.9893359979395138, 0.0000000000000000, 3.2500000000000000, 0.0 },
+  { 7.3782034322254750, 0.0000000000000000, 3.5000000000000000, 0.0 },
+  { 9.1189458608445655, 0.0000000000000000, 3.7500000000000000, 0.0 },
+  { 11.301921952136325, 0.0000000000000000, 4.0000000000000000, 0.0 },
+  { 14.041263683000595, 0.0000000000000000, 4.2500000000000000, 0.0 },
+  { 17.481171855609272, 0.0000000000000000, 4.5000000000000000, 0.0 },
+  { 21.803898740902120, 0.0000000000000000, 4.7500000000000000, 0.0 },
+  { 27.239871823604439, 0.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.0000000000000000.
-template<typename Tp>
-  void
-  test001()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data001)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data001[i].nu), Tp(data001[i].x));
-       const Tp f0 = data001[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler007 = 1.0000000000000008e-12;
 
 // Test data for nu=0.33333333333333331.
-testcase_cyl_bessel_i<double> data002[] = {
-  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000 },
-  { 0.56650686557808660, 0.33333333333333331, 0.25000000000000000 },
-  { 0.73897315642511863, 0.33333333333333331, 0.50000000000000000 },
-  { 0.89532320365836804, 0.33333333333333331, 0.75000000000000000 },
-  { 1.0646313978895285, 0.33333333333333331, 1.0000000000000000 },
-  { 1.2623776732605250, 0.33333333333333331, 1.2500000000000000 },
-  { 1.5014290000224382, 0.33333333333333331, 1.5000000000000000 },
-  { 1.7951195525946044, 0.33333333333333331, 1.7500000000000000 },
-  { 2.1587825813728614, 0.33333333333333331, 2.0000000000000000 },
-  { 2.6109134564811405, 0.33333333333333331, 2.2500000000000000 },
-  { 3.1743242297241938, 0.33333333333333331, 2.5000000000000000 },
-  { 3.8774551722182107, 0.33333333333333331, 2.7500000000000000 },
-  { 4.7559569371646946, 0.33333333333333331, 3.0000000000000000 },
-  { 5.8546499652731825, 0.33333333333333331, 3.2500000000000000 },
-  { 7.2299798619171147, 0.33333333333333331, 3.5000000000000000 },
-  { 8.9531114355506318, 0.33333333333333331, 3.7500000000000000 },
-  { 11.113838389991479, 0.33333333333333331, 4.0000000000000000 },
-  { 13.825531136529117, 0.33333333333333331, 4.2500000000000000 },
-  { 17.231403968478318, 0.33333333333333331, 4.5000000000000000 },
-  { 21.512458099556554, 0.33333333333333331, 4.7500000000000000 },
-  { 26.897553069268362, 0.33333333333333331, 5.0000000000000000 },
+// max(|f - f_GSL|): 6.2172489379008766e-15 at index 14
+// max(|f - f_GSL| / |f_GSL|): 9.1624880778907085e-16
+// mean(f - f_GSL): 1.1525172350870673e-15
+// variance(f - f_GSL): 6.9735538801568761e-32
+// stddev(f - f_GSL): 2.6407487347638500e-16
+const testcase_cyl_bessel_i<double>
+data008[21] =
+{
+  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000, 0.0 },
+  { 0.56650686557808660, 0.33333333333333331, 0.25000000000000000, 0.0 },
+  { 0.73897315642511863, 0.33333333333333331, 0.50000000000000000, 0.0 },
+  { 0.89532320365836815, 0.33333333333333331, 0.75000000000000000, 0.0 },
+  { 1.0646313978895283, 0.33333333333333331, 1.0000000000000000, 0.0 },
+  { 1.2623776732605250, 0.33333333333333331, 1.2500000000000000, 0.0 },
+  { 1.5014290000224382, 0.33333333333333331, 1.5000000000000000, 0.0 },
+  { 1.7951195525946040, 0.33333333333333331, 1.7500000000000000, 0.0 },
+  { 2.1587825813728614, 0.33333333333333331, 2.0000000000000000, 0.0 },
+  { 2.6109134564811405, 0.33333333333333331, 2.2500000000000000, 0.0 },
+  { 3.1743242297241938, 0.33333333333333331, 2.5000000000000000, 0.0 },
+  { 3.8774551722182093, 0.33333333333333331, 2.7500000000000000, 0.0 },
+  { 4.7559569371646946, 0.33333333333333331, 3.0000000000000000, 0.0 },
+  { 5.8546499652731825, 0.33333333333333331, 3.2500000000000000, 0.0 },
+  { 7.2299798619171129, 0.33333333333333331, 3.5000000000000000, 0.0 },
+  { 8.9531114355506318, 0.33333333333333331, 3.7500000000000000, 0.0 },
+  { 11.113838389991479, 0.33333333333333331, 4.0000000000000000, 0.0 },
+  { 13.825531136529117, 0.33333333333333331, 4.2500000000000000, 0.0 },
+  { 17.231403968478318, 0.33333333333333331, 4.5000000000000000, 0.0 },
+  { 21.512458099556554, 0.33333333333333331, 4.7500000000000000, 0.0 },
+  { 26.897553069268362, 0.33333333333333331, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.33333333333333331.
-template<typename Tp>
-  void
-  test002()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data002)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data002[i].nu), Tp(data002[i].x));
-       const Tp f0 = data002[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler008 = 2.5000000000000020e-13;
 
 // Test data for nu=0.50000000000000000.
-testcase_cyl_bessel_i<double> data003[] = {
-  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
-  { 0.40311093489975897, 0.50000000000000000, 0.25000000000000000 },
-  { 0.58799308679041573, 0.50000000000000000, 0.50000000000000000 },
-  { 0.75761498638991298, 0.50000000000000000, 0.75000000000000000 },
-  { 0.93767488824548695, 0.50000000000000000, 1.0000000000000000 },
-  { 1.1432089853159872, 0.50000000000000000, 1.2500000000000000 },
-  { 1.3871617204034761, 0.50000000000000000, 1.5000000000000000 },
-  { 1.6830217804556815, 0.50000000000000000, 1.7500000000000000 },
-  { 2.0462368630890526, 0.50000000000000000, 2.0000000000000000 },
-  { 2.4953405089360041, 0.50000000000000000, 2.2500000000000000 },
-  { 3.0530935381967175, 0.50000000000000000, 2.5000000000000000 },
-  { 3.7477882494879449, 0.50000000000000000, 2.7500000000000000 },
-  { 4.6148229034075969, 0.50000000000000000, 3.0000000000000000 },
-  { 5.6986505325335495, 0.50000000000000000, 3.2500000000000000 },
-  { 7.0552194086911877, 0.50000000000000000, 3.5000000000000000 },
-  { 8.7550467841188944, 0.50000000000000000, 3.7500000000000000 },
-  { 10.887101798588422, 0.50000000000000000, 4.0000000000000000 },
-  { 13.563718712579764, 0.50000000000000000, 4.2500000000000000 },
-  { 16.926820080158183, 0.50000000000000000, 4.5000000000000000 },
-  { 21.155804306570005, 0.50000000000000000, 4.7500000000000000 },
-  { 26.477547497559065, 0.50000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.4210854715202004e-14 at index 19
+// max(|f - f_GSL| / |f_GSL|): 9.6042704318763827e-16
+// mean(f - f_GSL): 1.9296733523246769e-16
+// variance(f - f_GSL): 1.9549106045027772e-33
+// stddev(f - f_GSL): 4.4214371017835108e-17
+const testcase_cyl_bessel_i<double>
+data009[21] =
+{
+  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 0.40311093489975897, 0.50000000000000000, 0.25000000000000000, 0.0 },
+  { 0.58799308679041573, 0.50000000000000000, 0.50000000000000000, 0.0 },
+  { 0.75761498638991298, 0.50000000000000000, 0.75000000000000000, 0.0 },
+  { 0.93767488824548695, 0.50000000000000000, 1.0000000000000000, 0.0 },
+  { 1.1432089853159872, 0.50000000000000000, 1.2500000000000000, 0.0 },
+  { 1.3871617204034761, 0.50000000000000000, 1.5000000000000000, 0.0 },
+  { 1.6830217804556813, 0.50000000000000000, 1.7500000000000000, 0.0 },
+  { 2.0462368630890526, 0.50000000000000000, 2.0000000000000000, 0.0 },
+  { 2.4953405089360046, 0.50000000000000000, 2.2500000000000000, 0.0 },
+  { 3.0530935381967175, 0.50000000000000000, 2.5000000000000000, 0.0 },
+  { 3.7477882494879449, 0.50000000000000000, 2.7500000000000000, 0.0 },
+  { 4.6148229034075969, 0.50000000000000000, 3.0000000000000000, 0.0 },
+  { 5.6986505325335486, 0.50000000000000000, 3.2500000000000000, 0.0 },
+  { 7.0552194086911859, 0.50000000000000000, 3.5000000000000000, 0.0 },
+  { 8.7550467841188979, 0.50000000000000000, 3.7500000000000000, 0.0 },
+  { 10.887101798588422, 0.50000000000000000, 4.0000000000000000, 0.0 },
+  { 13.563718712579764, 0.50000000000000000, 4.2500000000000000, 0.0 },
+  { 16.926820080158183, 0.50000000000000000, 4.5000000000000000, 0.0 },
+  { 21.155804306570005, 0.50000000000000000, 4.7500000000000000, 0.0 },
+  { 26.477547497559065, 0.50000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.50000000000000000.
-template<typename Tp>
-  void
-  test003()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data003)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data003[i].nu), Tp(data003[i].x));
-       const Tp f0 = data003[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler009 = 2.5000000000000020e-13;
 
 // Test data for nu=0.66666666666666663.
-testcase_cyl_bessel_i<double> data004[] = {
-  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000 },
-  { 0.27953690613200438, 0.66666666666666663, 0.25000000000000000 },
-  { 0.45628323113556879, 0.66666666666666663, 0.50000000000000000 },
-  { 0.62594569838182612, 0.66666666666666663, 0.75000000000000000 },
-  { 0.80752128860612948, 0.66666666666666663, 1.0000000000000000 },
-  { 1.0139484513577168, 0.66666666666666663, 1.2500000000000000 },
-  { 1.2572918396962991, 0.66666666666666663, 1.5000000000000000 },
-  { 1.5505806938325577, 0.66666666666666663, 1.7500000000000000 },
-  { 1.9089492968236206, 0.66666666666666663, 2.0000000000000000 },
-  { 2.3506463490300331, 0.66666666666666663, 2.2500000000000000 },
-  { 2.8981161894224892, 0.66666666666666663, 2.5000000000000000 },
-  { 3.5792654911068720, 0.66666666666666663, 2.7500000000000000 },
-  { 4.4290087213549505, 0.66666666666666663, 3.0000000000000000 },
-  { 5.4911895720097688, 0.66666666666666663, 3.2500000000000000 },
-  { 6.8209918044137305, 0.66666666666666663, 3.5000000000000000 },
-  { 8.4879784249619767, 0.66666666666666663, 3.7500000000000000 },
-  { 10.579932774013002, 0.66666666666666663, 4.0000000000000000 },
-  { 13.207720355482458, 0.66666666666666663, 4.2500000000000000 },
-  { 16.511448404200543, 0.66666666666666663, 4.5000000000000000 },
-  { 20.668274532832392, 0.66666666666666663, 4.7500000000000000 },
-  { 25.902310583215122, 0.66666666666666663, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.9539925233402755e-14 at index 16
+// max(|f - f_GSL| / |f_GSL|): 2.2100364323953014e-15
+// mean(f - f_GSL): -5.2312651565075830e-15
+// variance(f - f_GSL): 1.4792059082391298e-31
+// stddev(f - f_GSL): 3.8460446022363414e-16
+const testcase_cyl_bessel_i<double>
+data010[21] =
+{
+  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000, 0.0 },
+  { 0.27953690613200444, 0.66666666666666663, 0.25000000000000000, 0.0 },
+  { 0.45628323113556890, 0.66666666666666663, 0.50000000000000000, 0.0 },
+  { 0.62594569838182623, 0.66666666666666663, 0.75000000000000000, 0.0 },
+  { 0.80752128860612971, 0.66666666666666663, 1.0000000000000000, 0.0 },
+  { 1.0139484513577173, 0.66666666666666663, 1.2500000000000000, 0.0 },
+  { 1.2572918396962993, 0.66666666666666663, 1.5000000000000000, 0.0 },
+  { 1.5505806938325581, 0.66666666666666663, 1.7500000000000000, 0.0 },
+  { 1.9089492968236210, 0.66666666666666663, 2.0000000000000000, 0.0 },
+  { 2.3506463490300340, 0.66666666666666663, 2.2500000000000000, 0.0 },
+  { 2.8981161894224896, 0.66666666666666663, 2.5000000000000000, 0.0 },
+  { 3.5792654911068724, 0.66666666666666663, 2.7500000000000000, 0.0 },
+  { 4.4290087213549514, 0.66666666666666663, 3.0000000000000000, 0.0 },
+  { 5.4911895720097705, 0.66666666666666663, 3.2500000000000000, 0.0 },
+  { 6.8209918044137305, 0.66666666666666663, 3.5000000000000000, 0.0 },
+  { 8.4879784249619785, 0.66666666666666663, 3.7500000000000000, 0.0 },
+  { 10.579932774013004, 0.66666666666666663, 4.0000000000000000, 0.0 },
+  { 13.207720355482458, 0.66666666666666663, 4.2500000000000000, 0.0 },
+  { 16.511448404200543, 0.66666666666666663, 4.5000000000000000, 0.0 },
+  { 20.668274532832392, 0.66666666666666663, 4.7500000000000000, 0.0 },
+  { 25.902310583215122, 0.66666666666666663, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.66666666666666663.
-template<typename Tp>
-  void
-  test004()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data004)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data004[i].nu), Tp(data004[i].x));
-       const Tp f0 = data004[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler010 = 2.5000000000000020e-13;
 
 // Test data for nu=1.0000000000000000.
-testcase_cyl_bessel_i<double> data005[] = {
-  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000 },
-  { 0.12597910894546793, 1.0000000000000000, 0.25000000000000000 },
-  { 0.25789430539089631, 1.0000000000000000, 0.50000000000000000 },
-  { 0.40199246158092228, 1.0000000000000000, 0.75000000000000000 },
-  { 0.56515910399248503, 1.0000000000000000, 1.0000000000000000 },
-  { 0.75528141834074725, 1.0000000000000000, 1.2500000000000000 },
-  { 0.98166642857790720, 1.0000000000000000, 1.5000000000000000 },
-  { 1.2555375122401731, 1.0000000000000000, 1.7500000000000000 },
-  { 1.5906368546373291, 1.0000000000000000, 2.0000000000000000 },
-  { 2.0039674569295931, 1.0000000000000000, 2.2500000000000000 },
-  { 2.5167162452886984, 1.0000000000000000, 2.5000000000000000 },
-  { 3.1554101386190028, 1.0000000000000000, 2.7500000000000000 },
-  { 3.9533702174026097, 1.0000000000000000, 3.0000000000000000 },
-  { 4.9525461659085490, 1.0000000000000000, 3.2500000000000000 },
-  { 6.2058349222583642, 1.0000000000000000, 3.5000000000000000 },
-  { 7.7800152298244161, 1.0000000000000000, 3.7500000000000000 },
-  { 9.7594651537044488, 1.0000000000000000, 4.0000000000000000 },
-  { 12.250874667409304, 1.0000000000000000, 4.2500000000000000 },
-  { 15.389222753735924, 1.0000000000000000, 4.5000000000000000 },
-  { 19.345361447520226, 1.0000000000000000, 4.7500000000000000 },
-  { 24.335642142450524, 1.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.2967404927621828e-13 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.0977631741433893e-14
+// mean(f - f_GSL): -3.0188814411265717e-14
+// variance(f - f_GSL): 3.7247797767076778e-29
+// stddev(f - f_GSL): 6.1030973912495271e-15
+const testcase_cyl_bessel_i<double>
+data011[21] =
+{
+  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.12597910894546793, 1.0000000000000000, 0.25000000000000000, 0.0 },
+  { 0.25789430539089631, 1.0000000000000000, 0.50000000000000000, 0.0 },
+  { 0.40199246158092228, 1.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.56515910399248503, 1.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.75528141834074725, 1.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.98166642857790720, 1.0000000000000000, 1.5000000000000000, 0.0 },
+  { 1.2555375122401728, 1.0000000000000000, 1.7500000000000000, 0.0 },
+  { 1.5906368546373291, 1.0000000000000000, 2.0000000000000000, 0.0 },
+  { 2.0039674569295931, 1.0000000000000000, 2.2500000000000000, 0.0 },
+  { 2.5167162452886984, 1.0000000000000000, 2.5000000000000000, 0.0 },
+  { 3.1554101386190028, 1.0000000000000000, 2.7500000000000000, 0.0 },
+  { 3.9533702174026097, 1.0000000000000000, 3.0000000000000000, 0.0 },
+  { 4.9525461659085490, 1.0000000000000000, 3.2500000000000000, 0.0 },
+  { 6.2058349222583642, 1.0000000000000000, 3.5000000000000000, 0.0 },
+  { 7.7800152298244170, 1.0000000000000000, 3.7500000000000000, 0.0 },
+  { 9.7594651537044523, 1.0000000000000000, 4.0000000000000000, 0.0 },
+  { 12.250874667409304, 1.0000000000000000, 4.2500000000000000, 0.0 },
+  { 15.389222753735924, 1.0000000000000000, 4.5000000000000000, 0.0 },
+  { 19.345361447520226, 1.0000000000000000, 4.7500000000000000, 0.0 },
+  { 24.335642142450524, 1.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=1.0000000000000000.
-template<typename Tp>
-  void
-  test005()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data005)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data005[i].nu), Tp(data005[i].x));
-       const Tp f0 = data005[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler011 = 1.0000000000000008e-12;
 
 // Test data for nu=2.0000000000000000.
-testcase_cyl_bessel_i<double> data006[] = {
-  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000 },
-  { 0.0078532696598645167, 2.0000000000000000, 0.25000000000000000 },
-  { 0.031906149177738249, 2.0000000000000000, 0.50000000000000000 },
-  { 0.073666880494875436, 2.0000000000000000, 0.75000000000000000 },
-  { 0.13574766976703831, 2.0000000000000000, 1.0000000000000000 },
-  { 0.22201844837663415, 2.0000000000000000, 1.2500000000000000 },
-  { 0.33783461833568068, 2.0000000000000000, 1.5000000000000000 },
-  { 0.49035213986973319, 2.0000000000000000, 1.7500000000000000 },
-  { 0.68894844769873831, 2.0000000000000000, 2.0000000000000000 },
-  { 0.94577390103115722, 2.0000000000000000, 2.2500000000000000 },
-  { 1.2764661478191643, 2.0000000000000000, 2.5000000000000000 },
-  { 1.7010693700601991, 2.0000000000000000, 2.7500000000000000 },
-  { 2.2452124409299512, 2.0000000000000000, 3.0000000000000000 },
-  { 2.9416152804573357, 2.0000000000000000, 3.2500000000000000 },
-  { 3.8320120480778415, 2.0000000000000000, 3.5000000000000000 },
-  { 4.9696044049382113, 2.0000000000000000, 3.7500000000000000 },
-  { 6.4221893752841046, 2.0000000000000000, 4.0000000000000000 },
-  { 8.2761461924550552, 2.0000000000000000, 4.2500000000000000 },
-  { 10.641517298393307, 2.0000000000000000, 4.5000000000000000 },
-  { 13.658483394577813, 2.0000000000000000, 4.7500000000000000 },
-  { 17.505614966624233, 2.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.8474111129762605e-13 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.0796880796865132e-14
+// mean(f - f_GSL): -3.8692841919903068e-14
+// variance(f - f_GSL): 1.1198300918819667e-27
+// stddev(f - f_GSL): 3.3463862477035829e-14
+const testcase_cyl_bessel_i<double>
+data012[21] =
+{
+  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.0078532696598645167, 2.0000000000000000, 0.25000000000000000, 0.0 },
+  { 0.031906149177738249, 2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 0.073666880494875436, 2.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.13574766976703831, 2.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.22201844837663415, 2.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.33783461833568068, 2.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.49035213986973314, 2.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.68894844769873831, 2.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.94577390103115722, 2.0000000000000000, 2.2500000000000000, 0.0 },
+  { 1.2764661478191643, 2.0000000000000000, 2.5000000000000000, 0.0 },
+  { 1.7010693700601991, 2.0000000000000000, 2.7500000000000000, 0.0 },
+  { 2.2452124409299512, 2.0000000000000000, 3.0000000000000000, 0.0 },
+  { 2.9416152804573357, 2.0000000000000000, 3.2500000000000000, 0.0 },
+  { 3.8320120480778415, 2.0000000000000000, 3.5000000000000000, 0.0 },
+  { 4.9696044049382113, 2.0000000000000000, 3.7500000000000000, 0.0 },
+  { 6.4221893752841055, 2.0000000000000000, 4.0000000000000000, 0.0 },
+  { 8.2761461924550552, 2.0000000000000000, 4.2500000000000000, 0.0 },
+  { 10.641517298393307, 2.0000000000000000, 4.5000000000000000, 0.0 },
+  { 13.658483394577813, 2.0000000000000000, 4.7500000000000000, 0.0 },
+  { 17.505614966624233, 2.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=2.0000000000000000.
-template<typename Tp>
-  void
-  test006()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data006)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data006[i].nu), Tp(data006[i].x));
-       const Tp f0 = data006[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler012 = 1.0000000000000008e-12;
 
 // Test data for nu=5.0000000000000000.
-testcase_cyl_bessel_i<double> data007[] = {
-  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000 },
-  { 2.5497616449882785e-07, 5.0000000000000000, 0.25000000000000000 },
-  { 8.2231713131092646e-06, 5.0000000000000000, 0.50000000000000000 },
-  { 6.3261122739811725e-05, 5.0000000000000000, 0.75000000000000000 },
-  { 0.00027146315595697195, 5.0000000000000000, 1.0000000000000000 },
-  { 0.00084793613616686856, 5.0000000000000000, 1.2500000000000000 },
-  { 0.0021705595690975554, 5.0000000000000000, 1.5000000000000000 },
-  { 0.0048504513371845394, 5.0000000000000000, 1.7500000000000000 },
-  { 0.0098256793231317023, 5.0000000000000000, 2.0000000000000000 },
-  { 0.018486577941045829, 5.0000000000000000, 2.2500000000000000 },
-  { 0.032843475172023219, 5.0000000000000000, 2.5000000000000000 },
-  { 0.055750882754221943, 5.0000000000000000, 2.7500000000000000 },
-  { 0.091206477661513338, 5.0000000000000000, 3.0000000000000000 },
-  { 0.14474880546308083, 5.0000000000000000, 3.2500000000000000 },
-  { 0.22398495470190780, 5.0000000000000000, 3.5000000000000000 },
-  { 0.33928899170999866, 5.0000000000000000, 3.7500000000000000 },
-  { 0.50472436311316626, 5.0000000000000000, 4.0000000000000000 },
-  { 0.73925961816682961, 5.0000000000000000, 4.2500000000000000 },
-  { 1.0683677743764699, 5.0000000000000000, 4.5000000000000000 },
-  { 1.5261268693599621, 5.0000000000000000, 4.7500000000000000 },
-  { 2.1579745473225476, 5.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 2.2204460492503131e-14 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.1379865680381910e-14
+// mean(f - f_GSL): -3.4502652328999478e-15
+// variance(f - f_GSL): 1.8465291591354433e-29
+// stddev(f - f_GSL): 4.2971259687556788e-15
+const testcase_cyl_bessel_i<double>
+data013[21] =
+{
+  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000, 0.0 },
+  { 2.5497616449882785e-07, 5.0000000000000000, 0.25000000000000000, 0.0 },
+  { 8.2231713131092646e-06, 5.0000000000000000, 0.50000000000000000, 0.0 },
+  { 6.3261122739811725e-05, 5.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.00027146315595697195, 5.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.00084793613616686856, 5.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.0021705595690975554, 5.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.0048504513371845385, 5.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.0098256793231317023, 5.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.018486577941045829, 5.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.032843475172023219, 5.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.055750882754221943, 5.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.091206477661513338, 5.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.14474880546308083, 5.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.22398495470190780, 5.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.33928899170999877, 5.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.50472436311316637, 5.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.73925961816682961, 5.0000000000000000, 4.2500000000000000, 0.0 },
+  { 1.0683677743764701, 5.0000000000000000, 4.5000000000000000, 0.0 },
+  { 1.5261268693599621, 5.0000000000000000, 4.7500000000000000, 0.0 },
+  { 2.1579745473225476, 5.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=5.0000000000000000.
-template<typename Tp>
-  void
-  test007()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data007)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data007[i].nu), Tp(data007[i].x));
-       const Tp f0 = data007[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler013 = 1.0000000000000008e-12;
 
 // Test data for nu=10.000000000000000.
-testcase_cyl_bessel_i<double> data008[] = {
-  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000 },
-  { 2.5701232848571186e-16, 10.000000000000000, 0.25000000000000000 },
-  { 2.6430419258812784e-13, 10.000000000000000, 0.50000000000000000 },
-  { 1.5349659676120412e-11, 10.000000000000000, 0.75000000000000000 },
-  { 2.7529480398368732e-10, 10.000000000000000, 1.0000000000000000 },
-  { 2.5967897782035928e-09, 10.000000000000000, 1.2500000000000000 },
-  { 1.6330924437799743e-08, 10.000000000000000, 1.5000000000000000 },
-  { 7.7706676834614093e-08, 10.000000000000000, 1.7500000000000000 },
-  { 3.0169638793506839e-07, 10.000000000000000, 2.0000000000000000 },
-  { 1.0034459057774481e-06, 10.000000000000000, 2.2500000000000000 },
-  { 2.9557436109680578e-06, 10.000000000000000, 2.5000000000000000 },
-  { 7.8955603774082724e-06, 10.000000000000000, 2.7500000000000000 },
-  { 1.9464393470612970e-05, 10.000000000000000, 3.0000000000000000 },
-  { 4.4875369479742435e-05, 10.000000000000000, 3.2500000000000000 },
-  { 9.7760848514528916e-05, 10.000000000000000, 3.5000000000000000 },
-  { 0.00020289011210063493, 10.000000000000000, 3.7500000000000000 },
-  { 0.00040378896132693047, 10.000000000000000, 4.0000000000000000 },
-  { 0.00077478519551669892, 10.000000000000000, 4.2500000000000000 },
-  { 0.0014397060684919682, 10.000000000000000, 4.5000000000000000 },
-  { 0.0026004486016189452, 10.000000000000000, 4.7500000000000000 },
-  { 0.0045800444191760525, 10.000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 5.0306980803327406e-17 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.2741587624782699e-14
+// mean(f - f_GSL): -5.4602116438803446e-18
+// variance(f - f_GSL): 1.0558971696213844e-34
+// stddev(f - f_GSL): 1.0275685717368863e-17
+const testcase_cyl_bessel_i<double>
+data014[21] =
+{
+  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000, 0.0 },
+  { 2.5701232848571186e-16, 10.000000000000000, 0.25000000000000000, 0.0 },
+  { 2.6430419258812784e-13, 10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.5349659676120412e-11, 10.000000000000000, 0.75000000000000000, 0.0 },
+  { 2.7529480398368732e-10, 10.000000000000000, 1.0000000000000000, 0.0 },
+  { 2.5967897782035928e-09, 10.000000000000000, 1.2500000000000000, 0.0 },
+  { 1.6330924437799743e-08, 10.000000000000000, 1.5000000000000000, 0.0 },
+  { 7.7706676834614079e-08, 10.000000000000000, 1.7500000000000000, 0.0 },
+  { 3.0169638793506839e-07, 10.000000000000000, 2.0000000000000000, 0.0 },
+  { 1.0034459057774481e-06, 10.000000000000000, 2.2500000000000000, 0.0 },
+  { 2.9557436109680578e-06, 10.000000000000000, 2.5000000000000000, 0.0 },
+  { 7.8955603774082724e-06, 10.000000000000000, 2.7500000000000000, 0.0 },
+  { 1.9464393470612970e-05, 10.000000000000000, 3.0000000000000000, 0.0 },
+  { 4.4875369479742435e-05, 10.000000000000000, 3.2500000000000000, 0.0 },
+  { 9.7760848514528916e-05, 10.000000000000000, 3.5000000000000000, 0.0 },
+  { 0.00020289011210063496, 10.000000000000000, 3.7500000000000000, 0.0 },
+  { 0.00040378896132693058, 10.000000000000000, 4.0000000000000000, 0.0 },
+  { 0.00077478519551669892, 10.000000000000000, 4.2500000000000000, 0.0 },
+  { 0.0014397060684919682, 10.000000000000000, 4.5000000000000000, 0.0 },
+  { 0.0026004486016189452, 10.000000000000000, 4.7500000000000000, 0.0 },
+  { 0.0045800444191760525, 10.000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=10.000000000000000.
-template<typename Tp>
-  void
-  test008()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data008)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data008[i].nu), Tp(data008[i].x));
-       const Tp f0 = data008[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler014 = 1.0000000000000008e-12;
 
 // Test data for nu=20.000000000000000.
-testcase_cyl_bessel_i<double> data009[] = {
-  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000 },
-  { 3.5677858077910353e-37, 20.000000000000000, 0.25000000000000000 },
-  { 3.7494538480790194e-31, 20.000000000000000, 0.50000000000000000 },
-  { 1.2514356342425337e-27, 20.000000000000000, 0.75000000000000000 },
-  { 3.9668359858190197e-25, 20.000000000000000, 1.0000000000000000 },
-  { 3.4637832909868234e-23, 20.000000000000000, 1.2500000000000000 },
-  { 1.3388331839683472e-21, 20.000000000000000, 1.5000000000000000 },
-  { 2.9502376732679751e-20, 20.000000000000000, 1.7500000000000000 },
-  { 4.3105605761095479e-19, 20.000000000000000, 2.0000000000000000 },
-  { 4.6032451406433059e-18, 20.000000000000000, 2.2500000000000000 },
-  { 3.8400317244170310e-17, 20.000000000000000, 2.5000000000000000 },
-  { 2.6239115263043263e-16, 20.000000000000000, 2.7500000000000000 },
-  { 1.5209660019426689e-15, 20.000000000000000, 3.0000000000000000 },
-  { 7.6806450728249953e-15, 20.000000000000000, 3.2500000000000000 },
-  { 3.4495528847222945e-14, 20.000000000000000, 3.5000000000000000 },
-  { 1.4006589294850672e-13, 20.000000000000000, 3.7500000000000000 },
-  { 5.2100734221993044e-13, 20.000000000000000, 4.0000000000000000 },
-  { 1.7946903269488168e-12, 20.000000000000000, 4.2500000000000000 },
-  { 5.7763830562279683e-12, 20.000000000000000, 4.5000000000000000 },
-  { 1.7502433074548735e-11, 20.000000000000000, 4.7500000000000000 },
-  { 5.0242393579718066e-11, 20.000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 6.9147129330604657e-25 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.6061319023473306e-14
+// mean(f - f_GSL): -5.1436249496041580e-26
+// variance(f - f_GSL): 2.1506355008505938e-50
+// stddev(f - f_GSL): 1.4665045178418625e-25
+const testcase_cyl_bessel_i<double>
+data015[21] =
+{
+  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000, 0.0 },
+  { 3.5677858077910353e-37, 20.000000000000000, 0.25000000000000000, 0.0 },
+  { 3.7494538480790194e-31, 20.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2514356342425337e-27, 20.000000000000000, 0.75000000000000000, 0.0 },
+  { 3.9668359858190197e-25, 20.000000000000000, 1.0000000000000000, 0.0 },
+  { 3.4637832909868234e-23, 20.000000000000000, 1.2500000000000000, 0.0 },
+  { 1.3388331839683472e-21, 20.000000000000000, 1.5000000000000000, 0.0 },
+  { 2.9502376732679751e-20, 20.000000000000000, 1.7500000000000000, 0.0 },
+  { 4.3105605761095479e-19, 20.000000000000000, 2.0000000000000000, 0.0 },
+  { 4.6032451406433059e-18, 20.000000000000000, 2.2500000000000000, 0.0 },
+  { 3.8400317244170310e-17, 20.000000000000000, 2.5000000000000000, 0.0 },
+  { 2.6239115263043263e-16, 20.000000000000000, 2.7500000000000000, 0.0 },
+  { 1.5209660019426689e-15, 20.000000000000000, 3.0000000000000000, 0.0 },
+  { 7.6806450728249953e-15, 20.000000000000000, 3.2500000000000000, 0.0 },
+  { 3.4495528847222945e-14, 20.000000000000000, 3.5000000000000000, 0.0 },
+  { 1.4006589294850677e-13, 20.000000000000000, 3.7500000000000000, 0.0 },
+  { 5.2100734221993054e-13, 20.000000000000000, 4.0000000000000000, 0.0 },
+  { 1.7946903269488168e-12, 20.000000000000000, 4.2500000000000000, 0.0 },
+  { 5.7763830562279699e-12, 20.000000000000000, 4.5000000000000000, 0.0 },
+  { 1.7502433074548735e-11, 20.000000000000000, 4.7500000000000000, 0.0 },
+  { 5.0242393579718066e-11, 20.000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=20.000000000000000.
-template<typename Tp>
-  void
-  test009()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data009)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data009[i].nu), Tp(data009[i].x));
-       const Tp f0 = data009[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler015 = 1.0000000000000008e-12;
 //  cyl_bessel_i
 
 // Test data for nu=0.0000000000000000.
-testcase_cyl_bessel_i<double> data010[] = {
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
-  { 27.239871823604439, 0.0000000000000000, 5.0000000000000000 },
-  { 2815.7166284662558, 0.0000000000000000, 10.000000000000000 },
-  { 339649.37329791381, 0.0000000000000000, 15.000000000000000 },
-  { 43558282.559553474, 0.0000000000000000, 20.000000000000000 },
-  { 5774560606.4663124, 0.0000000000000000, 25.000000000000000 },
-  { 781672297823.97925, 0.0000000000000000, 30.000000000000000 },
-  { 107338818494514.42, 0.0000000000000000, 35.000000000000000 },
-  { 14894774793419918., 0.0000000000000000, 40.000000000000000 },
-  { 2.0834140751773164e+18, 0.0000000000000000, 45.000000000000000 },
-  { 2.9325537838493457e+20, 0.0000000000000000, 50.000000000000000 },
-  { 4.1487895607332160e+22, 0.0000000000000000, 55.000000000000000 },
-  { 5.8940770556098216e+24, 0.0000000000000000, 60.000000000000000 },
-  { 8.4030398456255596e+26, 0.0000000000000000, 65.000000000000000 },
-  { 1.2015889579125424e+29, 0.0000000000000000, 70.000000000000000 },
-  { 1.7226390780357976e+31, 0.0000000000000000, 75.000000000000000 },
-  { 2.4751784043341661e+33, 0.0000000000000000, 80.000000000000000 },
-  { 3.5634776304081403e+35, 0.0000000000000000, 85.000000000000000 },
-  { 5.1392383455086475e+37, 0.0000000000000000, 90.000000000000000 },
-  { 7.4233258618752072e+39, 0.0000000000000000, 95.000000000000000 },
-  { 1.0737517071310986e+42, 0.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 2.5841998320082313e+28 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.4067014886642843e-14
+// mean(f - f_GSL): -1.2242902567974868e+27
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_i<double>
+data016[21] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+  { 27.239871823604439, 0.0000000000000000, 5.0000000000000000, 0.0 },
+  { 2815.7166284662558, 0.0000000000000000, 10.000000000000000, 0.0 },
+  { 339649.37329791381, 0.0000000000000000, 15.000000000000000, 0.0 },
+  { 43558282.559553474, 0.0000000000000000, 20.000000000000000, 0.0 },
+  { 5774560606.4663124, 0.0000000000000000, 25.000000000000000, 0.0 },
+  { 781672297823.97925, 0.0000000000000000, 30.000000000000000, 0.0 },
+  { 107338818494514.42, 0.0000000000000000, 35.000000000000000, 0.0 },
+  { 14894774793419916., 0.0000000000000000, 40.000000000000000, 0.0 },
+  { 2.0834140751773164e+18, 0.0000000000000000, 45.000000000000000, 0.0 },
+  { 2.9325537838493457e+20, 0.0000000000000000, 50.000000000000000, 0.0 },
+  { 4.1487895607332160e+22, 0.0000000000000000, 55.000000000000000, 0.0 },
+  { 5.8940770556098216e+24, 0.0000000000000000, 60.000000000000000, 0.0 },
+  { 8.4030398456255582e+26, 0.0000000000000000, 65.000000000000000, 0.0 },
+  { 1.2015889579125424e+29, 0.0000000000000000, 70.000000000000000, 0.0 },
+  { 1.7226390780357976e+31, 0.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.4751784043341661e+33, 0.0000000000000000, 80.000000000000000, 0.0 },
+  { 3.5634776304081403e+35, 0.0000000000000000, 85.000000000000000, 0.0 },
+  { 5.1392383455086475e+37, 0.0000000000000000, 90.000000000000000, 0.0 },
+  { 7.4233258618752072e+39, 0.0000000000000000, 95.000000000000000, 0.0 },
+  { 1.0737517071310986e+42, 0.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.0000000000000000.
-template<typename Tp>
-  void
-  test010()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data010)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data010[i].nu), Tp(data010[i].x));
-       const Tp f0 = data010[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-  }
+const double toler016 = 2.5000000000000015e-12;
 
 // Test data for nu=0.33333333333333331.
-testcase_cyl_bessel_i<double> data011[] = {
-  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000 },
-  { 26.897553069268362, 0.33333333333333331, 5.0000000000000000 },
-  { 2799.2396097056790, 0.33333333333333331, 10.000000000000000 },
-  { 338348.63146593666, 0.33333333333333331, 15.000000000000000 },
-  { 43434263.927938424, 0.33333333333333331, 20.000000000000000 },
-  { 5761474759.6213636, 0.33333333333333331, 25.000000000000000 },
-  { 780201111830.30237, 0.33333333333333331, 30.000000000000000 },
-  { 107166066959051.91, 0.33333333333333331, 35.000000000000000 },
-  { 14873836574083764., 0.33333333333333331, 40.000000000000000 },
-  { 2.0808143020217085e+18, 0.33333333333333331, 45.000000000000000 },
-  { 2.9292639365644226e+20, 0.33333333333333331, 50.000000000000000 },
-  { 4.1445621624120489e+22, 0.33333333333333331, 55.000000000000000 },
-  { 5.8885758374365916e+24, 0.33333333333333331, 60.000000000000000 },
-  { 8.3958047021083955e+26, 0.33333333333333331, 65.000000000000000 },
-  { 1.2006287819446431e+29, 0.33333333333333331, 70.000000000000000 },
-  { 1.7213548977150022e+31, 0.33333333333333331, 75.000000000000000 },
-  { 2.4734492458444449e+33, 0.33333333333333331, 80.000000000000000 },
-  { 3.5611354547857122e+35, 0.33333333333333331, 85.000000000000000 },
-  { 5.1360491295551848e+37, 0.33333333333333331, 90.000000000000000 },
-  { 7.4189629097600431e+39, 0.33333333333333331, 95.000000000000000 },
-  { 1.0731523308358370e+42, 0.33333333333333331, 100.00000000000000 },
+// max(|f - f_GSL|): 1.0986717848657750e+28 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.2017640663876795e-14
+// mean(f - f_GSL): -5.2068252642007974e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_i<double>
+data017[21] =
+{
+  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000, 0.0 },
+  { 26.897553069268362, 0.33333333333333331, 5.0000000000000000, 0.0 },
+  { 2799.2396097056790, 0.33333333333333331, 10.000000000000000, 0.0 },
+  { 338348.63146593666, 0.33333333333333331, 15.000000000000000, 0.0 },
+  { 43434263.927938424, 0.33333333333333331, 20.000000000000000, 0.0 },
+  { 5761474759.6213636, 0.33333333333333331, 25.000000000000000, 0.0 },
+  { 780201111830.30237, 0.33333333333333331, 30.000000000000000, 0.0 },
+  { 107166066959051.91, 0.33333333333333331, 35.000000000000000, 0.0 },
+  { 14873836574083762., 0.33333333333333331, 40.000000000000000, 0.0 },
+  { 2.0808143020217085e+18, 0.33333333333333331, 45.000000000000000, 0.0 },
+  { 2.9292639365644226e+20, 0.33333333333333331, 50.000000000000000, 0.0 },
+  { 4.1445621624120489e+22, 0.33333333333333331, 55.000000000000000, 0.0 },
+  { 5.8885758374365916e+24, 0.33333333333333331, 60.000000000000000, 0.0 },
+  { 8.3958047021083941e+26, 0.33333333333333331, 65.000000000000000, 0.0 },
+  { 1.2006287819446431e+29, 0.33333333333333331, 70.000000000000000, 0.0 },
+  { 1.7213548977150022e+31, 0.33333333333333331, 75.000000000000000, 0.0 },
+  { 2.4734492458444449e+33, 0.33333333333333331, 80.000000000000000, 0.0 },
+  { 3.5611354547857122e+35, 0.33333333333333331, 85.000000000000000, 0.0 },
+  { 5.1360491295551848e+37, 0.33333333333333331, 90.000000000000000, 0.0 },
+  { 7.4189629097600431e+39, 0.33333333333333331, 95.000000000000000, 0.0 },
+  { 1.0731523308358370e+42, 0.33333333333333331, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.33333333333333331.
-template<typename Tp>
-  void
-  test011()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data011)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data011[i].nu), Tp(data011[i].x));
-       const Tp f0 = data011[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-  }
+const double toler017 = 1.0000000000000008e-12;
 
 // Test data for nu=0.50000000000000000.
-testcase_cyl_bessel_i<double> data012[] = {
-  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
-  { 26.477547497559065, 0.50000000000000000, 5.0000000000000000 },
-  { 2778.7846038745711, 0.50000000000000000, 10.000000000000000 },
-  { 336729.88718706399, 0.50000000000000000, 15.000000000000000 },
-  { 43279746.272428922, 0.50000000000000000, 20.000000000000000 },
-  { 5745159748.3464680, 0.50000000000000000, 25.000000000000000 },
-  { 778366068840.44580, 0.50000000000000000, 30.000000000000000 },
-  { 106950522408567.66, 0.50000000000000000, 35.000000000000000 },
-  { 14847705549021962., 0.50000000000000000, 40.000000000000000 },
-  { 2.0775691824625661e+18, 0.50000000000000000, 45.000000000000000 },
-  { 2.9251568529912984e+20, 0.50000000000000000, 50.000000000000000 },
-  { 4.1392840094781220e+22, 0.50000000000000000, 55.000000000000000 },
-  { 5.8817065760751945e+24, 0.50000000000000000, 60.000000000000000 },
-  { 8.3867695787277258e+26, 0.50000000000000000, 65.000000000000000 },
-  { 1.1994296461653203e+29, 0.50000000000000000, 70.000000000000000 },
-  { 1.7197510246063334e+31, 0.50000000000000000, 75.000000000000000 },
-  { 2.4712895036230794e+33, 0.50000000000000000, 80.000000000000000 },
-  { 3.5582099086757769e+35, 0.50000000000000000, 85.000000000000000 },
-  { 5.1320654031231128e+37, 0.50000000000000000, 90.000000000000000 },
-  { 7.4135128383495239e+39, 0.50000000000000000, 95.000000000000000 },
-  { 1.0724035825423179e+42, 0.50000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 7.1181552258909366e+27 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.2230293310085236e-14
+// mean(f - f_GSL): -3.3462733503919608e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_i<double>
+data018[21] =
+{
+  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 26.477547497559065, 0.50000000000000000, 5.0000000000000000, 0.0 },
+  { 2778.7846038745711, 0.50000000000000000, 10.000000000000000, 0.0 },
+  { 336729.88718706399, 0.50000000000000000, 15.000000000000000, 0.0 },
+  { 43279746.272428922, 0.50000000000000000, 20.000000000000000, 0.0 },
+  { 5745159748.3464680, 0.50000000000000000, 25.000000000000000, 0.0 },
+  { 778366068840.44580, 0.50000000000000000, 30.000000000000000, 0.0 },
+  { 106950522408567.66, 0.50000000000000000, 35.000000000000000, 0.0 },
+  { 14847705549021960., 0.50000000000000000, 40.000000000000000, 0.0 },
+  { 2.0775691824625661e+18, 0.50000000000000000, 45.000000000000000, 0.0 },
+  { 2.9251568529912984e+20, 0.50000000000000000, 50.000000000000000, 0.0 },
+  { 4.1392840094781220e+22, 0.50000000000000000, 55.000000000000000, 0.0 },
+  { 5.8817065760751945e+24, 0.50000000000000000, 60.000000000000000, 0.0 },
+  { 8.3867695787277245e+26, 0.50000000000000000, 65.000000000000000, 0.0 },
+  { 1.1994296461653203e+29, 0.50000000000000000, 70.000000000000000, 0.0 },
+  { 1.7197510246063334e+31, 0.50000000000000000, 75.000000000000000, 0.0 },
+  { 2.4712895036230794e+33, 0.50000000000000000, 80.000000000000000, 0.0 },
+  { 3.5582099086757769e+35, 0.50000000000000000, 85.000000000000000, 0.0 },
+  { 5.1320654031231128e+37, 0.50000000000000000, 90.000000000000000, 0.0 },
+  { 7.4135128383495239e+39, 0.50000000000000000, 95.000000000000000, 0.0 },
+  { 1.0724035825423179e+42, 0.50000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.50000000000000000.
-template<typename Tp>
-  void
-  test012()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data012)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data012[i].nu), Tp(data012[i].x));
-       const Tp f0 = data012[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-  }
+const double toler018 = 1.0000000000000008e-12;
 
 // Test data for nu=0.66666666666666663.
-testcase_cyl_bessel_i<double> data013[] = {
-  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000 },
-  { 25.902310583215122, 0.66666666666666663, 5.0000000000000000 },
-  { 2750.4090423459315, 0.66666666666666663, 10.000000000000000 },
-  { 334476.98138574377, 0.66666666666666663, 15.000000000000000 },
-  { 43064361.686912313, 0.66666666666666663, 20.000000000000000 },
-  { 5722397441.9603882, 0.66666666666666663, 25.000000000000000 },
-  { 775804343498.02661, 0.66666666666666663, 30.000000000000000 },
-  { 106649495512800.88, 0.66666666666666663, 35.000000000000000 },
-  { 14811199896983756., 0.66666666666666663, 40.000000000000000 },
-  { 2.0730345814356961e+18, 0.66666666666666663, 45.000000000000000 },
-  { 2.9194166755257467e+20, 0.66666666666666663, 50.000000000000000 },
-  { 4.1319059569935374e+22, 0.66666666666666663, 55.000000000000000 },
-  { 5.8721031476386222e+24, 0.66666666666666663, 60.000000000000000 },
-  { 8.3741368248217844e+26, 0.66666666666666663, 65.000000000000000 },
-  { 1.1977528777008688e+29, 0.66666666666666663, 70.000000000000000 },
-  { 1.7175081240014333e+31, 0.66666666666666663, 75.000000000000000 },
-  { 2.4682690458513916e+33, 0.66666666666666663, 80.000000000000000 },
-  { 3.5541181975850724e+35, 0.66666666666666663, 85.000000000000000 },
-  { 5.1264933963228892e+37, 0.66666666666666663, 90.000000000000000 },
-  { 7.4058894880134064e+39, 0.66666666666666663, 95.000000000000000 },
-  { 1.0713562154788124e+42, 0.66666666666666663, 100.00000000000000 },
+// max(|f - f_GSL|): 4.6422751473201760e+27 at index 20
+// max(|f - f_GSL| / |f_GSL|): 8.8432218147527708e-15
+// mean(f - f_GSL): -2.2367290021744526e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_i<double>
+data019[21] =
+{
+  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000, 0.0 },
+  { 25.902310583215122, 0.66666666666666663, 5.0000000000000000, 0.0 },
+  { 2750.4090423459315, 0.66666666666666663, 10.000000000000000, 0.0 },
+  { 334476.98138574377, 0.66666666666666663, 15.000000000000000, 0.0 },
+  { 43064361.686912313, 0.66666666666666663, 20.000000000000000, 0.0 },
+  { 5722397441.9603882, 0.66666666666666663, 25.000000000000000, 0.0 },
+  { 775804343498.02661, 0.66666666666666663, 30.000000000000000, 0.0 },
+  { 106649495512800.88, 0.66666666666666663, 35.000000000000000, 0.0 },
+  { 14811199896983754., 0.66666666666666663, 40.000000000000000, 0.0 },
+  { 2.0730345814356961e+18, 0.66666666666666663, 45.000000000000000, 0.0 },
+  { 2.9194166755257467e+20, 0.66666666666666663, 50.000000000000000, 0.0 },
+  { 4.1319059569935374e+22, 0.66666666666666663, 55.000000000000000, 0.0 },
+  { 5.8721031476386222e+24, 0.66666666666666663, 60.000000000000000, 0.0 },
+  { 8.3741368248217830e+26, 0.66666666666666663, 65.000000000000000, 0.0 },
+  { 1.1977528777008688e+29, 0.66666666666666663, 70.000000000000000, 0.0 },
+  { 1.7175081240014333e+31, 0.66666666666666663, 75.000000000000000, 0.0 },
+  { 2.4682690458513916e+33, 0.66666666666666663, 80.000000000000000, 0.0 },
+  { 3.5541181975850724e+35, 0.66666666666666663, 85.000000000000000, 0.0 },
+  { 5.1264933963228892e+37, 0.66666666666666663, 90.000000000000000, 0.0 },
+  { 7.4058894880134064e+39, 0.66666666666666663, 95.000000000000000, 0.0 },
+  { 1.0713562154788124e+42, 0.66666666666666663, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.66666666666666663.
-template<typename Tp>
-  void
-  test013()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data013)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data013[i].nu), Tp(data013[i].x));
-       const Tp f0 = data013[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-  }
+const double toler019 = 5.0000000000000039e-13;
 
 // Test data for nu=1.0000000000000000.
-testcase_cyl_bessel_i<double> data014[] = {
-  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000 },
-  { 24.335642142450524, 1.0000000000000000, 5.0000000000000000 },
-  { 2670.9883037012560, 1.0000000000000000, 10.000000000000000 },
-  { 328124.92197020649, 1.0000000000000000, 15.000000000000000 },
-  { 42454973.385127783, 1.0000000000000000, 20.000000000000000 },
-  { 5657865129.8787022, 1.0000000000000000, 25.000000000000000 },
-  { 768532038938.95667, 1.0000000000000000, 30.000000000000000 },
-  { 105794126051896.17, 1.0000000000000000, 35.000000000000000 },
-  { 14707396163259354., 1.0000000000000000, 40.000000000000000 },
-  { 2.0601334620815780e+18, 1.0000000000000000, 45.000000000000000 },
-  { 2.9030785901035638e+20, 1.0000000000000000, 50.000000000000000 },
-  { 4.1108986452992812e+22, 1.0000000000000000, 55.000000000000000 },
-  { 5.8447515883904527e+24, 1.0000000000000000, 60.000000000000000 },
-  { 8.3381485471501302e+26, 1.0000000000000000, 65.000000000000000 },
-  { 1.1929750788892366e+29, 1.0000000000000000, 70.000000000000000 },
-  { 1.7111160152965382e+31, 1.0000000000000000, 75.000000000000000 },
-  { 2.4596595795675343e+33, 1.0000000000000000, 80.000000000000000 },
-  { 3.5424536064404024e+35, 1.0000000000000000, 85.000000000000000 },
-  { 5.1106068152566129e+37, 1.0000000000000000, 90.000000000000000 },
-  { 7.3841518091360182e+39, 1.0000000000000000, 95.000000000000000 },
-  { 1.0683693903381569e+42, 1.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 5.4159876718735387e+27 at index 20
+// max(|f - f_GSL| / |f_GSL|): 7.0819761463168391e-15
+// mean(f - f_GSL): 2.5933470782682662e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_i<double>
+data020[21] =
+{
+  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000, 0.0 },
+  { 24.335642142450524, 1.0000000000000000, 5.0000000000000000, 0.0 },
+  { 2670.9883037012560, 1.0000000000000000, 10.000000000000000, 0.0 },
+  { 328124.92197020649, 1.0000000000000000, 15.000000000000000, 0.0 },
+  { 42454973.385127783, 1.0000000000000000, 20.000000000000000, 0.0 },
+  { 5657865129.8787022, 1.0000000000000000, 25.000000000000000, 0.0 },
+  { 768532038938.95667, 1.0000000000000000, 30.000000000000000, 0.0 },
+  { 105794126051896.17, 1.0000000000000000, 35.000000000000000, 0.0 },
+  { 14707396163259352., 1.0000000000000000, 40.000000000000000, 0.0 },
+  { 2.0601334620815780e+18, 1.0000000000000000, 45.000000000000000, 0.0 },
+  { 2.9030785901035638e+20, 1.0000000000000000, 50.000000000000000, 0.0 },
+  { 4.1108986452992812e+22, 1.0000000000000000, 55.000000000000000, 0.0 },
+  { 5.8447515883904527e+24, 1.0000000000000000, 60.000000000000000, 0.0 },
+  { 8.3381485471501288e+26, 1.0000000000000000, 65.000000000000000, 0.0 },
+  { 1.1929750788892366e+29, 1.0000000000000000, 70.000000000000000, 0.0 },
+  { 1.7111160152965382e+31, 1.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.4596595795675343e+33, 1.0000000000000000, 80.000000000000000, 0.0 },
+  { 3.5424536064404024e+35, 1.0000000000000000, 85.000000000000000, 0.0 },
+  { 5.1106068152566129e+37, 1.0000000000000000, 90.000000000000000, 0.0 },
+  { 7.3841518091360182e+39, 1.0000000000000000, 95.000000000000000, 0.0 },
+  { 1.0683693903381569e+42, 1.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=1.0000000000000000.
-template<typename Tp>
-  void
-  test014()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data014)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data014[i].nu), Tp(data014[i].x));
-       const Tp f0 = data014[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-  }
+const double toler020 = 5.0000000000000039e-13;
 
 // Test data for nu=2.0000000000000000.
-testcase_cyl_bessel_i<double> data015[] = {
-  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000 },
-  { 17.505614966624233, 2.0000000000000000, 5.0000000000000000 },
-  { 2281.5189677260046, 2.0000000000000000, 10.000000000000000 },
-  { 295899.38370188628, 2.0000000000000000, 15.000000000000000 },
-  { 39312785.221040756, 2.0000000000000000, 20.000000000000000 },
-  { 5321931396.0760155, 2.0000000000000000, 25.000000000000000 },
-  { 730436828561.38013, 2.0000000000000000, 30.000000000000000 },
-  { 101293439862977.19, 2.0000000000000000, 35.000000000000000 },
-  { 14159404985256922., 2.0000000000000000, 40.000000000000000 },
-  { 1.9918525879736883e+18, 2.0000000000000000, 45.000000000000000 },
-  { 2.8164306402451938e+20, 2.0000000000000000, 50.000000000000000 },
-  { 3.9993023372677540e+22, 2.0000000000000000, 55.000000000000000 },
-  { 5.6992520026634433e+24, 2.0000000000000000, 60.000000000000000 },
-  { 8.1464814287900378e+26, 2.0000000000000000, 65.000000000000000 },
-  { 1.1675039556585663e+29, 2.0000000000000000, 70.000000000000000 },
-  { 1.6770093176278926e+31, 2.0000000000000000, 75.000000000000000 },
-  { 2.4136869148449879e+33, 2.0000000000000000, 80.000000000000000 },
-  { 3.4801257808448186e+35, 2.0000000000000000, 85.000000000000000 },
-  { 5.0256693051696307e+37, 2.0000000000000000, 90.000000000000000 },
-  { 7.2678700343145818e+39, 2.0000000000000000, 95.000000000000000 },
-  { 1.0523843193243042e+42, 2.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 6.1897001964269014e+27 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.0553248866140883e-14
+// mean(f - f_GSL): 2.9514880793266611e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_i<double>
+data021[21] =
+{
+  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 17.505614966624233, 2.0000000000000000, 5.0000000000000000, 0.0 },
+  { 2281.5189677260046, 2.0000000000000000, 10.000000000000000, 0.0 },
+  { 295899.38370188628, 2.0000000000000000, 15.000000000000000, 0.0 },
+  { 39312785.221040756, 2.0000000000000000, 20.000000000000000, 0.0 },
+  { 5321931396.0760155, 2.0000000000000000, 25.000000000000000, 0.0 },
+  { 730436828561.38013, 2.0000000000000000, 30.000000000000000, 0.0 },
+  { 101293439862977.19, 2.0000000000000000, 35.000000000000000, 0.0 },
+  { 14159404985256920., 2.0000000000000000, 40.000000000000000, 0.0 },
+  { 1.9918525879736883e+18, 2.0000000000000000, 45.000000000000000, 0.0 },
+  { 2.8164306402451938e+20, 2.0000000000000000, 50.000000000000000, 0.0 },
+  { 3.9993023372677540e+22, 2.0000000000000000, 55.000000000000000, 0.0 },
+  { 5.6992520026634433e+24, 2.0000000000000000, 60.000000000000000, 0.0 },
+  { 8.1464814287900364e+26, 2.0000000000000000, 65.000000000000000, 0.0 },
+  { 1.1675039556585663e+29, 2.0000000000000000, 70.000000000000000, 0.0 },
+  { 1.6770093176278926e+31, 2.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.4136869148449879e+33, 2.0000000000000000, 80.000000000000000, 0.0 },
+  { 3.4801257808448186e+35, 2.0000000000000000, 85.000000000000000, 0.0 },
+  { 5.0256693051696307e+37, 2.0000000000000000, 90.000000000000000, 0.0 },
+  { 7.2678700343145818e+39, 2.0000000000000000, 95.000000000000000, 0.0 },
+  { 1.0523843193243042e+42, 2.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=2.0000000000000000.
-template<typename Tp>
-  void
-  test015()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data015)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data015[i].nu), Tp(data015[i].x));
-       const Tp f0 = data015[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-  }
+const double toler021 = 1.0000000000000008e-12;
 
 // Test data for nu=5.0000000000000000.
-testcase_cyl_bessel_i<double> data016[] = {
-  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000 },
-  { 2.1579745473225476, 5.0000000000000000, 5.0000000000000000 },
-  { 777.18828640326012, 5.0000000000000000, 10.000000000000000 },
-  { 144572.01120063409, 5.0000000000000000, 15.000000000000000 },
-  { 23018392.213413671, 5.0000000000000000, 20.000000000000000 },
-  { 3472466208.7419176, 5.0000000000000000, 25.000000000000000 },
-  { 512151465476.93494, 5.0000000000000000, 30.000000000000000 },
-  { 74756743552251.547, 5.0000000000000000, 35.000000000000000 },
-  { 10858318337624280., 5.0000000000000000, 40.000000000000000 },
-  { 1.5736087399245911e+18, 5.0000000000000000, 45.000000000000000 },
-  { 2.2785483079112825e+20, 5.0000000000000000, 50.000000000000000 },
-  { 3.2989391052963687e+22, 5.0000000000000000, 55.000000000000000 },
-  { 4.7777652072561732e+24, 5.0000000000000000, 60.000000000000000 },
-  { 6.9232165147172657e+26, 5.0000000000000000, 65.000000000000000 },
-  { 1.0038643002095155e+29, 5.0000000000000000, 70.000000000000000 },
-  { 1.4566328222327073e+31, 5.0000000000000000, 75.000000000000000 },
-  { 2.1151488565944835e+33, 5.0000000000000000, 80.000000000000000 },
-  { 3.0735883450768239e+35, 5.0000000000000000, 85.000000000000000 },
-  { 4.4694790189230327e+37, 5.0000000000000000, 90.000000000000000 },
-  { 6.5037505570430995e+39, 5.0000000000000000, 95.000000000000000 },
-  { 9.4700938730355882e+41, 5.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 1.0831975343747077e+27 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.0289491375166011e-14
+// mean(f - f_GSL): -5.2041812077613416e+25
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_i<double>
+data022[21] =
+{
+  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000, 0.0 },
+  { 2.1579745473225476, 5.0000000000000000, 5.0000000000000000, 0.0 },
+  { 777.18828640326012, 5.0000000000000000, 10.000000000000000, 0.0 },
+  { 144572.01120063409, 5.0000000000000000, 15.000000000000000, 0.0 },
+  { 23018392.213413671, 5.0000000000000000, 20.000000000000000, 0.0 },
+  { 3472466208.7419176, 5.0000000000000000, 25.000000000000000, 0.0 },
+  { 512151465476.93494, 5.0000000000000000, 30.000000000000000, 0.0 },
+  { 74756743552251.547, 5.0000000000000000, 35.000000000000000, 0.0 },
+  { 10858318337624278., 5.0000000000000000, 40.000000000000000, 0.0 },
+  { 1.5736087399245911e+18, 5.0000000000000000, 45.000000000000000, 0.0 },
+  { 2.2785483079112825e+20, 5.0000000000000000, 50.000000000000000, 0.0 },
+  { 3.2989391052963687e+22, 5.0000000000000000, 55.000000000000000, 0.0 },
+  { 4.7777652072561732e+24, 5.0000000000000000, 60.000000000000000, 0.0 },
+  { 6.9232165147172657e+26, 5.0000000000000000, 65.000000000000000, 0.0 },
+  { 1.0038643002095155e+29, 5.0000000000000000, 70.000000000000000, 0.0 },
+  { 1.4566328222327073e+31, 5.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.1151488565944835e+33, 5.0000000000000000, 80.000000000000000, 0.0 },
+  { 3.0735883450768239e+35, 5.0000000000000000, 85.000000000000000, 0.0 },
+  { 4.4694790189230327e+37, 5.0000000000000000, 90.000000000000000, 0.0 },
+  { 6.5037505570430995e+39, 5.0000000000000000, 95.000000000000000, 0.0 },
+  { 9.4700938730355882e+41, 5.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=5.0000000000000000.
-template<typename Tp>
-  void
-  test016()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data016)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data016[i].nu), Tp(data016[i].x));
-       const Tp f0 = data016[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler022 = 1.0000000000000008e-12;
 
 // Test data for nu=10.000000000000000.
-testcase_cyl_bessel_i<double> data017[] = {
-  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000 },
-  { 0.0045800444191760525, 10.000000000000000, 5.0000000000000000 },
-  { 21.891706163723381, 10.000000000000000, 10.000000000000000 },
-  { 12267.475049806462, 10.000000000000000, 15.000000000000000 },
-  { 3540200.2090195213, 10.000000000000000, 20.000000000000000 },
-  { 771298871.17072666, 10.000000000000000, 25.000000000000000 },
-  { 145831809975.96710, 10.000000000000000, 30.000000000000000 },
-  { 25449470018534.777, 10.000000000000000, 35.000000000000000 },
-  { 4228469210516757.5, 10.000000000000000, 40.000000000000000 },
-  { 6.8049404557505165e+17, 10.000000000000000, 45.000000000000000 },
-  { 1.0715971594776370e+20, 10.000000000000000, 50.000000000000000 },
-  { 1.6618215752886714e+22, 10.000000000000000, 55.000000000000000 },
-  { 2.5486246072566784e+24, 10.000000000000000, 60.000000000000000 },
-  { 3.8764628702155481e+26, 10.000000000000000, 65.000000000000000 },
-  { 5.8592538145409686e+28, 10.000000000000000, 70.000000000000000 },
-  { 8.8135370711317444e+30, 10.000000000000000, 75.000000000000000 },
-  { 1.3207418268325279e+33, 10.000000000000000, 80.000000000000000 },
-  { 1.9732791360862190e+35, 10.000000000000000, 85.000000000000000 },
-  { 2.9411893748384672e+37, 10.000000000000000, 90.000000000000000 },
-  { 4.3754494922439984e+39, 10.000000000000000, 95.000000000000000 },
-  { 6.4989755247201446e+41, 10.000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 1.5474250491067253e+26 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.2009151331790140e-14
+// mean(f - f_GSL): 7.4845081675400805e+24
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_i<double>
+data023[21] =
+{
+  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000, 0.0 },
+  { 0.0045800444191760525, 10.000000000000000, 5.0000000000000000, 0.0 },
+  { 21.891706163723381, 10.000000000000000, 10.000000000000000, 0.0 },
+  { 12267.475049806462, 10.000000000000000, 15.000000000000000, 0.0 },
+  { 3540200.2090195213, 10.000000000000000, 20.000000000000000, 0.0 },
+  { 771298871.17072666, 10.000000000000000, 25.000000000000000, 0.0 },
+  { 145831809975.96710, 10.000000000000000, 30.000000000000000, 0.0 },
+  { 25449470018534.777, 10.000000000000000, 35.000000000000000, 0.0 },
+  { 4228469210516757.0, 10.000000000000000, 40.000000000000000, 0.0 },
+  { 6.8049404557505165e+17, 10.000000000000000, 45.000000000000000, 0.0 },
+  { 1.0715971594776370e+20, 10.000000000000000, 50.000000000000000, 0.0 },
+  { 1.6618215752886714e+22, 10.000000000000000, 55.000000000000000, 0.0 },
+  { 2.5486246072566784e+24, 10.000000000000000, 60.000000000000000, 0.0 },
+  { 3.8764628702155475e+26, 10.000000000000000, 65.000000000000000, 0.0 },
+  { 5.8592538145409686e+28, 10.000000000000000, 70.000000000000000, 0.0 },
+  { 8.8135370711317444e+30, 10.000000000000000, 75.000000000000000, 0.0 },
+  { 1.3207418268325279e+33, 10.000000000000000, 80.000000000000000, 0.0 },
+  { 1.9732791360862190e+35, 10.000000000000000, 85.000000000000000, 0.0 },
+  { 2.9411893748384672e+37, 10.000000000000000, 90.000000000000000, 0.0 },
+  { 4.3754494922439984e+39, 10.000000000000000, 95.000000000000000, 0.0 },
+  { 6.4989755247201446e+41, 10.000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=10.000000000000000.
-template<typename Tp>
-  void
-  test017()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data017)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data017[i].nu), Tp(data017[i].x));
-       const Tp f0 = data017[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler023 = 1.0000000000000008e-12;
 
 // Test data for nu=20.000000000000000.
-testcase_cyl_bessel_i<double> data018[] = {
-  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000 },
-  { 5.0242393579718066e-11, 20.000000000000000, 5.0000000000000000 },
-  { 0.00012507997356449481, 20.000000000000000, 10.000000000000000 },
-  { 1.6470152535015836, 20.000000000000000, 15.000000000000000 },
-  { 3188.7503288536154, 20.000000000000000, 20.000000000000000 },
-  { 2449840.5422952301, 20.000000000000000, 25.000000000000000 },
-  { 1126985104.4483771, 20.000000000000000, 30.000000000000000 },
-  { 379617876611.88580, 20.000000000000000, 35.000000000000000 },
-  { 104459633129479.89, 20.000000000000000, 40.000000000000000 },
-  { 25039579987216524., 20.000000000000000, 45.000000000000000 },
-  { 5.4420084027529984e+18, 20.000000000000000, 50.000000000000000 },
-  { 1.1007498584335495e+21, 20.000000000000000, 55.000000000000000 },
-  { 2.1091734863057236e+23, 20.000000000000000, 60.000000000000000 },
-  { 3.8763618091286899e+25, 20.000000000000000, 65.000000000000000 },
-  { 6.8946130527930870e+27, 20.000000000000000, 70.000000000000000 },
-  { 1.1946319948836447e+30, 20.000000000000000, 75.000000000000000 },
-  { 2.0265314377577587e+32, 20.000000000000000, 80.000000000000000 },
-  { 3.3784665214179985e+34, 20.000000000000000, 85.000000000000000 },
-  { 5.5516089411796646e+36, 20.000000000000000, 90.000000000000000 },
-  { 9.0129310795305151e+38, 20.000000000000000, 95.000000000000000 },
-  { 1.4483461256427176e+41, 20.000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 1.9342813113834067e+25 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.5819230756119302e-14
+// mean(f - f_GSL): 1.0213821732843951e+24
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_i<double>
+data024[21] =
+{
+  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000, 0.0 },
+  { 5.0242393579718066e-11, 20.000000000000000, 5.0000000000000000, 0.0 },
+  { 0.00012507997356449481, 20.000000000000000, 10.000000000000000, 0.0 },
+  { 1.6470152535015836, 20.000000000000000, 15.000000000000000, 0.0 },
+  { 3188.7503288536154, 20.000000000000000, 20.000000000000000, 0.0 },
+  { 2449840.5422952301, 20.000000000000000, 25.000000000000000, 0.0 },
+  { 1126985104.4483771, 20.000000000000000, 30.000000000000000, 0.0 },
+  { 379617876611.88580, 20.000000000000000, 35.000000000000000, 0.0 },
+  { 104459633129479.88, 20.000000000000000, 40.000000000000000, 0.0 },
+  { 25039579987216524., 20.000000000000000, 45.000000000000000, 0.0 },
+  { 5.4420084027529984e+18, 20.000000000000000, 50.000000000000000, 0.0 },
+  { 1.1007498584335495e+21, 20.000000000000000, 55.000000000000000, 0.0 },
+  { 2.1091734863057236e+23, 20.000000000000000, 60.000000000000000, 0.0 },
+  { 3.8763618091286891e+25, 20.000000000000000, 65.000000000000000, 0.0 },
+  { 6.8946130527930870e+27, 20.000000000000000, 70.000000000000000, 0.0 },
+  { 1.1946319948836447e+30, 20.000000000000000, 75.000000000000000, 0.0 },
+  { 2.0265314377577587e+32, 20.000000000000000, 80.000000000000000, 0.0 },
+  { 3.3784665214179985e+34, 20.000000000000000, 85.000000000000000, 0.0 },
+  { 5.5516089411796646e+36, 20.000000000000000, 90.000000000000000, 0.0 },
+  { 9.0129310795305151e+38, 20.000000000000000, 95.000000000000000, 0.0 },
+  { 1.4483461256427176e+41, 20.000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=20.000000000000000.
-template<typename Tp>
-  void
-  test018()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data018)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data018[i].nu), Tp(data018[i].x));
-       const Tp f0 = data018[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler024 = 1.0000000000000008e-12;
 
 // Test data for nu=50.000000000000000.
-testcase_cyl_bessel_i<double> data019[] = {
-  { 0.0000000000000000, 50.000000000000000, 0.0000000000000000 },
-  { 2.9314696468108517e-45, 50.000000000000000, 5.0000000000000000 },
-  { 4.7568945607268442e-30, 50.000000000000000, 10.000000000000000 },
-  { 5.5468372730667069e-21, 50.000000000000000, 15.000000000000000 },
-  { 2.2551205757604056e-14, 50.000000000000000, 20.000000000000000 },
-  { 4.5344251866130257e-09, 50.000000000000000, 25.000000000000000 },
-  { 0.00014590106916468940, 50.000000000000000, 30.000000000000000 },
-  { 1.3965549457254882, 50.000000000000000, 35.000000000000000 },
-  { 5726.8656631289896, 50.000000000000000, 40.000000000000000 },
-  { 12672593.113027781, 50.000000000000000, 45.000000000000000 },
-  { 17650802430.016712, 50.000000000000000, 50.000000000000000 },
-  { 17220231607789.926, 50.000000000000000, 55.000000000000000 },
-  { 12704607933652176., 50.000000000000000, 60.000000000000000 },
-  { 7.4989491942193725e+18, 50.000000000000000, 65.000000000000000 },
-  { 3.6944034898904922e+21, 50.000000000000000, 70.000000000000000 },
-  { 1.5691634774370186e+24, 50.000000000000000, 75.000000000000000 },
-  { 5.8927749458163587e+26, 50.000000000000000, 80.000000000000000 },
-  { 1.9958849054749339e+29, 50.000000000000000, 85.000000000000000 },
-  { 6.1946050361781500e+31, 50.000000000000000, 90.000000000000000 },
-  { 1.7845429728697119e+34, 50.000000000000000, 95.000000000000000 },
-  { 4.8219580855940819e+36, 50.000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 4.4862481587261630e+22 at index 20
+// max(|f - f_GSL| / |f_GSL|): 6.0191728870880627e-14
+// mean(f - f_GSL): 2.1246678955085789e+21
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_i<double>
+data025[21] =
+{
+  { 0.0000000000000000, 50.000000000000000, 0.0000000000000000, 0.0 },
+  { 2.9314696468108517e-45, 50.000000000000000, 5.0000000000000000, 0.0 },
+  { 4.7568945607268435e-30, 50.000000000000000, 10.000000000000000, 0.0 },
+  { 5.5468372730667069e-21, 50.000000000000000, 15.000000000000000, 0.0 },
+  { 2.2551205757604056e-14, 50.000000000000000, 20.000000000000000, 0.0 },
+  { 4.5344251866130257e-09, 50.000000000000000, 25.000000000000000, 0.0 },
+  { 0.00014590106916468940, 50.000000000000000, 30.000000000000000, 0.0 },
+  { 1.3965549457254882, 50.000000000000000, 35.000000000000000, 0.0 },
+  { 5726.8656631289887, 50.000000000000000, 40.000000000000000, 0.0 },
+  { 12672593.113027781, 50.000000000000000, 45.000000000000000, 0.0 },
+  { 17650802430.016712, 50.000000000000000, 50.000000000000000, 0.0 },
+  { 17220231607789.926, 50.000000000000000, 55.000000000000000, 0.0 },
+  { 12704607933652176., 50.000000000000000, 60.000000000000000, 0.0 },
+  { 7.4989491942193715e+18, 50.000000000000000, 65.000000000000000, 0.0 },
+  { 3.6944034898904922e+21, 50.000000000000000, 70.000000000000000, 0.0 },
+  { 1.5691634774370186e+24, 50.000000000000000, 75.000000000000000, 0.0 },
+  { 5.8927749458163587e+26, 50.000000000000000, 80.000000000000000, 0.0 },
+  { 1.9958849054749339e+29, 50.000000000000000, 85.000000000000000, 0.0 },
+  { 6.1946050361781500e+31, 50.000000000000000, 90.000000000000000, 0.0 },
+  { 1.7845429728697119e+34, 50.000000000000000, 95.000000000000000, 0.0 },
+  { 4.8219580855940819e+36, 50.000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=50.000000000000000.
-template<typename Tp>
-  void
-  test019()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data019)
-                          / sizeof(testcase_cyl_bessel_i<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data019[i].nu), Tp(data019[i].x));
-       const Tp f0 = data019[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
-  }
+const double toler025 = 5.0000000000000029e-12;
 
 // Test data for nu=100.00000000000000.
-testcase_cyl_bessel_i<double> data020[] = {
-  { 0.0000000000000000, 100.00000000000000, 0.0000000000000000 },
-  { 7.0935514885313123e-119, 100.00000000000000, 5.0000000000000000 },
-  { 1.0823442017492018e-88, 100.00000000000000, 10.000000000000000 },
-  { 5.9887888536468904e-71, 100.00000000000000, 15.000000000000000 },
-  { 2.8703193216428771e-58, 100.00000000000000, 20.000000000000000 },
-  { 2.4426896913122370e-48, 100.00000000000000, 25.000000000000000 },
-  { 3.9476420053334271e-40, 100.00000000000000, 30.000000000000000 },
-  { 4.2836596180818780e-33, 100.00000000000000, 35.000000000000000 },
-  { 6.6249380222596129e-27, 100.00000000000000, 40.000000000000000 },
-  { 2.3702587262788900e-21, 100.00000000000000, 45.000000000000000 },
-  { 2.7278879470966917e-16, 100.00000000000000, 50.000000000000000 },
-  { 1.2763258878228082e-11, 100.00000000000000, 55.000000000000000 },
-  { 2.8832770906491972e-07, 100.00000000000000, 60.000000000000000 },
-  { 0.0035805902717061227, 100.00000000000000, 65.000000000000000 },
-  { 27.017219102595387, 100.00000000000000, 70.000000000000000 },
-  { 134001.44891209516, 100.00000000000000, 75.000000000000000 },
-  { 465194832.85060996, 100.00000000000000, 80.000000000000000 },
-  { 1189280653119.4814, 100.00000000000000, 85.000000000000000 },
-  { 2334119331258728.0, 100.00000000000000, 90.000000000000000 },
-  { 3.6399223078502436e+18, 100.00000000000000, 95.000000000000000 },
-  { 4.6415349416162005e+21, 100.00000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 185597952.00000000 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.8278213985558577e-13
+// mean(f - f_GSL): 8855366.2060860656
+// variance(f - f_GSL): 4.2527168883984777e+19
+// stddev(f - f_GSL): 6521285830.5693655
+const testcase_cyl_bessel_i<double>
+data026[21] =
+{
+  { 0.0000000000000000, 100.00000000000000, 0.0000000000000000, 0.0 },
+  { 7.0935514885313123e-119, 100.00000000000000, 5.0000000000000000, 0.0 },
+  { 1.0823442017492015e-88, 100.00000000000000, 10.000000000000000, 0.0 },
+  { 5.9887888536468904e-71, 100.00000000000000, 15.000000000000000, 0.0 },
+  { 2.8703193216428771e-58, 100.00000000000000, 20.000000000000000, 0.0 },
+  { 2.4426896913122370e-48, 100.00000000000000, 25.000000000000000, 0.0 },
+  { 3.9476420053334271e-40, 100.00000000000000, 30.000000000000000, 0.0 },
+  { 4.2836596180818780e-33, 100.00000000000000, 35.000000000000000, 0.0 },
+  { 6.6249380222596129e-27, 100.00000000000000, 40.000000000000000, 0.0 },
+  { 2.3702587262788900e-21, 100.00000000000000, 45.000000000000000, 0.0 },
+  { 2.7278879470966917e-16, 100.00000000000000, 50.000000000000000, 0.0 },
+  { 1.2763258878228082e-11, 100.00000000000000, 55.000000000000000, 0.0 },
+  { 2.8832770906491972e-07, 100.00000000000000, 60.000000000000000, 0.0 },
+  { 0.0035805902717061223, 100.00000000000000, 65.000000000000000, 0.0 },
+  { 27.017219102595387, 100.00000000000000, 70.000000000000000, 0.0 },
+  { 134001.44891209516, 100.00000000000000, 75.000000000000000, 0.0 },
+  { 465194832.85060996, 100.00000000000000, 80.000000000000000, 0.0 },
+  { 1189280653119.4814, 100.00000000000000, 85.000000000000000, 0.0 },
+  { 2334119331258728.0, 100.00000000000000, 90.000000000000000, 0.0 },
+  { 3.6399223078502436e+18, 100.00000000000000, 95.000000000000000, 0.0 },
+  { 4.6415349416162005e+21, 100.00000000000000, 100.00000000000000, 0.0 },
 };
+const double toler026 = 2.5000000000000014e-11;
 
-// Test function for nu=100.00000000000000.
-template<typename Tp>
+template<typename Ret, unsigned int Num>
   void
-  test020()
+  test(const testcase_cyl_bessel_i<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data020)
-                          / sizeof(testcase_cyl_bessel_i<double>);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::tr1::cyl_bessel_i(Tp(data020[i].nu), Tp(data020[i].x));
-       const Tp f0 = data020[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::tr1::cyl_bessel_i(data[i].nu, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
       }
-    VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
+    VERIFY(max_abs_frac < toler);
   }
 
 int
 main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
-  test015<double>();
-  test016<double>();
-  test017<double>();
-  test018<double>();
-  test019<double>();
-  test020<double>();
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
+  test(data016, toler016);
+  test(data017, toler017);
+  test(data018, toler018);
+  test(data019, toler019);
+  test(data020, toler020);
+  test(data021, toler021);
+  test(data022, toler022);
+  test(data023, toler023);
+  test(data024, toler024);
+  test(data025, toler025);
+  test(data026, toler026);
   return 0;
 }
index da28a22..26f4dd3 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  cyl_bessel_j
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for nu=0.0000000000000000.
-testcase_cyl_bessel_j<double> data001[] = {
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
-  { 0.98443592929585266, 0.0000000000000000, 0.25000000000000000 },
-  { 0.93846980724081297, 0.0000000000000000, 0.50000000000000000 },
-  { 0.86424227516664853, 0.0000000000000000, 0.75000000000000000 },
-  { 0.76519768655796661, 0.0000000000000000, 1.0000000000000000 },
-  { 0.64590608527128535, 0.0000000000000000, 1.2500000000000000 },
-  { 0.51182767173591814, 0.0000000000000000, 1.5000000000000000 },
-  { 0.36903253018515075, 0.0000000000000000, 1.7500000000000000 },
-  { 0.22389077914123562, 0.0000000000000000, 2.0000000000000000 },
-  { 0.082749851288734022, 0.0000000000000000, 2.2500000000000000 },
-  { -0.048383776468197998, 0.0000000000000000, 2.5000000000000000 },
-  { -0.16414142780851368, 0.0000000000000000, 2.7500000000000000 },
-  { -0.26005195490193334, 0.0000000000000000, 3.0000000000000000 },
-  { -0.33275080217061132, 0.0000000000000000, 3.2500000000000000 },
-  { -0.38012773998726335, 0.0000000000000000, 3.5000000000000000 },
-  { -0.40140605493617426, 0.0000000000000000, 3.7500000000000000 },
-  { -0.39714980986384740, 0.0000000000000000, 4.0000000000000000 },
-  { -0.36919977029989554, 0.0000000000000000, 4.2500000000000000 },
-  { -0.32054250898512149, 0.0000000000000000, 4.5000000000000000 },
-  { -0.25512082749137405, 0.0000000000000000, 4.7500000000000000 },
-  { -0.17759677131433835, 0.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.0547118733938987e-14 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.0733293243042314e-14
+// mean(f - f_GSL): -2.4682636886755713e-15
+// variance(f - f_GSL): 3.4179114172015086e-31
+// stddev(f - f_GSL): 5.8462906335568952e-16
+const testcase_cyl_bessel_j<double>
+data007[21] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.98443592929585266, 0.0000000000000000, 0.25000000000000000, 0.0 },
+  { 0.93846980724081297, 0.0000000000000000, 0.50000000000000000, 0.0 },
+  { 0.86424227516664853, 0.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.76519768655796661, 0.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.64590608527128535, 0.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.51182767173591814, 0.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.36903253018515075, 0.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.22389077914123562, 0.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.082749851288734022, 0.0000000000000000, 2.2500000000000000, 0.0 },
+  { -0.048383776468197998, 0.0000000000000000, 2.5000000000000000, 0.0 },
+  { -0.16414142780851368, 0.0000000000000000, 2.7500000000000000, 0.0 },
+  { -0.26005195490193334, 0.0000000000000000, 3.0000000000000000, 0.0 },
+  { -0.33275080217061132, 0.0000000000000000, 3.2500000000000000, 0.0 },
+  { -0.38012773998726335, 0.0000000000000000, 3.5000000000000000, 0.0 },
+  { -0.40140605493617426, 0.0000000000000000, 3.7500000000000000, 0.0 },
+  { -0.39714980986384740, 0.0000000000000000, 4.0000000000000000, 0.0 },
+  { -0.36919977029989554, 0.0000000000000000, 4.2500000000000000, 0.0 },
+  { -0.32054250898512149, 0.0000000000000000, 4.5000000000000000, 0.0 },
+  { -0.25512082749137405, 0.0000000000000000, 4.7500000000000000, 0.0 },
+  { -0.17759677131433835, 0.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.0000000000000000.
-template<typename Tp>
-  void
-  test001()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data001)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data001[i].nu), Tp(data001[i].x));
-       const Tp f0 = data001[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler007 = 1.0000000000000008e-12;
 
 // Test data for nu=0.33333333333333331.
-testcase_cyl_bessel_j<double> data002[] = {
-  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000 },
-  { 0.55338359549647709, 0.33333333333333331, 0.25000000000000000 },
-  { 0.67283082949794537, 0.33333333333333331, 0.50000000000000000 },
-  { 0.72490863199379008, 0.33333333333333331, 0.75000000000000000 },
-  { 0.73087640216944760, 0.33333333333333331, 1.0000000000000000 },
-  { 0.69953374433894455, 0.33333333333333331, 1.2500000000000000 },
-  { 0.63713263706489176, 0.33333333333333331, 1.5000000000000000 },
-  { 0.54956352730788460, 0.33333333333333331, 1.7500000000000000 },
-  { 0.44293981814857586, 0.33333333333333331, 2.0000000000000000 },
-  { 0.32366988946292502, 0.33333333333333331, 2.2500000000000000 },
-  { 0.19832093341860796, 0.33333333333333331, 2.5000000000000000 },
-  { 0.073389637874297489, 0.33333333333333331, 2.7500000000000000 },
-  { -0.044963820940233351, 0.33333333333333331, 3.0000000000000000 },
-  { -0.15118395956666372, 0.33333333333333331, 3.2500000000000000 },
-  { -0.24056593952693625, 0.33333333333333331, 3.5000000000000000 },
-  { -0.30946094681921288, 0.33333333333333331, 3.7500000000000000 },
-  { -0.35542737345457609, 0.33333333333333331, 4.0000000000000000 },
-  { -0.37731852825457068, 0.33333333333333331, 4.2500000000000000 },
-  { -0.37530189159358079, 0.33333333333333331, 4.5000000000000000 },
-  { -0.35080916720916927, 0.33333333333333331, 4.7500000000000000 },
-  { -0.30642046380026405, 0.33333333333333331, 5.0000000000000000 },
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 4
+// max(|f - f_GSL| / |f_GSL|): 8.0807620553987087e-16
+// mean(f - f_GSL): 1.2423924323186276e-16
+// variance(f - f_GSL): 4.4388099670639150e-33
+// stddev(f - f_GSL): 6.6624394684409066e-17
+const testcase_cyl_bessel_j<double>
+data008[21] =
+{
+  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000, 0.0 },
+  { 0.55338359549647709, 0.33333333333333331, 0.25000000000000000, 0.0 },
+  { 0.67283082949794537, 0.33333333333333331, 0.50000000000000000, 0.0 },
+  { 0.72490863199379019, 0.33333333333333331, 0.75000000000000000, 0.0 },
+  { 0.73087640216944749, 0.33333333333333331, 1.0000000000000000, 0.0 },
+  { 0.69953374433894455, 0.33333333333333331, 1.2500000000000000, 0.0 },
+  { 0.63713263706489176, 0.33333333333333331, 1.5000000000000000, 0.0 },
+  { 0.54956352730788460, 0.33333333333333331, 1.7500000000000000, 0.0 },
+  { 0.44293981814857586, 0.33333333333333331, 2.0000000000000000, 0.0 },
+  { 0.32366988946292502, 0.33333333333333331, 2.2500000000000000, 0.0 },
+  { 0.19832093341860796, 0.33333333333333331, 2.5000000000000000, 0.0 },
+  { 0.073389637874297461, 0.33333333333333331, 2.7500000000000000, 0.0 },
+  { -0.044963820940233351, 0.33333333333333331, 3.0000000000000000, 0.0 },
+  { -0.15118395956666372, 0.33333333333333331, 3.2500000000000000, 0.0 },
+  { -0.24056593952693622, 0.33333333333333331, 3.5000000000000000, 0.0 },
+  { -0.30946094681921288, 0.33333333333333331, 3.7500000000000000, 0.0 },
+  { -0.35542737345457609, 0.33333333333333331, 4.0000000000000000, 0.0 },
+  { -0.37731852825457068, 0.33333333333333331, 4.2500000000000000, 0.0 },
+  { -0.37530189159358079, 0.33333333333333331, 4.5000000000000000, 0.0 },
+  { -0.35080916720916927, 0.33333333333333331, 4.7500000000000000, 0.0 },
+  { -0.30642046380026405, 0.33333333333333331, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.33333333333333331.
-template<typename Tp>
-  void
-  test002()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data002)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data002[i].nu), Tp(data002[i].x));
-       const Tp f0 = data002[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler008 = 2.5000000000000020e-13;
 
 // Test data for nu=0.50000000000000000.
-testcase_cyl_bessel_j<double> data003[] = {
-  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
-  { 0.39479959874136972, 0.50000000000000000, 0.25000000000000000 },
-  { 0.54097378993452760, 0.50000000000000000, 0.50000000000000000 },
-  { 0.62800587637588623, 0.50000000000000000, 0.75000000000000000 },
-  { 0.67139670714180244, 0.50000000000000000, 1.0000000000000000 },
-  { 0.67724253810014312, 0.50000000000000000, 1.2500000000000000 },
-  { 0.64983807475374655, 0.50000000000000000, 1.5000000000000000 },
-  { 0.59348525447147382, 0.50000000000000000, 1.7500000000000000 },
-  { 0.51301613656182721, 0.50000000000000000, 2.0000000000000000 },
-  { 0.41387506064759982, 0.50000000000000000, 2.2500000000000000 },
-  { 0.30200490606236535, 0.50000000000000000, 2.5000000000000000 },
-  { 0.18363332138431521, 0.50000000000000000, 2.7500000000000000 },
-  { 0.065008182877375753, 0.50000000000000000, 3.0000000000000000 },
-  { -0.047885729975898544, 0.50000000000000000, 3.2500000000000000 },
-  { -0.14960456964952620, 0.50000000000000000, 3.5000000000000000 },
-  { -0.23549801845815513, 0.50000000000000000, 3.7500000000000000 },
-  { -0.30192051329163944, 0.50000000000000000, 4.0000000000000000 },
-  { -0.34638850218952444, 0.50000000000000000, 4.2500000000000000 },
-  { -0.36767487332724025, 0.50000000000000000, 4.5000000000000000 },
-  { -0.36583563802350400, 0.50000000000000000, 4.7500000000000000 },
-  { -0.34216798479816180, 0.50000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 5.5511151231257827e-16 at index 6
+// max(|f - f_GSL| / |f_GSL|): 8.6943152885834554e-16
+// mean(f - f_GSL): 1.6058583034756728e-16
+// variance(f - f_GSL): 1.3538599676919272e-33
+// stddev(f - f_GSL): 3.6794836155253190e-17
+const testcase_cyl_bessel_j<double>
+data009[21] =
+{
+  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 0.39479959874136972, 0.50000000000000000, 0.25000000000000000, 0.0 },
+  { 0.54097378993452760, 0.50000000000000000, 0.50000000000000000, 0.0 },
+  { 0.62800587637588623, 0.50000000000000000, 0.75000000000000000, 0.0 },
+  { 0.67139670714180244, 0.50000000000000000, 1.0000000000000000, 0.0 },
+  { 0.67724253810014312, 0.50000000000000000, 1.2500000000000000, 0.0 },
+  { 0.64983807475374655, 0.50000000000000000, 1.5000000000000000, 0.0 },
+  { 0.59348525447147382, 0.50000000000000000, 1.7500000000000000, 0.0 },
+  { 0.51301613656182721, 0.50000000000000000, 2.0000000000000000, 0.0 },
+  { 0.41387506064759988, 0.50000000000000000, 2.2500000000000000, 0.0 },
+  { 0.30200490606236535, 0.50000000000000000, 2.5000000000000000, 0.0 },
+  { 0.18363332138431521, 0.50000000000000000, 2.7500000000000000, 0.0 },
+  { 0.065008182877375753, 0.50000000000000000, 3.0000000000000000, 0.0 },
+  { -0.047885729975898537, 0.50000000000000000, 3.2500000000000000, 0.0 },
+  { -0.14960456964952618, 0.50000000000000000, 3.5000000000000000, 0.0 },
+  { -0.23549801845815518, 0.50000000000000000, 3.7500000000000000, 0.0 },
+  { -0.30192051329163944, 0.50000000000000000, 4.0000000000000000, 0.0 },
+  { -0.34638850218952444, 0.50000000000000000, 4.2500000000000000, 0.0 },
+  { -0.36767487332724025, 0.50000000000000000, 4.5000000000000000, 0.0 },
+  { -0.36583563802350400, 0.50000000000000000, 4.7500000000000000, 0.0 },
+  { -0.34216798479816180, 0.50000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.50000000000000000.
-template<typename Tp>
-  void
-  test003()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data003)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data003[i].nu), Tp(data003[i].x));
-       const Tp f0 = data003[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler009 = 2.5000000000000020e-13;
 
 // Test data for nu=0.66666666666666663.
-testcase_cyl_bessel_j<double> data004[] = {
-  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000 },
-  { 0.27434438998865135, 0.66666666666666663, 0.25000000000000000 },
-  { 0.42331075068448321, 0.66666666666666663, 0.50000000000000000 },
-  { 0.52870551548162792, 0.66666666666666663, 0.75000000000000000 },
-  { 0.59794997367362801, 0.66666666666666663, 1.0000000000000000 },
-  { 0.63338726889075891, 0.66666666666666663, 1.2500000000000000 },
-  { 0.63673234502877385, 0.66666666666666663, 1.5000000000000000 },
-  { 0.61022230460131899, 0.66666666666666663, 1.7500000000000000 },
-  { 0.55696967691913712, 0.66666666666666663, 2.0000000000000000 },
-  { 0.48101276749106114, 0.66666666666666663, 2.2500000000000000 },
-  { 0.38721242477084306, 0.66666666666666663, 2.5000000000000000 },
-  { 0.28105724771080542, 0.66666666666666663, 2.7500000000000000 },
-  { 0.16841218049067044, 0.66666666666666663, 3.0000000000000000 },
-  { 0.055235893475364915, 0.66666666666666663, 3.2500000000000000 },
-  { -0.052711584404031925, 0.66666666666666663, 3.5000000000000000 },
-  { -0.15015178042293029, 0.66666666666666663, 3.7500000000000000 },
-  { -0.23254408502670390, 0.66666666666666663, 4.0000000000000000 },
-  { -0.29630067002972543, 0.66666666666666663, 4.2500000000000000 },
-  { -0.33894810189777724, 0.66666666666666663, 4.5000000000000000 },
-  { -0.35922706960321099, 0.66666666666666663, 4.7500000000000000 },
-  { -0.35712533549168868, 0.66666666666666663, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.2212453270876722e-15 at index 4
+// max(|f - f_GSL| / |f_GSL|): 2.1504146437492276e-15
+// mean(f - f_GSL): -4.8208791456193557e-16
+// variance(f - f_GSL): 1.8468435800786558e-32
+// stddev(f - f_GSL): 1.3589862324831168e-16
+const testcase_cyl_bessel_j<double>
+data010[21] =
+{
+  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000, 0.0 },
+  { 0.27434438998865140, 0.66666666666666663, 0.25000000000000000, 0.0 },
+  { 0.42331075068448332, 0.66666666666666663, 0.50000000000000000, 0.0 },
+  { 0.52870551548162803, 0.66666666666666663, 0.75000000000000000, 0.0 },
+  { 0.59794997367362812, 0.66666666666666663, 1.0000000000000000, 0.0 },
+  { 0.63338726889075903, 0.66666666666666663, 1.2500000000000000, 0.0 },
+  { 0.63673234502877407, 0.66666666666666663, 1.5000000000000000, 0.0 },
+  { 0.61022230460131910, 0.66666666666666663, 1.7500000000000000, 0.0 },
+  { 0.55696967691913724, 0.66666666666666663, 2.0000000000000000, 0.0 },
+  { 0.48101276749106131, 0.66666666666666663, 2.2500000000000000, 0.0 },
+  { 0.38721242477084322, 0.66666666666666663, 2.5000000000000000, 0.0 },
+  { 0.28105724771080548, 0.66666666666666663, 2.7500000000000000, 0.0 },
+  { 0.16841218049067047, 0.66666666666666663, 3.0000000000000000, 0.0 },
+  { 0.055235893475364936, 0.66666666666666663, 3.2500000000000000, 0.0 },
+  { -0.052711584404031932, 0.66666666666666663, 3.5000000000000000, 0.0 },
+  { -0.15015178042293031, 0.66666666666666663, 3.7500000000000000, 0.0 },
+  { -0.23254408502670393, 0.66666666666666663, 4.0000000000000000, 0.0 },
+  { -0.29630067002972543, 0.66666666666666663, 4.2500000000000000, 0.0 },
+  { -0.33894810189777724, 0.66666666666666663, 4.5000000000000000, 0.0 },
+  { -0.35922706960321099, 0.66666666666666663, 4.7500000000000000, 0.0 },
+  { -0.35712533549168868, 0.66666666666666663, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.66666666666666663.
-template<typename Tp>
-  void
-  test004()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data004)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data004[i].nu), Tp(data004[i].x));
-       const Tp f0 = data004[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler010 = 2.5000000000000020e-13;
 
 // Test data for nu=1.0000000000000000.
-testcase_cyl_bessel_j<double> data005[] = {
-  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000 },
-  { 0.12402597732272694, 1.0000000000000000, 0.25000000000000000 },
-  { 0.24226845767487390, 1.0000000000000000, 0.50000000000000000 },
-  { 0.34924360217486222, 1.0000000000000000, 0.75000000000000000 },
-  { 0.44005058574493355, 1.0000000000000000, 1.0000000000000000 },
-  { 0.51062326031988059, 1.0000000000000000, 1.2500000000000000 },
-  { 0.55793650791009952, 1.0000000000000000, 1.5000000000000000 },
-  { 0.58015619763899240, 1.0000000000000000, 1.7500000000000000 },
-  { 0.57672480775687363, 1.0000000000000000, 2.0000000000000000 },
-  { 0.54837835664696011, 1.0000000000000000, 2.2500000000000000 },
-  { 0.49709410246427416, 1.0000000000000000, 2.5000000000000000 },
-  { 0.42597230295790256, 1.0000000000000000, 2.7500000000000000 },
-  { 0.33905895852593648, 1.0000000000000000, 3.0000000000000000 },
-  { 0.24111968801520400, 1.0000000000000000, 3.2500000000000000 },
-  { 0.13737752736232706, 1.0000000000000000, 3.5000000000000000 },
-  { 0.033229349129679724, 1.0000000000000000, 3.7500000000000000 },
-  { -0.066043328023549230, 1.0000000000000000, 4.0000000000000000 },
-  { -0.15555319297834286, 1.0000000000000000, 4.2500000000000000 },
-  { -0.23106043192337070, 1.0000000000000000, 4.5000000000000000 },
-  { -0.28918679864711044, 1.0000000000000000, 4.7500000000000000 },
-  { -0.32757913759146529, 1.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 6.1062266354383610e-15 at index 7
+// max(|f - f_GSL| / |f_GSL|): 1.0805601471765146e-14
+// mean(f - f_GSL): -2.7170725986585303e-15
+// variance(f - f_GSL): 4.1990134041171014e-31
+// stddev(f - f_GSL): 6.4799794784529226e-16
+const testcase_cyl_bessel_j<double>
+data011[21] =
+{
+  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.12402597732272694, 1.0000000000000000, 0.25000000000000000, 0.0 },
+  { 0.24226845767487390, 1.0000000000000000, 0.50000000000000000, 0.0 },
+  { 0.34924360217486222, 1.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.44005058574493355, 1.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.51062326031988059, 1.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.55793650791009952, 1.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.58015619763899240, 1.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.57672480775687363, 1.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.54837835664696011, 1.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.49709410246427416, 1.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.42597230295790256, 1.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.33905895852593648, 1.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.24111968801520400, 1.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.13737752736232706, 1.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.033229349129679724, 1.0000000000000000, 3.7500000000000000, 0.0 },
+  { -0.066043328023549230, 1.0000000000000000, 4.0000000000000000, 0.0 },
+  { -0.15555319297834286, 1.0000000000000000, 4.2500000000000000, 0.0 },
+  { -0.23106043192337070, 1.0000000000000000, 4.5000000000000000, 0.0 },
+  { -0.28918679864711044, 1.0000000000000000, 4.7500000000000000, 0.0 },
+  { -0.32757913759146529, 1.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=1.0000000000000000.
-template<typename Tp>
-  void
-  test005()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data005)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data005[i].nu), Tp(data005[i].x));
-       const Tp f0 = data005[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler011 = 1.0000000000000008e-12;
 
 // Test data for nu=2.0000000000000000.
-testcase_cyl_bessel_j<double> data006[] = {
-  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000 },
-  { 0.0077718892859626760, 2.0000000000000000, 0.25000000000000000 },
-  { 0.030604023458682638, 2.0000000000000000, 0.50000000000000000 },
-  { 0.067073997299650551, 2.0000000000000000, 0.75000000000000000 },
-  { 0.11490348493190047, 2.0000000000000000, 1.0000000000000000 },
-  { 0.17109113124052350, 2.0000000000000000, 1.2500000000000000 },
-  { 0.23208767214421472, 2.0000000000000000, 1.5000000000000000 },
-  { 0.29400312425941216, 2.0000000000000000, 1.7500000000000000 },
-  { 0.35283402861563773, 2.0000000000000000, 2.0000000000000000 },
-  { 0.40469757684189717, 2.0000000000000000, 2.2500000000000000 },
-  { 0.44605905843961718, 2.0000000000000000, 2.5000000000000000 },
-  { 0.47393946632335160, 2.0000000000000000, 2.7500000000000000 },
-  { 0.48609126058589119, 2.0000000000000000, 3.0000000000000000 },
-  { 0.48113214864150627, 2.0000000000000000, 3.2500000000000000 },
-  { 0.45862918419430765, 2.0000000000000000, 3.5000000000000000 },
-  { 0.41912837447200352, 2.0000000000000000, 3.7500000000000000 },
-  { 0.36412814585207293, 2.0000000000000000, 4.0000000000000000 },
-  { 0.29599826772185189, 2.0000000000000000, 4.2500000000000000 },
-  { 0.21784898368584549, 2.0000000000000000, 4.5000000000000000 },
-  { 0.13335796490311685, 2.0000000000000000, 4.7500000000000000 },
-  { 0.046565116277751971, 2.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 5.1625370645069779e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 1.0822675144009871e-14
+// mean(f - f_GSL): -2.7863789318177942e-15
+// variance(f - f_GSL): 2.7454120215792639e-31
+// stddev(f - f_GSL): 5.2396679490014096e-16
+const testcase_cyl_bessel_j<double>
+data012[21] =
+{
+  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.0077718892859626760, 2.0000000000000000, 0.25000000000000000, 0.0 },
+  { 0.030604023458682638, 2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 0.067073997299650551, 2.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.11490348493190047, 2.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.17109113124052350, 2.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.23208767214421472, 2.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.29400312425941216, 2.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.35283402861563773, 2.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.40469757684189717, 2.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.44605905843961718, 2.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.47393946632335160, 2.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.48609126058589119, 2.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.48113214864150627, 2.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.45862918419430765, 2.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.41912837447200352, 2.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.36412814585207293, 2.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.29599826772185189, 2.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.21784898368584549, 2.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.13335796490311685, 2.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.046565116277751971, 2.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=2.0000000000000000.
-template<typename Tp>
-  void
-  test006()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data006)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data006[i].nu), Tp(data006[i].x));
-       const Tp f0 = data006[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler012 = 1.0000000000000008e-12;
 
 // Test data for nu=5.0000000000000000.
-testcase_cyl_bessel_j<double> data007[] = {
-  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000 },
-  { 2.5365161587472413e-07, 5.0000000000000000, 0.25000000000000000 },
-  { 8.0536272413574753e-06, 5.0000000000000000, 0.50000000000000000 },
-  { 6.0364166510576438e-05, 5.0000000000000000, 0.75000000000000000 },
-  { 0.00024975773021123450, 5.0000000000000000, 1.0000000000000000 },
-  { 0.00074440885254749821, 5.0000000000000000, 1.2500000000000000 },
-  { 0.0017994217673606111, 5.0000000000000000, 1.5000000000000000 },
-  { 0.0037577257273157133, 5.0000000000000000, 1.7500000000000000 },
-  { 0.0070396297558716842, 5.0000000000000000, 2.0000000000000000 },
-  { 0.012121078633445751, 5.0000000000000000, 2.2500000000000000 },
-  { 0.019501625134503223, 5.0000000000000000, 2.5000000000000000 },
-  { 0.029664058320006174, 5.0000000000000000, 2.7500000000000000 },
-  { 0.043028434877047578, 5.0000000000000000, 3.0000000000000000 },
-  { 0.059903888098560426, 5.0000000000000000, 3.2500000000000000 },
-  { 0.080441986647991792, 5.0000000000000000, 3.5000000000000000 },
-  { 0.10459554742314070, 5.0000000000000000, 3.7500000000000000 },
-  { 0.13208665604709827, 5.0000000000000000, 4.0000000000000000 },
-  { 0.16238721643623680, 5.0000000000000000, 4.2500000000000000 },
-  { 0.19471465863871368, 5.0000000000000000, 4.5000000000000000 },
-  { 0.22804452118769436, 5.0000000000000000, 4.7500000000000000 },
-  { 0.26114054612017007, 5.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 2.6645352591003757e-15 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.1360392768632928e-14
+// mean(f - f_GSL): -6.6594499701393519e-16
+// variance(f - f_GSL): 2.0970405937460423e-31
+// stddev(f - f_GSL): 4.5793455796063728e-16
+const testcase_cyl_bessel_j<double>
+data013[21] =
+{
+  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000, 0.0 },
+  { 2.5365161587472413e-07, 5.0000000000000000, 0.25000000000000000, 0.0 },
+  { 8.0536272413574753e-06, 5.0000000000000000, 0.50000000000000000, 0.0 },
+  { 6.0364166510576438e-05, 5.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.00024975773021123450, 5.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.00074440885254749821, 5.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.0017994217673606111, 5.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.0037577257273157133, 5.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.0070396297558716842, 5.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.012121078633445751, 5.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.019501625134503223, 5.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.029664058320006174, 5.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.043028434877047578, 5.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.059903888098560426, 5.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.080441986647991792, 5.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.10459554742314070, 5.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.13208665604709827, 5.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.16238721643623680, 5.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.19471465863871368, 5.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.22804452118769436, 5.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.26114054612017007, 5.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=5.0000000000000000.
-template<typename Tp>
-  void
-  test007()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data007)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data007[i].nu), Tp(data007[i].x));
-       const Tp f0 = data007[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler013 = 1.0000000000000008e-12;
 
 // Test data for nu=10.000000000000000.
-testcase_cyl_bessel_j<double> data008[] = {
-  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000 },
-  { 2.5628321598050096e-16, 10.000000000000000, 0.25000000000000000 },
-  { 2.6131773608228023e-13, 10.000000000000000, 0.50000000000000000 },
-  { 1.4962171311759677e-11, 10.000000000000000, 0.75000000000000000 },
-  { 2.6306151236874524e-10, 10.000000000000000, 1.0000000000000000 },
-  { 2.4187548221114514e-09, 10.000000000000000, 1.2500000000000000 },
-  { 1.4743269078039996e-08, 10.000000000000000, 1.5000000000000000 },
-  { 6.7608502849897560e-08, 10.000000000000000, 1.7500000000000000 },
-  { 2.5153862827167358e-07, 10.000000000000000, 2.0000000000000000 },
-  { 7.9717051583730038e-07, 10.000000000000000, 2.2500000000000000 },
-  { 2.2247284173983839e-06, 10.000000000000000, 2.5000000000000000 },
-  { 5.5985475639210430e-06, 10.000000000000000, 2.7500000000000000 },
-  { 1.2928351645715880e-05, 10.000000000000000, 3.0000000000000000 },
-  { 2.7761691354244538e-05, 10.000000000000000, 3.2500000000000000 },
-  { 5.6009495875078844e-05, 10.000000000000000, 3.5000000000000000 },
-  { 0.00010703761729231951, 10.000000000000000, 3.7500000000000000 },
-  { 0.00019504055466003446, 10.000000000000000, 4.0000000000000000 },
-  { 0.00034068888474064193, 10.000000000000000, 4.2500000000000000 },
-  { 0.00057300977667164505, 10.000000000000000, 4.5000000000000000 },
-  { 0.00093142172588886810, 10.000000000000000, 4.7500000000000000 },
-  { 0.0014678026473104744, 10.000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.6263032587282567e-17 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.2824480053608853e-14
+// mean(f - f_GSL): -1.9939226062419386e-18
+// variance(f - f_GSL): 1.0689393731679246e-35
+// stddev(f - f_GSL): 3.2694638293884283e-18
+const testcase_cyl_bessel_j<double>
+data014[21] =
+{
+  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000, 0.0 },
+  { 2.5628321598050096e-16, 10.000000000000000, 0.25000000000000000, 0.0 },
+  { 2.6131773608228023e-13, 10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.4962171311759677e-11, 10.000000000000000, 0.75000000000000000, 0.0 },
+  { 2.6306151236874524e-10, 10.000000000000000, 1.0000000000000000, 0.0 },
+  { 2.4187548221114514e-09, 10.000000000000000, 1.2500000000000000, 0.0 },
+  { 1.4743269078039996e-08, 10.000000000000000, 1.5000000000000000, 0.0 },
+  { 6.7608502849897560e-08, 10.000000000000000, 1.7500000000000000, 0.0 },
+  { 2.5153862827167358e-07, 10.000000000000000, 2.0000000000000000, 0.0 },
+  { 7.9717051583730038e-07, 10.000000000000000, 2.2500000000000000, 0.0 },
+  { 2.2247284173983839e-06, 10.000000000000000, 2.5000000000000000, 0.0 },
+  { 5.5985475639210430e-06, 10.000000000000000, 2.7500000000000000, 0.0 },
+  { 1.2928351645715880e-05, 10.000000000000000, 3.0000000000000000, 0.0 },
+  { 2.7761691354244538e-05, 10.000000000000000, 3.2500000000000000, 0.0 },
+  { 5.6009495875078844e-05, 10.000000000000000, 3.5000000000000000, 0.0 },
+  { 0.00010703761729231951, 10.000000000000000, 3.7500000000000000, 0.0 },
+  { 0.00019504055466003446, 10.000000000000000, 4.0000000000000000, 0.0 },
+  { 0.00034068888474064193, 10.000000000000000, 4.2500000000000000, 0.0 },
+  { 0.00057300977667164505, 10.000000000000000, 4.5000000000000000, 0.0 },
+  { 0.00093142172588886810, 10.000000000000000, 4.7500000000000000, 0.0 },
+  { 0.0014678026473104744, 10.000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=10.000000000000000.
-template<typename Tp>
-  void
-  test008()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data008)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data008[i].nu), Tp(data008[i].x));
-       const Tp f0 = data008[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler014 = 1.0000000000000008e-12;
 
 // Test data for nu=20.000000000000000.
-testcase_cyl_bessel_j<double> data009[] = {
-  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000 },
-  { 3.5624805510586969e-37, 20.000000000000000, 0.25000000000000000 },
-  { 3.7272019617047132e-31, 20.000000000000000, 0.50000000000000000 },
-  { 1.2347870693633488e-27, 20.000000000000000, 0.75000000000000000 },
-  { 3.8735030085246562e-25, 20.000000000000000, 1.0000000000000000 },
-  { 3.3372897667043766e-23, 20.000000000000000, 1.2500000000000000 },
-  { 1.2689972189332558e-21, 20.000000000000000, 1.5000000000000000 },
-  { 2.7427715944032989e-20, 20.000000000000000, 1.7500000000000000 },
-  { 3.9189728050907524e-19, 20.000000000000000, 2.0000000000000000 },
-  { 4.0805232551365158e-18, 20.000000000000000, 2.2500000000000000 },
-  { 3.3090793836587786e-17, 20.000000000000000, 2.5000000000000000 },
-  { 2.1915404680645990e-16, 20.000000000000000, 2.7500000000000000 },
-  { 1.2275946737992981e-15, 20.000000000000000, 3.0000000000000000 },
-  { 5.9727663938305382e-15, 20.000000000000000, 3.2500000000000000 },
-  { 2.5768553102807590e-14, 20.000000000000000, 3.5000000000000000 },
-  { 1.0021112208287217e-13, 20.000000000000000, 3.7500000000000000 },
-  { 3.5595116285938516e-13, 20.000000000000000, 4.0000000000000000 },
-  { 1.1673622958555074e-12, 20.000000000000000, 4.2500000000000000 },
-  { 3.5665470983611762e-12, 20.000000000000000, 4.5000000000000000 },
-  { 1.0227564044880958e-11, 20.000000000000000, 4.7500000000000000 },
-  { 2.7703300521289426e-11, 20.000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 3.8450973786644646e-25 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.6112330065488876e-14
+// mean(f - f_GSL): -2.9366599259721097e-26
+// variance(f - f_GSL): 6.6216490672203760e-51
+// stddev(f - f_GSL): 8.1373515760475631e-26
+const testcase_cyl_bessel_j<double>
+data015[21] =
+{
+  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000, 0.0 },
+  { 3.5624805510586969e-37, 20.000000000000000, 0.25000000000000000, 0.0 },
+  { 3.7272019617047132e-31, 20.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2347870693633488e-27, 20.000000000000000, 0.75000000000000000, 0.0 },
+  { 3.8735030085246562e-25, 20.000000000000000, 1.0000000000000000, 0.0 },
+  { 3.3372897667043766e-23, 20.000000000000000, 1.2500000000000000, 0.0 },
+  { 1.2689972189332558e-21, 20.000000000000000, 1.5000000000000000, 0.0 },
+  { 2.7427715944032989e-20, 20.000000000000000, 1.7500000000000000, 0.0 },
+  { 3.9189728050907524e-19, 20.000000000000000, 2.0000000000000000, 0.0 },
+  { 4.0805232551365158e-18, 20.000000000000000, 2.2500000000000000, 0.0 },
+  { 3.3090793836587786e-17, 20.000000000000000, 2.5000000000000000, 0.0 },
+  { 2.1915404680645990e-16, 20.000000000000000, 2.7500000000000000, 0.0 },
+  { 1.2275946737992981e-15, 20.000000000000000, 3.0000000000000000, 0.0 },
+  { 5.9727663938305382e-15, 20.000000000000000, 3.2500000000000000, 0.0 },
+  { 2.5768553102807590e-14, 20.000000000000000, 3.5000000000000000, 0.0 },
+  { 1.0021112208287217e-13, 20.000000000000000, 3.7500000000000000, 0.0 },
+  { 3.5595116285938516e-13, 20.000000000000000, 4.0000000000000000, 0.0 },
+  { 1.1673622958555074e-12, 20.000000000000000, 4.2500000000000000, 0.0 },
+  { 3.5665470983611762e-12, 20.000000000000000, 4.5000000000000000, 0.0 },
+  { 1.0227564044880958e-11, 20.000000000000000, 4.7500000000000000, 0.0 },
+  { 2.7703300521289426e-11, 20.000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=20.000000000000000.
-template<typename Tp>
-  void
-  test009()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data009)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data009[i].nu), Tp(data009[i].x));
-       const Tp f0 = data009[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler015 = 1.0000000000000008e-12;
 //  cyl_bessel_j
 
 // Test data for nu=0.0000000000000000.
-testcase_cyl_bessel_j<double> data010[] = {
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
-  { -0.17759677131433835, 0.0000000000000000, 5.0000000000000000 },
-  { -0.24593576445134835, 0.0000000000000000, 10.000000000000000 },
-  { -0.014224472826780771, 0.0000000000000000, 15.000000000000000 },
-  { 0.16702466434058319, 0.0000000000000000, 20.000000000000000 },
-  { 0.096266783275958154, 0.0000000000000000, 25.000000000000000 },
-  { -0.086367983581040142, 0.0000000000000000, 30.000000000000000 },
-  { -0.12684568275631256, 0.0000000000000000, 35.000000000000000 },
-  { 0.0073668905842374085, 0.0000000000000000, 40.000000000000000 },
-  { 0.11581867067325631, 0.0000000000000000, 45.000000000000000 },
-  { 0.055812327669251746, 0.0000000000000000, 50.000000000000000 },
-  { -0.074548302648236808, 0.0000000000000000, 55.000000000000000 },
-  { -0.091471804089061859, 0.0000000000000000, 60.000000000000000 },
-  { 0.018687343227677979, 0.0000000000000000, 65.000000000000000 },
-  { 0.094908726483013545, 0.0000000000000000, 70.000000000000000 },
-  { 0.034643913805097008, 0.0000000000000000, 75.000000000000000 },
-  { -0.069742165512210033, 0.0000000000000000, 80.000000000000000 },
-  { -0.070940394796273273, 0.0000000000000000, 85.000000000000000 },
-  { 0.026630016699969526, 0.0000000000000000, 90.000000000000000 },
-  { 0.081811967783384135, 0.0000000000000000, 95.000000000000000 },
-  { 0.019985850304223170, 0.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 7.6709472107694410e-15 at index 13
+// max(|f - f_GSL| / |f_GSL|): 4.1048891312746575e-13
+// mean(f - f_GSL): -4.8105534106433027e-16
+// variance(f - f_GSL): 9.0295585401833436e-31
+// stddev(f - f_GSL): 9.5023989287881106e-16
+const testcase_cyl_bessel_j<double>
+data016[21] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+  { -0.17759677131433835, 0.0000000000000000, 5.0000000000000000, 0.0 },
+  { -0.24593576445134835, 0.0000000000000000, 10.000000000000000, 0.0 },
+  { -0.014224472826780771, 0.0000000000000000, 15.000000000000000, 0.0 },
+  { 0.16702466434058319, 0.0000000000000000, 20.000000000000000, 0.0 },
+  { 0.096266783275958154, 0.0000000000000000, 25.000000000000000, 0.0 },
+  { -0.086367983581040142, 0.0000000000000000, 30.000000000000000, 0.0 },
+  { -0.12684568275631256, 0.0000000000000000, 35.000000000000000, 0.0 },
+  { 0.0073668905842374085, 0.0000000000000000, 40.000000000000000, 0.0 },
+  { 0.11581867067325631, 0.0000000000000000, 45.000000000000000, 0.0 },
+  { 0.055812327669251746, 0.0000000000000000, 50.000000000000000, 0.0 },
+  { -0.074548302648236808, 0.0000000000000000, 55.000000000000000, 0.0 },
+  { -0.091471804089061859, 0.0000000000000000, 60.000000000000000, 0.0 },
+  { 0.018687343227677979, 0.0000000000000000, 65.000000000000000, 0.0 },
+  { 0.094908726483013545, 0.0000000000000000, 70.000000000000000, 0.0 },
+  { 0.034643913805097008, 0.0000000000000000, 75.000000000000000, 0.0 },
+  { -0.069742165512210033, 0.0000000000000000, 80.000000000000000, 0.0 },
+  { -0.070940394796273273, 0.0000000000000000, 85.000000000000000, 0.0 },
+  { 0.026630016699969526, 0.0000000000000000, 90.000000000000000, 0.0 },
+  { 0.081811967783384135, 0.0000000000000000, 95.000000000000000, 0.0 },
+  { 0.019985850304223170, 0.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.0000000000000000.
-template<typename Tp>
-  void
-  test010()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data010)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data010[i].nu), Tp(data010[i].x));
-       const Tp f0 = data010[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-  }
+const double toler016 = 2.5000000000000014e-11;
 
 // Test data for nu=0.33333333333333331.
-testcase_cyl_bessel_j<double> data011[] = {
-  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000 },
-  { -0.30642046380026405, 0.33333333333333331, 5.0000000000000000 },
-  { -0.18614516704869571, 0.33333333333333331, 10.000000000000000 },
-  { 0.089740004221152650, 0.33333333333333331, 15.000000000000000 },
-  { 0.17606058001293901, 0.33333333333333331, 20.000000000000000 },
-  { 0.020097162141383233, 0.33333333333333331, 25.000000000000000 },
-  { -0.13334053387426159, 0.33333333333333331, 30.000000000000000 },
-  { -0.087118009397765497, 0.33333333333333331, 35.000000000000000 },
-  { 0.069202942818858179, 0.33333333333333331, 40.000000000000000 },
-  { 0.11387616964518317, 0.33333333333333331, 45.000000000000000 },
-  { -0.00057226680771808045, 0.33333333333333331, 50.000000000000000 },
-  { -0.10331600929280822, 0.33333333333333331, 55.000000000000000 },
-  { -0.055618147270528003, 0.33333333333333331, 60.000000000000000 },
-  { 0.064711954014113948, 0.33333333333333331, 65.000000000000000 },
-  { 0.086879926462481605, 0.33333333333333331, 70.000000000000000 },
-  { -0.012614484229891068, 0.33333333333333331, 75.000000000000000 },
-  { -0.088199784400034537, 0.33333333333333331, 80.000000000000000 },
-  { -0.036703611076564523, 0.33333333333333331, 85.000000000000000 },
-  { 0.062916286828779547, 0.33333333333333331, 90.000000000000000 },
-  { 0.069465244416806030, 0.33333333333333331, 95.000000000000000 },
-  { -0.021271244853702364, 0.33333333333333331, 100.00000000000000 },
+// max(|f - f_GSL|): 7.9363599025938925e-15 at index 15
+// max(|f - f_GSL| / |f_GSL|): 4.2442260743498463e-12
+// mean(f - f_GSL): -4.0073144868561849e-16
+// variance(f - f_GSL): 1.2341887679989061e-30
+// stddev(f - f_GSL): 1.1109404880545609e-15
+const testcase_cyl_bessel_j<double>
+data017[21] =
+{
+  { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000, 0.0 },
+  { -0.30642046380026405, 0.33333333333333331, 5.0000000000000000, 0.0 },
+  { -0.18614516704869571, 0.33333333333333331, 10.000000000000000, 0.0 },
+  { 0.089740004221152650, 0.33333333333333331, 15.000000000000000, 0.0 },
+  { 0.17606058001293901, 0.33333333333333331, 20.000000000000000, 0.0 },
+  { 0.020097162141383233, 0.33333333333333331, 25.000000000000000, 0.0 },
+  { -0.13334053387426159, 0.33333333333333331, 30.000000000000000, 0.0 },
+  { -0.087118009397765497, 0.33333333333333331, 35.000000000000000, 0.0 },
+  { 0.069202942818858179, 0.33333333333333331, 40.000000000000000, 0.0 },
+  { 0.11387616964518317, 0.33333333333333331, 45.000000000000000, 0.0 },
+  { -0.00057226680771808045, 0.33333333333333331, 50.000000000000000, 0.0 },
+  { -0.10331600929280822, 0.33333333333333331, 55.000000000000000, 0.0 },
+  { -0.055618147270528003, 0.33333333333333331, 60.000000000000000, 0.0 },
+  { 0.064711954014113948, 0.33333333333333331, 65.000000000000000, 0.0 },
+  { 0.086879926462481605, 0.33333333333333331, 70.000000000000000, 0.0 },
+  { -0.012614484229891068, 0.33333333333333331, 75.000000000000000, 0.0 },
+  { -0.088199784400034537, 0.33333333333333331, 80.000000000000000, 0.0 },
+  { -0.036703611076564523, 0.33333333333333331, 85.000000000000000, 0.0 },
+  { 0.062916286828779547, 0.33333333333333331, 90.000000000000000, 0.0 },
+  { 0.069465244416806030, 0.33333333333333331, 95.000000000000000, 0.0 },
+  { -0.021271244853702364, 0.33333333333333331, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.33333333333333331.
-template<typename Tp>
-  void
-  test011()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data011)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data011[i].nu), Tp(data011[i].x));
-       const Tp f0 = data011[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000017e-10));
-  }
+const double toler017 = 2.5000000000000017e-10;
 
 // Test data for nu=0.50000000000000000.
-testcase_cyl_bessel_j<double> data012[] = {
-  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
-  { -0.34216798479816180, 0.50000000000000000, 5.0000000000000000 },
-  { -0.13726373575505049, 0.50000000000000000, 10.000000000000000 },
-  { 0.13396768882243937, 0.50000000000000000, 15.000000000000000 },
-  { 0.16288076385502984, 0.50000000000000000, 20.000000000000000 },
-  { -0.021120283599650493, 0.50000000000000000, 25.000000000000000 },
-  { -0.14392965337039987, 0.50000000000000000, 30.000000000000000 },
-  { -0.057747757589458777, 0.50000000000000000, 35.000000000000000 },
-  { 0.094000962389533649, 0.50000000000000000, 40.000000000000000 },
-  { 0.10120783324271411, 0.50000000000000000, 45.000000000000000 },
-  { -0.029605831888924641, 0.50000000000000000, 50.000000000000000 },
-  { -0.10756039213265806, 0.50000000000000000, 55.000000000000000 },
-  { -0.031397461182520438, 0.50000000000000000, 60.000000000000000 },
-  { 0.081827430775628554, 0.50000000000000000, 65.000000000000000 },
-  { 0.073802429539054554, 0.50000000000000000, 70.000000000000000 },
-  { -0.035727009681702615, 0.50000000000000000, 75.000000000000000 },
-  { -0.088661035811765460, 0.50000000000000000, 80.000000000000000 },
-  { -0.015238065106312516, 0.50000000000000000, 85.000000000000000 },
-  { 0.075189068550269425, 0.50000000000000000, 90.000000000000000 },
-  { 0.055932643481494133, 0.50000000000000000, 95.000000000000000 },
-  { -0.040402132716252127, 0.50000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 7.4384942649885488e-15 at index 15
+// max(|f - f_GSL| / |f_GSL|): 3.6736636954373887e-13
+// mean(f - f_GSL): -2.3914402204537413e-16
+// variance(f - f_GSL): 7.8293530348883143e-31
+// stddev(f - f_GSL): 8.8483631451745435e-16
+const testcase_cyl_bessel_j<double>
+data018[21] =
+{
+  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+  { -0.34216798479816180, 0.50000000000000000, 5.0000000000000000, 0.0 },
+  { -0.13726373575505049, 0.50000000000000000, 10.000000000000000, 0.0 },
+  { 0.13396768882243937, 0.50000000000000000, 15.000000000000000, 0.0 },
+  { 0.16288076385502984, 0.50000000000000000, 20.000000000000000, 0.0 },
+  { -0.021120283599650493, 0.50000000000000000, 25.000000000000000, 0.0 },
+  { -0.14392965337039987, 0.50000000000000000, 30.000000000000000, 0.0 },
+  { -0.057747757589458777, 0.50000000000000000, 35.000000000000000, 0.0 },
+  { 0.094000962389533649, 0.50000000000000000, 40.000000000000000, 0.0 },
+  { 0.10120783324271411, 0.50000000000000000, 45.000000000000000, 0.0 },
+  { -0.029605831888924641, 0.50000000000000000, 50.000000000000000, 0.0 },
+  { -0.10756039213265806, 0.50000000000000000, 55.000000000000000, 0.0 },
+  { -0.031397461182520438, 0.50000000000000000, 60.000000000000000, 0.0 },
+  { 0.081827430775628554, 0.50000000000000000, 65.000000000000000, 0.0 },
+  { 0.073802429539054554, 0.50000000000000000, 70.000000000000000, 0.0 },
+  { -0.035727009681702615, 0.50000000000000000, 75.000000000000000, 0.0 },
+  { -0.088661035811765460, 0.50000000000000000, 80.000000000000000, 0.0 },
+  { -0.015238065106312516, 0.50000000000000000, 85.000000000000000, 0.0 },
+  { 0.075189068550269425, 0.50000000000000000, 90.000000000000000, 0.0 },
+  { 0.055932643481494133, 0.50000000000000000, 95.000000000000000, 0.0 },
+  { -0.040402132716252127, 0.50000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.50000000000000000.
-template<typename Tp>
-  void
-  test012()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data012)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data012[i].nu), Tp(data012[i].x));
-       const Tp f0 = data012[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-  }
+const double toler018 = 2.5000000000000014e-11;
 
 // Test data for nu=0.66666666666666663.
-testcase_cyl_bessel_j<double> data013[] = {
-  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000 },
-  { -0.35712533549168868, 0.66666666666666663, 5.0000000000000000 },
-  { -0.080149603304315808, 0.66666666666666663, 10.000000000000000 },
-  { 0.16918875175798079, 0.66666666666666663, 15.000000000000000 },
-  { 0.13904826122116531, 0.66666666666666663, 20.000000000000000 },
-  { -0.060770629698497600, 0.66666666666666663, 25.000000000000000 },
-  { -0.14489851974205062, 0.66666666666666663, 30.000000000000000 },
-  { -0.024604880159644394, 0.66666666666666663, 35.000000000000000 },
-  { 0.11243936464912010, 0.66666666666666663, 40.000000000000000 },
-  { 0.081776275512525309, 0.66666666666666663, 45.000000000000000 },
-  { -0.056589908749367777, 0.66666666666666663, 50.000000000000000 },
-  { -0.10455814523765931, 0.66666666666666663, 55.000000000000000 },
-  { -0.0051030148548608456, 0.66666666666666663, 60.000000000000000 },
-  { 0.093398227061639236, 0.66666666666666663, 65.000000000000000 },
-  { 0.055763883611864913, 0.66666666666666663, 70.000000000000000 },
-  { -0.056395322915757364, 0.66666666666666663, 75.000000000000000 },
-  { -0.083131347805783087, 0.66666666666666663, 80.000000000000000 },
-  { 0.0072315397874096648, 0.66666666666666663, 85.000000000000000 },
-  { 0.082362798520905250, 0.66666666666666663, 90.000000000000000 },
-  { 0.038630504403446168, 0.66666666666666663, 95.000000000000000 },
-  { -0.056778819380529734, 0.66666666666666663, 100.00000000000000 },
+// max(|f - f_GSL|): 6.3699046037868357e-15 at index 15
+// max(|f - f_GSL| / |f_GSL|): 1.2249770426844829e-12
+// mean(f - f_GSL): -1.1601995819092502e-16
+// variance(f - f_GSL): 5.5905222078728605e-31
+// stddev(f - f_GSL): 7.4769794756123678e-16
+const testcase_cyl_bessel_j<double>
+data019[21] =
+{
+  { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000, 0.0 },
+  { -0.35712533549168868, 0.66666666666666663, 5.0000000000000000, 0.0 },
+  { -0.080149603304315808, 0.66666666666666663, 10.000000000000000, 0.0 },
+  { 0.16918875175798079, 0.66666666666666663, 15.000000000000000, 0.0 },
+  { 0.13904826122116531, 0.66666666666666663, 20.000000000000000, 0.0 },
+  { -0.060770629698497600, 0.66666666666666663, 25.000000000000000, 0.0 },
+  { -0.14489851974205062, 0.66666666666666663, 30.000000000000000, 0.0 },
+  { -0.024604880159644394, 0.66666666666666663, 35.000000000000000, 0.0 },
+  { 0.11243936464912010, 0.66666666666666663, 40.000000000000000, 0.0 },
+  { 0.081776275512525309, 0.66666666666666663, 45.000000000000000, 0.0 },
+  { -0.056589908749367777, 0.66666666666666663, 50.000000000000000, 0.0 },
+  { -0.10455814523765931, 0.66666666666666663, 55.000000000000000, 0.0 },
+  { -0.0051030148548608456, 0.66666666666666663, 60.000000000000000, 0.0 },
+  { 0.093398227061639236, 0.66666666666666663, 65.000000000000000, 0.0 },
+  { 0.055763883611864913, 0.66666666666666663, 70.000000000000000, 0.0 },
+  { -0.056395322915757364, 0.66666666666666663, 75.000000000000000, 0.0 },
+  { -0.083131347805783087, 0.66666666666666663, 80.000000000000000, 0.0 },
+  { 0.0072315397874096648, 0.66666666666666663, 85.000000000000000, 0.0 },
+  { 0.082362798520905250, 0.66666666666666663, 90.000000000000000, 0.0 },
+  { 0.038630504403446168, 0.66666666666666663, 95.000000000000000, 0.0 },
+  { -0.056778819380529734, 0.66666666666666663, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.66666666666666663.
-template<typename Tp>
-  void
-  test013()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data013)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data013[i].nu), Tp(data013[i].x));
-       const Tp f0 = data013[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
-  }
+const double toler019 = 1.0000000000000006e-10;
 
 // Test data for nu=1.0000000000000000.
-testcase_cyl_bessel_j<double> data014[] = {
-  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000 },
-  { -0.32757913759146529, 1.0000000000000000, 5.0000000000000000 },
-  { 0.043472746168861459, 1.0000000000000000, 10.000000000000000 },
-  { 0.20510403861352280, 1.0000000000000000, 15.000000000000000 },
-  { 0.066833124175850078, 1.0000000000000000, 20.000000000000000 },
-  { -0.12535024958028990, 1.0000000000000000, 25.000000000000000 },
-  { -0.11875106261662294, 1.0000000000000000, 30.000000000000000 },
-  { 0.043990942179625646, 1.0000000000000000, 35.000000000000000 },
-  { 0.12603831803758500, 1.0000000000000000, 40.000000000000000 },
-  { 0.028348854376424561, 1.0000000000000000, 45.000000000000000 },
-  { -0.097511828125175129, 1.0000000000000000, 50.000000000000000 },
-  { -0.078250038308684711, 1.0000000000000000, 55.000000000000000 },
-  { 0.046598383758166370, 1.0000000000000000, 60.000000000000000 },
-  { 0.097330172226126929, 1.0000000000000000, 65.000000000000000 },
-  { 0.0099877887848385128, 1.0000000000000000, 70.000000000000000 },
-  { -0.085139995044829081, 1.0000000000000000, 75.000000000000000 },
-  { -0.056057296675712555, 1.0000000000000000, 80.000000000000000 },
-  { 0.049151460334891130, 1.0000000000000000, 85.000000000000000 },
-  { 0.079925646708868092, 1.0000000000000000, 90.000000000000000 },
-  { -0.0023925612997269283, 1.0000000000000000, 95.000000000000000 },
-  { -0.077145352014112129, 1.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 7.1418565505965148e-15 at index 14
+// max(|f - f_GSL| / |f_GSL|): 1.7859762266854228e-12
+// mean(f - f_GSL): 9.6132592627048056e-17
+// variance(f - f_GSL): 8.7314103995980843e-32
+// stddev(f - f_GSL): 2.9548960048702366e-16
+const testcase_cyl_bessel_j<double>
+data020[21] =
+{
+  { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000, 0.0 },
+  { -0.32757913759146529, 1.0000000000000000, 5.0000000000000000, 0.0 },
+  { 0.043472746168861459, 1.0000000000000000, 10.000000000000000, 0.0 },
+  { 0.20510403861352280, 1.0000000000000000, 15.000000000000000, 0.0 },
+  { 0.066833124175850078, 1.0000000000000000, 20.000000000000000, 0.0 },
+  { -0.12535024958028990, 1.0000000000000000, 25.000000000000000, 0.0 },
+  { -0.11875106261662294, 1.0000000000000000, 30.000000000000000, 0.0 },
+  { 0.043990942179625646, 1.0000000000000000, 35.000000000000000, 0.0 },
+  { 0.12603831803758500, 1.0000000000000000, 40.000000000000000, 0.0 },
+  { 0.028348854376424561, 1.0000000000000000, 45.000000000000000, 0.0 },
+  { -0.097511828125175129, 1.0000000000000000, 50.000000000000000, 0.0 },
+  { -0.078250038308684711, 1.0000000000000000, 55.000000000000000, 0.0 },
+  { 0.046598383758166370, 1.0000000000000000, 60.000000000000000, 0.0 },
+  { 0.097330172226126929, 1.0000000000000000, 65.000000000000000, 0.0 },
+  { 0.0099877887848385128, 1.0000000000000000, 70.000000000000000, 0.0 },
+  { -0.085139995044829081, 1.0000000000000000, 75.000000000000000, 0.0 },
+  { -0.056057296675712555, 1.0000000000000000, 80.000000000000000, 0.0 },
+  { 0.049151460334891130, 1.0000000000000000, 85.000000000000000, 0.0 },
+  { 0.079925646708868092, 1.0000000000000000, 90.000000000000000, 0.0 },
+  { -0.0023925612997269283, 1.0000000000000000, 95.000000000000000, 0.0 },
+  { -0.077145352014112129, 1.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=1.0000000000000000.
-template<typename Tp>
-  void
-  test014()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data014)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data014[i].nu), Tp(data014[i].x));
-       const Tp f0 = data014[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
-  }
+const double toler020 = 1.0000000000000006e-10;
 
 // Test data for nu=2.0000000000000000.
-testcase_cyl_bessel_j<double> data015[] = {
-  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000 },
-  { 0.046565116277751971, 2.0000000000000000, 5.0000000000000000 },
-  { 0.25463031368512068, 2.0000000000000000, 10.000000000000000 },
-  { 0.041571677975250486, 2.0000000000000000, 15.000000000000000 },
-  { -0.16034135192299820, 2.0000000000000000, 20.000000000000000 },
-  { -0.10629480324238134, 2.0000000000000000, 25.000000000000000 },
-  { 0.078451246073265299, 2.0000000000000000, 30.000000000000000 },
-  { 0.12935945088086259, 2.0000000000000000, 35.000000000000000 },
-  { -0.0010649746823579794, 2.0000000000000000, 40.000000000000000 },
-  { -0.11455872158985966, 2.0000000000000000, 45.000000000000000 },
-  { -0.059712800794258863, 2.0000000000000000, 50.000000000000000 },
-  { 0.071702846709739240, 2.0000000000000000, 55.000000000000000 },
-  { 0.093025083547667420, 2.0000000000000000, 60.000000000000000 },
-  { -0.015692568697643128, 2.0000000000000000, 65.000000000000000 },
-  { -0.094623361089161029, 2.0000000000000000, 70.000000000000000 },
-  { -0.036914313672959179, 2.0000000000000000, 75.000000000000000 },
-  { 0.068340733095317172, 2.0000000000000000, 80.000000000000000 },
-  { 0.072096899745329540, 2.0000000000000000, 85.000000000000000 },
-  { -0.024853891217550248, 2.0000000000000000, 90.000000000000000 },
-  { -0.081862337494957332, 2.0000000000000000, 95.000000000000000 },
-  { -0.021528757344505364, 2.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 7.5980888247784151e-15 at index 13
+// max(|f - f_GSL| / |f_GSL|): 2.0010877493528614e-12
+// mean(f - f_GSL): 4.4867383617942993e-16
+// variance(f - f_GSL): 8.9441502176883788e-31
+// stddev(f - f_GSL): 9.4573517528367196e-16
+const testcase_cyl_bessel_j<double>
+data021[21] =
+{
+  { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.046565116277751971, 2.0000000000000000, 5.0000000000000000, 0.0 },
+  { 0.25463031368512068, 2.0000000000000000, 10.000000000000000, 0.0 },
+  { 0.041571677975250486, 2.0000000000000000, 15.000000000000000, 0.0 },
+  { -0.16034135192299820, 2.0000000000000000, 20.000000000000000, 0.0 },
+  { -0.10629480324238134, 2.0000000000000000, 25.000000000000000, 0.0 },
+  { 0.078451246073265299, 2.0000000000000000, 30.000000000000000, 0.0 },
+  { 0.12935945088086259, 2.0000000000000000, 35.000000000000000, 0.0 },
+  { -0.0010649746823579794, 2.0000000000000000, 40.000000000000000, 0.0 },
+  { -0.11455872158985966, 2.0000000000000000, 45.000000000000000, 0.0 },
+  { -0.059712800794258863, 2.0000000000000000, 50.000000000000000, 0.0 },
+  { 0.071702846709739240, 2.0000000000000000, 55.000000000000000, 0.0 },
+  { 0.093025083547667420, 2.0000000000000000, 60.000000000000000, 0.0 },
+  { -0.015692568697643128, 2.0000000000000000, 65.000000000000000, 0.0 },
+  { -0.094623361089161029, 2.0000000000000000, 70.000000000000000, 0.0 },
+  { -0.036914313672959179, 2.0000000000000000, 75.000000000000000, 0.0 },
+  { 0.068340733095317172, 2.0000000000000000, 80.000000000000000, 0.0 },
+  { 0.072096899745329540, 2.0000000000000000, 85.000000000000000, 0.0 },
+  { -0.024853891217550248, 2.0000000000000000, 90.000000000000000, 0.0 },
+  { -0.081862337494957332, 2.0000000000000000, 95.000000000000000, 0.0 },
+  { -0.021528757344505364, 2.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=2.0000000000000000.
-template<typename Tp>
-  void
-  test015()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data015)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data015[i].nu), Tp(data015[i].x));
-       const Tp f0 = data015[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000017e-10));
-  }
+const double toler021 = 2.5000000000000017e-10;
 
 // Test data for nu=5.0000000000000000.
-testcase_cyl_bessel_j<double> data016[] = {
-  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000 },
-  { 0.26114054612017007, 5.0000000000000000, 5.0000000000000000 },
-  { -0.23406152818679371, 5.0000000000000000, 10.000000000000000 },
-  { 0.13045613456502966, 5.0000000000000000, 15.000000000000000 },
-  { 0.15116976798239498, 5.0000000000000000, 20.000000000000000 },
-  { -0.066007995398422933, 5.0000000000000000, 25.000000000000000 },
-  { -0.14324029551207709, 5.0000000000000000, 30.000000000000000 },
-  { -0.0015053072953907251, 5.0000000000000000, 35.000000000000000 },
-  { 0.12257346597711777, 5.0000000000000000, 40.000000000000000 },
-  { 0.057984499200954109, 5.0000000000000000, 45.000000000000000 },
-  { -0.081400247696569616, 5.0000000000000000, 50.000000000000000 },
-  { -0.092569895786432765, 5.0000000000000000, 55.000000000000000 },
-  { 0.027454744228344204, 5.0000000000000000, 60.000000000000000 },
-  { 0.099110527701539025, 5.0000000000000000, 65.000000000000000 },
-  { 0.026058129823895364, 5.0000000000000000, 70.000000000000000 },
-  { -0.078523977013751398, 5.0000000000000000, 75.000000000000000 },
-  { -0.065862349140031584, 5.0000000000000000, 80.000000000000000 },
-  { 0.038669072284680979, 5.0000000000000000, 85.000000000000000 },
-  { 0.082759319528415157, 5.0000000000000000, 90.000000000000000 },
-  { 0.0079423372702472871, 5.0000000000000000, 95.000000000000000 },
-  { -0.074195736964513898, 5.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 6.8452188362044808e-15 at index 14
+// max(|f - f_GSL| / |f_GSL|): 5.6871180922055143e-13
+// mean(f - f_GSL): -8.6612264979127729e-17
+// variance(f - f_GSL): 1.4989992815624512e-31
+// stddev(f - f_GSL): 3.8716912087128681e-16
+const testcase_cyl_bessel_j<double>
+data022[21] =
+{
+  { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.26114054612017007, 5.0000000000000000, 5.0000000000000000, 0.0 },
+  { -0.23406152818679371, 5.0000000000000000, 10.000000000000000, 0.0 },
+  { 0.13045613456502966, 5.0000000000000000, 15.000000000000000, 0.0 },
+  { 0.15116976798239498, 5.0000000000000000, 20.000000000000000, 0.0 },
+  { -0.066007995398422933, 5.0000000000000000, 25.000000000000000, 0.0 },
+  { -0.14324029551207709, 5.0000000000000000, 30.000000000000000, 0.0 },
+  { -0.0015053072953907251, 5.0000000000000000, 35.000000000000000, 0.0 },
+  { 0.12257346597711777, 5.0000000000000000, 40.000000000000000, 0.0 },
+  { 0.057984499200954109, 5.0000000000000000, 45.000000000000000, 0.0 },
+  { -0.081400247696569616, 5.0000000000000000, 50.000000000000000, 0.0 },
+  { -0.092569895786432765, 5.0000000000000000, 55.000000000000000, 0.0 },
+  { 0.027454744228344204, 5.0000000000000000, 60.000000000000000, 0.0 },
+  { 0.099110527701539025, 5.0000000000000000, 65.000000000000000, 0.0 },
+  { 0.026058129823895364, 5.0000000000000000, 70.000000000000000, 0.0 },
+  { -0.078523977013751398, 5.0000000000000000, 75.000000000000000, 0.0 },
+  { -0.065862349140031584, 5.0000000000000000, 80.000000000000000, 0.0 },
+  { 0.038669072284680979, 5.0000000000000000, 85.000000000000000, 0.0 },
+  { 0.082759319528415157, 5.0000000000000000, 90.000000000000000, 0.0 },
+  { 0.0079423372702472871, 5.0000000000000000, 95.000000000000000, 0.0 },
+  { -0.074195736964513898, 5.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=5.0000000000000000.
-template<typename Tp>
-  void
-  test016()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data016)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data016[i].nu), Tp(data016[i].x));
-       const Tp f0 = data016[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000028e-11));
-  }
+const double toler022 = 5.0000000000000028e-11;
 
 // Test data for nu=10.000000000000000.
-testcase_cyl_bessel_j<double> data017[] = {
-  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000 },
-  { 0.0014678026473104744, 10.000000000000000, 5.0000000000000000 },
-  { 0.20748610663335865, 10.000000000000000, 10.000000000000000 },
-  { -0.090071811047659087, 10.000000000000000, 15.000000000000000 },
-  { 0.18648255802394512, 10.000000000000000, 20.000000000000000 },
-  { -0.075179843948523312, 10.000000000000000, 25.000000000000000 },
-  { -0.12987689399858882, 10.000000000000000, 30.000000000000000 },
-  { 0.063546391343962866, 10.000000000000000, 35.000000000000000 },
-  { 0.11938336278226094, 10.000000000000000, 40.000000000000000 },
-  { -0.026971402475010831, 10.000000000000000, 45.000000000000000 },
-  { -0.11384784914946940, 10.000000000000000, 50.000000000000000 },
-  { -0.015773790303746080, 10.000000000000000, 55.000000000000000 },
-  { 0.097177143328071064, 10.000000000000000, 60.000000000000000 },
-  { 0.054617389951112129, 10.000000000000000, 65.000000000000000 },
-  { -0.065870338561952013, 10.000000000000000, 70.000000000000000 },
-  { -0.080417867891894437, 10.000000000000000, 75.000000000000000 },
-  { 0.024043850978184747, 10.000000000000000, 80.000000000000000 },
-  { 0.086824832700067869, 10.000000000000000, 85.000000000000000 },
-  { 0.019554748856312299, 10.000000000000000, 90.000000000000000 },
-  { -0.072341598669443757, 10.000000000000000, 95.000000000000000 },
-  { -0.054732176935472096, 10.000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 7.2337968948232856e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.6992532852132266e-13
+// mean(f - f_GSL): 4.8246996675604947e-16
+// variance(f - f_GSL): 7.6040256561433464e-31
+// stddev(f - f_GSL): 8.7201064535608434e-16
+const testcase_cyl_bessel_j<double>
+data023[21] =
+{
+  { 0.0000000000000000, 10.000000000000000, 0.0000000000000000, 0.0 },
+  { 0.0014678026473104744, 10.000000000000000, 5.0000000000000000, 0.0 },
+  { 0.20748610663335865, 10.000000000000000, 10.000000000000000, 0.0 },
+  { -0.090071811047659087, 10.000000000000000, 15.000000000000000, 0.0 },
+  { 0.18648255802394512, 10.000000000000000, 20.000000000000000, 0.0 },
+  { -0.075179843948523312, 10.000000000000000, 25.000000000000000, 0.0 },
+  { -0.12987689399858882, 10.000000000000000, 30.000000000000000, 0.0 },
+  { 0.063546391343962866, 10.000000000000000, 35.000000000000000, 0.0 },
+  { 0.11938336278226094, 10.000000000000000, 40.000000000000000, 0.0 },
+  { -0.026971402475010831, 10.000000000000000, 45.000000000000000, 0.0 },
+  { -0.11384784914946940, 10.000000000000000, 50.000000000000000, 0.0 },
+  { -0.015773790303746080, 10.000000000000000, 55.000000000000000, 0.0 },
+  { 0.097177143328071064, 10.000000000000000, 60.000000000000000, 0.0 },
+  { 0.054617389951112129, 10.000000000000000, 65.000000000000000, 0.0 },
+  { -0.065870338561952013, 10.000000000000000, 70.000000000000000, 0.0 },
+  { -0.080417867891894437, 10.000000000000000, 75.000000000000000, 0.0 },
+  { 0.024043850978184747, 10.000000000000000, 80.000000000000000, 0.0 },
+  { 0.086824832700067869, 10.000000000000000, 85.000000000000000, 0.0 },
+  { 0.019554748856312299, 10.000000000000000, 90.000000000000000, 0.0 },
+  { -0.072341598669443757, 10.000000000000000, 95.000000000000000, 0.0 },
+  { -0.054732176935472096, 10.000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=10.000000000000000.
-template<typename Tp>
-  void
-  test017()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data017)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data017[i].nu), Tp(data017[i].x));
-       const Tp f0 = data017[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-  }
+const double toler023 = 2.5000000000000014e-11;
 
 // Test data for nu=20.000000000000000.
-testcase_cyl_bessel_j<double> data018[] = {
-  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000 },
-  { 2.7703300521289426e-11, 20.000000000000000, 5.0000000000000000 },
-  { 1.1513369247813403e-05, 20.000000000000000, 10.000000000000000 },
-  { 0.0073602340792234934, 20.000000000000000, 15.000000000000000 },
-  { 0.16474777377532665, 20.000000000000000, 20.000000000000000 },
-  { 0.051994049228303307, 20.000000000000000, 25.000000000000000 },
-  { 0.0048310199934040923, 20.000000000000000, 30.000000000000000 },
-  { -0.10927417397178038, 20.000000000000000, 35.000000000000000 },
-  { 0.12779393355084889, 20.000000000000000, 40.000000000000000 },
-  { 0.0047633437900313621, 20.000000000000000, 45.000000000000000 },
-  { -0.11670435275957974, 20.000000000000000, 50.000000000000000 },
-  { 0.025389204574566639, 20.000000000000000, 55.000000000000000 },
-  { 0.10266020557876326, 20.000000000000000, 60.000000000000000 },
-  { -0.023138582263434154, 20.000000000000000, 65.000000000000000 },
-  { -0.096058573489952365, 20.000000000000000, 70.000000000000000 },
-  { 0.0068961047221522270, 20.000000000000000, 75.000000000000000 },
-  { 0.090565405489918357, 20.000000000000000, 80.000000000000000 },
-  { 0.015985497599497172, 20.000000000000000, 85.000000000000000 },
-  { -0.080345344044422534, 20.000000000000000, 90.000000000000000 },
-  { -0.040253075701614051, 20.000000000000000, 95.000000000000000 },
-  { 0.062217458498338672, 20.000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 7.7212541915727684e-15 at index 15
+// max(|f - f_GSL| / |f_GSL|): 1.1196544285022136e-12
+// mean(f - f_GSL): 5.2156489342296849e-16
+// variance(f - f_GSL): 3.4201480080426176e-31
+// stddev(f - f_GSL): 5.8482031497226715e-16
+const testcase_cyl_bessel_j<double>
+data024[21] =
+{
+  { 0.0000000000000000, 20.000000000000000, 0.0000000000000000, 0.0 },
+  { 2.7703300521289426e-11, 20.000000000000000, 5.0000000000000000, 0.0 },
+  { 1.1513369247813403e-05, 20.000000000000000, 10.000000000000000, 0.0 },
+  { 0.0073602340792234934, 20.000000000000000, 15.000000000000000, 0.0 },
+  { 0.16474777377532665, 20.000000000000000, 20.000000000000000, 0.0 },
+  { 0.051994049228303307, 20.000000000000000, 25.000000000000000, 0.0 },
+  { 0.0048310199934040923, 20.000000000000000, 30.000000000000000, 0.0 },
+  { -0.10927417397178038, 20.000000000000000, 35.000000000000000, 0.0 },
+  { 0.12779393355084889, 20.000000000000000, 40.000000000000000, 0.0 },
+  { 0.0047633437900313621, 20.000000000000000, 45.000000000000000, 0.0 },
+  { -0.11670435275957974, 20.000000000000000, 50.000000000000000, 0.0 },
+  { 0.025389204574566639, 20.000000000000000, 55.000000000000000, 0.0 },
+  { 0.10266020557876326, 20.000000000000000, 60.000000000000000, 0.0 },
+  { -0.023138582263434154, 20.000000000000000, 65.000000000000000, 0.0 },
+  { -0.096058573489952365, 20.000000000000000, 70.000000000000000, 0.0 },
+  { 0.0068961047221522270, 20.000000000000000, 75.000000000000000, 0.0 },
+  { 0.090565405489918357, 20.000000000000000, 80.000000000000000, 0.0 },
+  { 0.015985497599497172, 20.000000000000000, 85.000000000000000, 0.0 },
+  { -0.080345344044422534, 20.000000000000000, 90.000000000000000, 0.0 },
+  { -0.040253075701614051, 20.000000000000000, 95.000000000000000, 0.0 },
+  { 0.062217458498338672, 20.000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=20.000000000000000.
-template<typename Tp>
-  void
-  test018()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data018)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data018[i].nu), Tp(data018[i].x));
-       const Tp f0 = data018[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
-  }
+const double toler024 = 1.0000000000000006e-10;
 
 // Test data for nu=50.000000000000000.
-testcase_cyl_bessel_j<double> data019[] = {
-  { 0.0000000000000000, 50.000000000000000, 0.0000000000000000 },
-  { 2.2942476159525415e-45, 50.000000000000000, 5.0000000000000000 },
-  { 1.7845136078715964e-30, 50.000000000000000, 10.000000000000000 },
-  { 6.1060519495338733e-22, 50.000000000000000, 15.000000000000000 },
-  { 4.4510392847006872e-16, 50.000000000000000, 20.000000000000000 },
-  { 9.7561594280229808e-12, 50.000000000000000, 25.000000000000000 },
-  { 2.0581656631564172e-08, 50.000000000000000, 30.000000000000000 },
-  { 7.6069951699272960e-06, 50.000000000000000, 35.000000000000000 },
-  { 0.00068185243531768309, 50.000000000000000, 40.000000000000000 },
-  { 0.017284343240791214, 50.000000000000000, 45.000000000000000 },
-  { 0.12140902189761507, 50.000000000000000, 50.000000000000000 },
-  { 0.13594720957176012, 50.000000000000000, 55.000000000000000 },
-  { -0.13798273148535209, 50.000000000000000, 60.000000000000000 },
-  { 0.12116217746619409, 50.000000000000000, 65.000000000000000 },
-  { -0.11394866738787145, 50.000000000000000, 70.000000000000000 },
-  { 0.094076799581573348, 50.000000000000000, 75.000000000000000 },
-  { -0.039457764590251347, 50.000000000000000, 80.000000000000000 },
-  { -0.040412060734136383, 50.000000000000000, 85.000000000000000 },
-  { 0.090802099838032266, 50.000000000000000, 90.000000000000000 },
-  { -0.055979156267280165, 50.000000000000000, 95.000000000000000 },
-  { -0.038698339728525440, 50.000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 6.6543992538470320e-15 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.6466369526724007e-13
+// mean(f - f_GSL): -1.7248164093189558e-16
+// variance(f - f_GSL): 3.3098955753115488e-31
+// stddev(f - f_GSL): 5.7531691921162455e-16
+const testcase_cyl_bessel_j<double>
+data025[21] =
+{
+  { 0.0000000000000000, 50.000000000000000, 0.0000000000000000, 0.0 },
+  { 2.2942476159525415e-45, 50.000000000000000, 5.0000000000000000, 0.0 },
+  { 1.7845136078715964e-30, 50.000000000000000, 10.000000000000000, 0.0 },
+  { 6.1060519495338733e-22, 50.000000000000000, 15.000000000000000, 0.0 },
+  { 4.4510392847006872e-16, 50.000000000000000, 20.000000000000000, 0.0 },
+  { 9.7561594280229808e-12, 50.000000000000000, 25.000000000000000, 0.0 },
+  { 2.0581656631564172e-08, 50.000000000000000, 30.000000000000000, 0.0 },
+  { 7.6069951699272960e-06, 50.000000000000000, 35.000000000000000, 0.0 },
+  { 0.00068185243531768309, 50.000000000000000, 40.000000000000000, 0.0 },
+  { 0.017284343240791214, 50.000000000000000, 45.000000000000000, 0.0 },
+  { 0.12140902189761507, 50.000000000000000, 50.000000000000000, 0.0 },
+  { 0.13594720957176012, 50.000000000000000, 55.000000000000000, 0.0 },
+  { -0.13798273148535209, 50.000000000000000, 60.000000000000000, 0.0 },
+  { 0.12116217746619409, 50.000000000000000, 65.000000000000000, 0.0 },
+  { -0.11394866738787145, 50.000000000000000, 70.000000000000000, 0.0 },
+  { 0.094076799581573348, 50.000000000000000, 75.000000000000000, 0.0 },
+  { -0.039457764590251347, 50.000000000000000, 80.000000000000000, 0.0 },
+  { -0.040412060734136383, 50.000000000000000, 85.000000000000000, 0.0 },
+  { 0.090802099838032266, 50.000000000000000, 90.000000000000000, 0.0 },
+  { -0.055979156267280165, 50.000000000000000, 95.000000000000000, 0.0 },
+  { -0.038698339728525440, 50.000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=50.000000000000000.
-template<typename Tp>
-  void
-  test019()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data019)
-                          / sizeof(testcase_cyl_bessel_j<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data019[i].nu), Tp(data019[i].x));
-       const Tp f0 = data019[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
-  }
+const double toler025 = 1.0000000000000006e-11;
 
 // Test data for nu=100.00000000000000.
-testcase_cyl_bessel_j<double> data020[] = {
-  { 0.0000000000000000, 100.00000000000000, 0.0000000000000000 },
-  { 6.2677893955418763e-119, 100.00000000000000, 5.0000000000000000 },
-  { 6.5973160641553816e-89, 100.00000000000000, 10.000000000000000 },
-  { 1.9660095611249536e-71, 100.00000000000000, 15.000000000000000 },
-  { 3.9617550943362524e-59, 100.00000000000000, 20.000000000000000 },
-  { 1.1064482655301687e-49, 100.00000000000000, 25.000000000000000 },
-  { 4.5788015281752354e-42, 100.00000000000000, 30.000000000000000 },
-  { 9.9210206714732606e-36, 100.00000000000000, 35.000000000000000 },
-  { 2.3866062996027414e-30, 100.00000000000000, 40.000000000000000 },
-  { 1.0329791804565538e-25, 100.00000000000000, 45.000000000000000 },
-  { 1.1159273690838340e-21, 100.00000000000000, 50.000000000000000 },
-  { 3.7899753451900682e-18, 100.00000000000000, 55.000000000000000 },
-  { 4.7832744078781205e-15, 100.00000000000000, 60.000000000000000 },
-  { 2.5375564579490517e-12, 100.00000000000000, 65.000000000000000 },
-  { 6.1982452141641260e-10, 100.00000000000000, 70.000000000000000 },
-  { 7.4479005905904457e-08, 100.00000000000000, 75.000000000000000 },
-  { 4.6065530648234948e-06, 100.00000000000000, 80.000000000000000 },
-  { 0.00015043869999501765, 100.00000000000000, 85.000000000000000 },
-  { 0.0026021305819963472, 100.00000000000000, 90.000000000000000 },
-  { 0.023150768009428030, 100.00000000000000, 95.000000000000000 },
-  { 0.096366673295861571, 100.00000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 6.3751087742147661e-17 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3655432948759698e-13
+// mean(f - f_GSL): -3.2198025339906150e-18
+// variance(f - f_GSL): 7.7469087160903957e-35
+// stddev(f - f_GSL): 8.8016525244356221e-18
+const testcase_cyl_bessel_j<double>
+data026[21] =
+{
+  { 0.0000000000000000, 100.00000000000000, 0.0000000000000000, 0.0 },
+  { 6.2677893955418763e-119, 100.00000000000000, 5.0000000000000000, 0.0 },
+  { 6.5973160641553816e-89, 100.00000000000000, 10.000000000000000, 0.0 },
+  { 1.9660095611249536e-71, 100.00000000000000, 15.000000000000000, 0.0 },
+  { 3.9617550943362524e-59, 100.00000000000000, 20.000000000000000, 0.0 },
+  { 1.1064482655301687e-49, 100.00000000000000, 25.000000000000000, 0.0 },
+  { 4.5788015281752354e-42, 100.00000000000000, 30.000000000000000, 0.0 },
+  { 9.9210206714735426e-36, 100.00000000000000, 35.000000000000000, 0.0 },
+  { 2.3866062996026735e-30, 100.00000000000000, 40.000000000000000, 0.0 },
+  { 1.0329791804565538e-25, 100.00000000000000, 45.000000000000000, 0.0 },
+  { 1.1159273690838498e-21, 100.00000000000000, 50.000000000000000, 0.0 },
+  { 3.7899753451900944e-18, 100.00000000000000, 55.000000000000000, 0.0 },
+  { 4.7832744078782562e-15, 100.00000000000000, 60.000000000000000, 0.0 },
+  { 2.5375564579490428e-12, 100.00000000000000, 65.000000000000000, 0.0 },
+  { 6.1982452141641260e-10, 100.00000000000000, 70.000000000000000, 0.0 },
+  { 7.4479005905904457e-08, 100.00000000000000, 75.000000000000000, 0.0 },
+  { 4.6065530648234940e-06, 100.00000000000000, 80.000000000000000, 0.0 },
+  { 0.00015043869999501787, 100.00000000000000, 85.000000000000000, 0.0 },
+  { 0.0026021305819963628, 100.00000000000000, 90.000000000000000, 0.0 },
+  { 0.023150768009428030, 100.00000000000000, 95.000000000000000, 0.0 },
+  { 0.096366673295861571, 100.00000000000000, 100.00000000000000, 0.0 },
 };
+const double toler026 = 1.0000000000000006e-11;
 
-// Test function for nu=100.00000000000000.
-template<typename Tp>
+template<typename Ret, unsigned int Num>
   void
-  test020()
+  test(const testcase_cyl_bessel_j<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data020)
-                          / sizeof(testcase_cyl_bessel_j<double>);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::tr1::cyl_bessel_j(Tp(data020[i].nu), Tp(data020[i].x));
-       const Tp f0 = data020[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::tr1::cyl_bessel_j(data[i].nu, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
       }
-    VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
+    VERIFY(max_abs_frac < toler);
   }
 
 int
 main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
-  test015<double>();
-  test016<double>();
-  test017<double>();
-  test018<double>();
-  test019<double>();
-  test020<double>();
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
+  test(data016, toler016);
+  test(data017, toler017);
+  test(data018, toler018);
+  test(data019, toler019);
+  test(data020, toler020);
+  test(data021, toler021);
+  test(data022, toler022);
+  test(data023, toler023);
+  test(data024, toler024);
+  test(data025, toler025);
+  test(data026, toler026);
   return 0;
 }
index a445a91..a73152c 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  cyl_bessel_k
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for nu=0.0000000000000000.
-testcase_cyl_bessel_k<double> data001[] = {
-  { 1.5415067512483025, 0.0000000000000000, 0.25000000000000000 },
-  { 0.92441907122766565, 0.0000000000000000, 0.50000000000000000 },
-  { 0.61058242211646430, 0.0000000000000000, 0.75000000000000000 },
-  { 0.42102443824070829, 0.0000000000000000, 1.0000000000000000 },
-  { 0.29760308908410588, 0.0000000000000000, 1.2500000000000000 },
-  { 0.21380556264752565, 0.0000000000000000, 1.5000000000000000 },
-  { 0.15537981238660362, 0.0000000000000000, 1.7500000000000000 },
-  { 0.11389387274953360, 0.0000000000000000, 2.0000000000000000 },
-  { 0.084043111974658191, 0.0000000000000000, 2.2500000000000000 },
-  { 0.062347553200366168, 0.0000000000000000, 2.5000000000000000 },
-  { 0.046454901308760774, 0.0000000000000000, 2.7500000000000000 },
-  { 0.034739504386279256, 0.0000000000000000, 3.0000000000000000 },
-  { 0.026058755255154966, 0.0000000000000000, 3.2500000000000000 },
-  { 0.019598897170368501, 0.0000000000000000, 3.5000000000000000 },
-  { 0.014774250877128706, 0.0000000000000000, 3.7500000000000000 },
-  { 0.011159676085853026, 0.0000000000000000, 4.0000000000000000 },
-  { 0.0084443877245429649, 0.0000000000000000, 4.2500000000000000 },
-  { 0.0063998572432339747, 0.0000000000000000, 4.5000000000000000 },
-  { 0.0048572045578879524, 0.0000000000000000, 4.7500000000000000 },
-  { 0.0036910983340425947, 0.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 0
+// max(|f - f_GSL| / |f_GSL|): 3.3025402038894216e-16
+// mean(f - f_GSL): 1.0473392986209972e-17
+// variance(f - f_GSL): 5.5842559222476003e-36
+// stddev(f - f_GSL): 2.3631030282760842e-18
+const testcase_cyl_bessel_k<double>
+data007[20] =
+{
+  { 1.5415067512483025, 0.0000000000000000, 0.25000000000000000, 0.0 },
+  { 0.92441907122766565, 0.0000000000000000, 0.50000000000000000, 0.0 },
+  { 0.61058242211646430, 0.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.42102443824070834, 0.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.29760308908410588, 0.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.21380556264752565, 0.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.15537981238660359, 0.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.11389387274953360, 0.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.084043111974658191, 0.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.062347553200366168, 0.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.046454901308760774, 0.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.034739504386279256, 0.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.026058755255154966, 0.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.019598897170368501, 0.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.014774250877128707, 0.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.011159676085853030, 0.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.0084443877245429649, 0.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.0063998572432339756, 0.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.0048572045578879524, 0.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.0036910983340425947, 0.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.0000000000000000.
-template<typename Tp>
-  void
-  test001()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data001)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data001[i].nu), Tp(data001[i].x));
-       const Tp f0 = data001[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler007 = 2.5000000000000020e-13;
 
 // Test data for nu=0.33333333333333331.
-testcase_cyl_bessel_k<double> data002[] = {
-  { 1.7144912564234518, 0.33333333333333331, 0.25000000000000000 },
-  { 0.98903107424672421, 0.33333333333333331, 0.50000000000000000 },
-  { 0.64216899667282989, 0.33333333333333331, 0.75000000000000000 },
-  { 0.43843063344153432, 0.33333333333333331, 1.0000000000000000 },
-  { 0.30788192414945043, 0.33333333333333331, 1.2500000000000000 },
-  { 0.22015769026776688, 0.33333333333333331, 1.5000000000000000 },
-  { 0.15943413057311245, 0.33333333333333331, 1.7500000000000000 },
-  { 0.11654496129616534, 0.33333333333333331, 2.0000000000000000 },
-  { 0.085809609306439674, 0.33333333333333331, 2.2500000000000000 },
-  { 0.063542537454733386, 0.33333333333333331, 2.5000000000000000 },
-  { 0.047273354184795509, 0.33333333333333331, 2.7500000000000000 },
-  { 0.035305904902162587, 0.33333333333333331, 3.0000000000000000 },
-  { 0.026454186892773169, 0.33333333333333331, 3.2500000000000000 },
-  { 0.019877061407943805, 0.33333333333333331, 3.5000000000000000 },
-  { 0.014971213514760214, 0.33333333333333331, 3.7500000000000000 },
-  { 0.011299947573672165, 0.33333333333333331, 4.0000000000000000 },
-  { 0.0085447959546110473, 0.33333333333333331, 4.2500000000000000 },
-  { 0.0064720581217078237, 0.33333333333333331, 4.5000000000000000 },
-  { 0.0049093342803275264, 0.33333333333333331, 4.7500000000000000 },
-  { 0.0037288750960535887, 0.33333333333333331, 5.0000000000000000 },
+// max(|f - f_GSL|): 9.1593399531575415e-16 at index 5
+// max(|f - f_GSL| / |f_GSL|): 4.1603543087763551e-15
+// mean(f - f_GSL): -2.0157486790850499e-16
+// variance(f - f_GSL): 2.2511040095474369e-33
+// stddev(f - f_GSL): 4.7445800757785052e-17
+const testcase_cyl_bessel_k<double>
+data008[20] =
+{
+  { 1.7144912564234513, 0.33333333333333331, 0.25000000000000000, 0.0 },
+  { 0.98903107424672421, 0.33333333333333331, 0.50000000000000000, 0.0 },
+  { 0.64216899667282989, 0.33333333333333331, 0.75000000000000000, 0.0 },
+  { 0.43843063344153443, 0.33333333333333331, 1.0000000000000000, 0.0 },
+  { 0.30788192414945043, 0.33333333333333331, 1.2500000000000000, 0.0 },
+  { 0.22015769026776688, 0.33333333333333331, 1.5000000000000000, 0.0 },
+  { 0.15943413057311243, 0.33333333333333331, 1.7500000000000000, 0.0 },
+  { 0.11654496129616534, 0.33333333333333331, 2.0000000000000000, 0.0 },
+  { 0.085809609306439674, 0.33333333333333331, 2.2500000000000000, 0.0 },
+  { 0.063542537454733386, 0.33333333333333331, 2.5000000000000000, 0.0 },
+  { 0.047273354184795509, 0.33333333333333331, 2.7500000000000000, 0.0 },
+  { 0.035305904902162587, 0.33333333333333331, 3.0000000000000000, 0.0 },
+  { 0.026454186892773169, 0.33333333333333331, 3.2500000000000000, 0.0 },
+  { 0.019877061407943805, 0.33333333333333331, 3.5000000000000000, 0.0 },
+  { 0.014971213514760216, 0.33333333333333331, 3.7500000000000000, 0.0 },
+  { 0.011299947573672166, 0.33333333333333331, 4.0000000000000000, 0.0 },
+  { 0.0085447959546110473, 0.33333333333333331, 4.2500000000000000, 0.0 },
+  { 0.0064720581217078245, 0.33333333333333331, 4.5000000000000000, 0.0 },
+  { 0.0049093342803275264, 0.33333333333333331, 4.7500000000000000, 0.0 },
+  { 0.0037288750960535887, 0.33333333333333331, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.33333333333333331.
-template<typename Tp>
-  void
-  test002()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data002)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data002[i].nu), Tp(data002[i].x));
-       const Tp f0 = data002[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler008 = 2.5000000000000020e-13;
 
 // Test data for nu=0.50000000000000000.
-testcase_cyl_bessel_k<double> data003[] = {
-  { 1.9521640631515476, 0.50000000000000000, 0.25000000000000000 },
-  { 1.0750476034999195, 0.50000000000000000, 0.50000000000000000 },
-  { 0.68361006034952421, 0.50000000000000000, 0.75000000000000000 },
-  { 0.46106850444789454, 0.50000000000000000, 1.0000000000000000 },
-  { 0.32117137397144746, 0.50000000000000000, 1.2500000000000000 },
-  { 0.22833505222826550, 0.50000000000000000, 1.5000000000000000 },
-  { 0.16463628997380864, 0.50000000000000000, 1.7500000000000000 },
-  { 0.11993777196806145, 0.50000000000000000, 2.0000000000000000 },
-  { 0.088065558803650454, 0.50000000000000000, 2.2500000000000000 },
-  { 0.065065943154009986, 0.50000000000000000, 2.5000000000000000 },
-  { 0.048315198301417825, 0.50000000000000000, 2.7500000000000000 },
-  { 0.036025985131764589, 0.50000000000000000, 3.0000000000000000 },
-  { 0.026956356532443351, 0.50000000000000000, 3.2500000000000000 },
-  { 0.020229969578139294, 0.50000000000000000, 3.5000000000000000 },
-  { 0.015220888252975564, 0.50000000000000000, 3.7500000000000000 },
-  { 0.011477624576608052, 0.50000000000000000, 4.0000000000000000 },
-  { 0.0086718932956978342, 0.50000000000000000, 4.2500000000000000 },
-  { 0.0065633945646345407, 0.50000000000000000, 4.5000000000000000 },
-  { 0.0049752435421262292, 0.50000000000000000, 4.7500000000000000 },
-  { 0.0037766133746428825, 0.50000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.3827172837936134e-15
+// mean(f - f_GSL): 7.5200262683594590e-17
+// variance(f - f_GSL): 3.1330080374967473e-34
+// stddev(f - f_GSL): 1.7700305188037711e-17
+const testcase_cyl_bessel_k<double>
+data009[20] =
+{
+  { 1.9521640631515476, 0.50000000000000000, 0.25000000000000000, 0.0 },
+  { 1.0750476034999195, 0.50000000000000000, 0.50000000000000000, 0.0 },
+  { 0.68361006034952432, 0.50000000000000000, 0.75000000000000000, 0.0 },
+  { 0.46106850444789443, 0.50000000000000000, 1.0000000000000000, 0.0 },
+  { 0.32117137397144746, 0.50000000000000000, 1.2500000000000000, 0.0 },
+  { 0.22833505222826550, 0.50000000000000000, 1.5000000000000000, 0.0 },
+  { 0.16463628997380861, 0.50000000000000000, 1.7500000000000000, 0.0 },
+  { 0.11993777196806145, 0.50000000000000000, 2.0000000000000000, 0.0 },
+  { 0.088065558803650454, 0.50000000000000000, 2.2500000000000000, 0.0 },
+  { 0.065065943154009986, 0.50000000000000000, 2.5000000000000000, 0.0 },
+  { 0.048315198301417825, 0.50000000000000000, 2.7500000000000000, 0.0 },
+  { 0.036025985131764589, 0.50000000000000000, 3.0000000000000000, 0.0 },
+  { 0.026956356532443351, 0.50000000000000000, 3.2500000000000000, 0.0 },
+  { 0.020229969578139294, 0.50000000000000000, 3.5000000000000000, 0.0 },
+  { 0.015220888252975568, 0.50000000000000000, 3.7500000000000000, 0.0 },
+  { 0.011477624576608053, 0.50000000000000000, 4.0000000000000000, 0.0 },
+  { 0.0086718932956978342, 0.50000000000000000, 4.2500000000000000, 0.0 },
+  { 0.0065633945646345424, 0.50000000000000000, 4.5000000000000000, 0.0 },
+  { 0.0049752435421262292, 0.50000000000000000, 4.7500000000000000, 0.0 },
+  { 0.0037766133746428825, 0.50000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.50000000000000000.
-template<typename Tp>
-  void
-  test003()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data003)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data003[i].nu), Tp(data003[i].x));
-       const Tp f0 = data003[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler009 = 2.5000000000000020e-13;
 
 // Test data for nu=0.66666666666666663.
-testcase_cyl_bessel_k<double> data004[] = {
-  { 2.3289060745544101, 0.66666666666666663, 0.25000000000000000 },
-  { 1.2059304647203353, 0.66666666666666663, 0.50000000000000000 },
-  { 0.74547232976647215, 0.66666666666666663, 0.75000000000000000 },
-  { 0.49447506210420827, 0.66666666666666663, 1.0000000000000000 },
-  { 0.34062994813514252, 0.66666666666666663, 1.2500000000000000 },
-  { 0.24024045240315581, 0.66666666666666663, 1.5000000000000000 },
-  { 0.17217716908452310, 0.66666666666666663, 1.7500000000000000 },
-  { 0.12483892748812841, 0.66666666666666663, 2.0000000000000000 },
-  { 0.091315296079621050, 0.66666666666666663, 2.2500000000000000 },
-  { 0.067255322171623361, 0.66666666666666663, 2.5000000000000000 },
-  { 0.049809546542402224, 0.66666666666666663, 2.7500000000000000 },
-  { 0.037057074495188531, 0.66666666666666663, 3.0000000000000000 },
-  { 0.027674365504886729, 0.66666666666666663, 3.2500000000000000 },
-  { 0.020733915836010912, 0.66666666666666663, 3.5000000000000000 },
-  { 0.015577015510251332, 0.66666666666666663, 3.7500000000000000 },
-  { 0.011730801456525336, 0.66666666666666663, 4.0000000000000000 },
-  { 0.0088528343204658851, 0.66666666666666663, 4.2500000000000000 },
-  { 0.0066933190915775560, 0.66666666666666663, 4.5000000000000000 },
-  { 0.0050689292106255480, 0.66666666666666663, 4.7500000000000000 },
-  { 0.0038444246344968226, 0.66666666666666663, 5.0000000000000000 },
+// max(|f - f_GSL|): 8.3266726846886741e-16 at index 4
+// max(|f - f_GSL| / |f_GSL|): 2.4444922503951783e-15
+// mean(f - f_GSL): 1.5718763096694843e-16
+// variance(f - f_GSL): 1.3764253709076715e-33
+// stddev(f - f_GSL): 3.7100207154511570e-17
+const testcase_cyl_bessel_k<double>
+data010[20] =
+{
+  { 2.3289060745544101, 0.66666666666666663, 0.25000000000000000, 0.0 },
+  { 1.2059304647203353, 0.66666666666666663, 0.50000000000000000, 0.0 },
+  { 0.74547232976647226, 0.66666666666666663, 0.75000000000000000, 0.0 },
+  { 0.49447506210420811, 0.66666666666666663, 1.0000000000000000, 0.0 },
+  { 0.34062994813514252, 0.66666666666666663, 1.2500000000000000, 0.0 },
+  { 0.24024045240315581, 0.66666666666666663, 1.5000000000000000, 0.0 },
+  { 0.17217716908452307, 0.66666666666666663, 1.7500000000000000, 0.0 },
+  { 0.12483892748812841, 0.66666666666666663, 2.0000000000000000, 0.0 },
+  { 0.091315296079621050, 0.66666666666666663, 2.2500000000000000, 0.0 },
+  { 0.067255322171623361, 0.66666666666666663, 2.5000000000000000, 0.0 },
+  { 0.049809546542402224, 0.66666666666666663, 2.7500000000000000, 0.0 },
+  { 0.037057074495188531, 0.66666666666666663, 3.0000000000000000, 0.0 },
+  { 0.027674365504886729, 0.66666666666666663, 3.2500000000000000, 0.0 },
+  { 0.020733915836010912, 0.66666666666666663, 3.5000000000000000, 0.0 },
+  { 0.015577015510251336, 0.66666666666666663, 3.7500000000000000, 0.0 },
+  { 0.011730801456525337, 0.66666666666666663, 4.0000000000000000, 0.0 },
+  { 0.0088528343204658851, 0.66666666666666663, 4.2500000000000000, 0.0 },
+  { 0.0066933190915775568, 0.66666666666666663, 4.5000000000000000, 0.0 },
+  { 0.0050689292106255480, 0.66666666666666663, 4.7500000000000000, 0.0 },
+  { 0.0038444246344968226, 0.66666666666666663, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.66666666666666663.
-template<typename Tp>
-  void
-  test004()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data004)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data004[i].nu), Tp(data004[i].x));
-       const Tp f0 = data004[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler010 = 2.5000000000000020e-13;
 
 // Test data for nu=1.0000000000000000.
-testcase_cyl_bessel_k<double> data005[] = {
-  { 3.7470259744407115, 1.0000000000000000, 0.25000000000000000 },
-  { 1.6564411200033007, 1.0000000000000000, 0.50000000000000000 },
-  { 0.94958046696214016, 1.0000000000000000, 0.75000000000000000 },
-  { 0.60190723019723458, 1.0000000000000000, 1.0000000000000000 },
-  { 0.40212407978419540, 1.0000000000000000, 1.2500000000000000 },
-  { 0.27738780045684375, 1.0000000000000000, 1.5000000000000000 },
-  { 0.19547745347439310, 1.0000000000000000, 1.7500000000000000 },
-  { 0.13986588181652262, 1.0000000000000000, 2.0000000000000000 },
-  { 0.10121630256832535, 1.0000000000000000, 2.2500000000000000 },
-  { 0.073890816347747038, 1.0000000000000000, 2.5000000000000000 },
-  { 0.054318522758919859, 1.0000000000000000, 2.7500000000000000 },
-  { 0.040156431128194198, 1.0000000000000000, 3.0000000000000000 },
-  { 0.029825529796040143, 1.0000000000000000, 3.2500000000000000 },
-  { 0.022239392925923845, 1.0000000000000000, 3.5000000000000000 },
-  { 0.016638191754688912, 1.0000000000000000, 3.7500000000000000 },
-  { 0.012483498887268435, 1.0000000000000000, 4.0000000000000000 },
-  { 0.0093896806560432589, 1.0000000000000000, 4.2500000000000000 },
-  { 0.0070780949089680901, 1.0000000000000000, 4.5000000000000000 },
-  { 0.0053459218178228390, 1.0000000000000000, 4.7500000000000000 },
-  { 0.0040446134454521655, 1.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 5.5511151231257827e-17 at index 5
+// max(|f - f_GSL| / |f_GSL|): 4.1133060946717609e-16
+// mean(f - f_GSL): 9.1072982488782376e-19
+// variance(f - f_GSL): 4.5951734844332747e-38
+// stddev(f - f_GSL): 2.1436355764059512e-19
+const testcase_cyl_bessel_k<double>
+data011[20] =
+{
+  { 3.7470259744407115, 1.0000000000000000, 0.25000000000000000, 0.0 },
+  { 1.6564411200033007, 1.0000000000000000, 0.50000000000000000, 0.0 },
+  { 0.94958046696214016, 1.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.60190723019723458, 1.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.40212407978419540, 1.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.27738780045684375, 1.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.19547745347439305, 1.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.13986588181652262, 1.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.10121630256832535, 1.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.073890816347747038, 1.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.054318522758919859, 1.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.040156431128194198, 1.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.029825529796040143, 1.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.022239392925923845, 1.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.016638191754688916, 1.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.012483498887268437, 1.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.0093896806560432589, 1.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.0070780949089680918, 1.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.0053459218178228390, 1.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.0040446134454521655, 1.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=1.0000000000000000.
-template<typename Tp>
-  void
-  test005()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data005)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data005[i].nu), Tp(data005[i].x));
-       const Tp f0 = data005[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler011 = 2.5000000000000020e-13;
 
 // Test data for nu=2.0000000000000000.
-testcase_cyl_bessel_k<double> data006[] = {
-  { 31.517714546773998, 2.0000000000000000, 0.25000000000000000 },
-  { 7.5501835512408695, 2.0000000000000000, 0.50000000000000000 },
-  { 3.1427970006821715, 2.0000000000000000, 0.75000000000000000 },
-  { 1.6248388986351774, 2.0000000000000000, 1.0000000000000000 },
-  { 0.94100161673881855, 2.0000000000000000, 1.2500000000000000 },
-  { 0.58365596325665070, 2.0000000000000000, 1.5000000000000000 },
-  { 0.37878261635733856, 2.0000000000000000, 1.7500000000000000 },
-  { 0.25375975456605621, 2.0000000000000000, 2.0000000000000000 },
-  { 0.17401315870205850, 2.0000000000000000, 2.2500000000000000 },
-  { 0.12146020627856381, 2.0000000000000000, 2.5000000000000000 },
-  { 0.085959281497066137, 2.0000000000000000, 2.7500000000000000 },
-  { 0.061510458471742059, 2.0000000000000000, 3.0000000000000000 },
-  { 0.044412927437333515, 2.0000000000000000, 3.2500000000000000 },
-  { 0.032307121699467839, 2.0000000000000000, 3.5000000000000000 },
-  { 0.023647953146296127, 2.0000000000000000, 3.7500000000000000 },
-  { 0.017401425529487244, 2.0000000000000000, 4.0000000000000000 },
-  { 0.012863060974445674, 2.0000000000000000, 4.2500000000000000 },
-  { 0.0095456772027753475, 2.0000000000000000, 4.5000000000000000 },
-  { 0.0071081190074975690, 2.0000000000000000, 4.7500000000000000 },
-  { 0.0053089437122234608, 2.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 3.5527136788005009e-15 at index 0
+// max(|f - f_GSL| / |f_GSL|): 3.2289213139335320e-16
+// mean(f - f_GSL): -2.2187113257743364e-16
+// variance(f - f_GSL): 2.7486114598283265e-33
+// stddev(f - f_GSL): 5.2427201525814123e-17
+const testcase_cyl_bessel_k<double>
+data012[20] =
+{
+  { 31.517714546773998, 2.0000000000000000, 0.25000000000000000, 0.0 },
+  { 7.5501835512408695, 2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 3.1427970006821715, 2.0000000000000000, 0.75000000000000000, 0.0 },
+  { 1.6248388986351774, 2.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.94100161673881855, 2.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.58365596325665070, 2.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.37878261635733851, 2.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.25375975456605621, 2.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.17401315870205850, 2.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.12146020627856381, 2.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.085959281497066137, 2.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.061510458471742059, 2.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.044412927437333515, 2.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.032307121699467839, 2.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.023647953146296131, 2.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.017401425529487247, 2.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.012863060974445674, 2.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.0095456772027753493, 2.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.0071081190074975690, 2.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.0053089437122234608, 2.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=2.0000000000000000.
-template<typename Tp>
-  void
-  test006()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data006)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data006[i].nu), Tp(data006[i].x));
-       const Tp f0 = data006[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler012 = 2.5000000000000020e-13;
 
 // Test data for nu=5.0000000000000000.
-testcase_cyl_bessel_k<double> data007[] = {
-  { 391683.98962334893, 5.0000000000000000, 0.25000000000000000 },
-  { 12097.979476096394, 5.0000000000000000, 0.50000000000000000 },
-  { 1562.5870339691098, 5.0000000000000000, 0.75000000000000000 },
-  { 360.96058960124066, 5.0000000000000000, 1.0000000000000000 },
-  { 114.29321426334016, 5.0000000000000000, 1.2500000000000000 },
-  { 44.067781159301056, 5.0000000000000000, 1.5000000000000000 },
-  { 19.426568687730292, 5.0000000000000000, 1.7500000000000000 },
-  { 9.4310491005964820, 5.0000000000000000, 2.0000000000000000 },
-  { 4.9221270549918685, 5.0000000000000000, 2.2500000000000000 },
-  { 2.7168842907865423, 5.0000000000000000, 2.5000000000000000 },
-  { 1.5677685890536335, 5.0000000000000000, 2.7500000000000000 },
-  { 0.93777360238680818, 5.0000000000000000, 3.0000000000000000 },
-  { 0.57775534736785106, 5.0000000000000000, 3.2500000000000000 },
-  { 0.36482440208451983, 5.0000000000000000, 3.5000000000000000 },
-  { 0.23520290620082257, 5.0000000000000000, 3.7500000000000000 },
-  { 0.15434254872599723, 5.0000000000000000, 4.0000000000000000 },
-  { 0.10283347176876455, 5.0000000000000000, 4.2500000000000000 },
-  { 0.069423643150881773, 5.0000000000000000, 4.5000000000000000 },
-  { 0.047410616917942211, 5.0000000000000000, 4.7500000000000000 },
-  { 0.032706273712031865, 5.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 5.8207660913467407e-11 at index 0
+// max(|f - f_GSL| / |f_GSL|): 5.4133817134973930e-16
+// mean(f - f_GSL): -3.0029749520377179e-12
+// variance(f - f_GSL): 4.9960666134422494e-25
+// stddev(f - f_GSL): 7.0682859403410163e-13
+const testcase_cyl_bessel_k<double>
+data013[20] =
+{
+  { 391683.98962334893, 5.0000000000000000, 0.25000000000000000, 0.0 },
+  { 12097.979476096394, 5.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1562.5870339691098, 5.0000000000000000, 0.75000000000000000, 0.0 },
+  { 360.96058960124071, 5.0000000000000000, 1.0000000000000000, 0.0 },
+  { 114.29321426334016, 5.0000000000000000, 1.2500000000000000, 0.0 },
+  { 44.067781159301056, 5.0000000000000000, 1.5000000000000000, 0.0 },
+  { 19.426568687730288, 5.0000000000000000, 1.7500000000000000, 0.0 },
+  { 9.4310491005964820, 5.0000000000000000, 2.0000000000000000, 0.0 },
+  { 4.9221270549918685, 5.0000000000000000, 2.2500000000000000, 0.0 },
+  { 2.7168842907865423, 5.0000000000000000, 2.5000000000000000, 0.0 },
+  { 1.5677685890536335, 5.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.93777360238680818, 5.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.57775534736785106, 5.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.36482440208451983, 5.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.23520290620082260, 5.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.15434254872599726, 5.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.10283347176876455, 5.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.069423643150881773, 5.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.047410616917942211, 5.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.032706273712031865, 5.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=5.0000000000000000.
-template<typename Tp>
-  void
-  test007()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data007)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data007[i].nu), Tp(data007[i].x));
-       const Tp f0 = data007[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler013 = 2.5000000000000020e-13;
 
 // Test data for nu=10.000000000000000.
-testcase_cyl_bessel_k<double> data008[] = {
-  { 194481817927839.88, 10.000000000000000, 0.25000000000000000 },
-  { 188937569319.90030, 10.000000000000000, 0.50000000000000000 },
-  { 3248187687.8018155, 10.000000000000000, 0.75000000000000000 },
-  { 180713289.90102941, 10.000000000000000, 1.0000000000000000 },
-  { 19104425.945252180, 10.000000000000000, 1.2500000000000000 },
-  { 3027483.5236822353, 10.000000000000000, 1.5000000000000000 },
-  { 633724.71555087867, 10.000000000000000, 1.7500000000000000 },
-  { 162482.40397955943, 10.000000000000000, 2.0000000000000000 },
-  { 48602.446087749791, 10.000000000000000, 2.2500000000000000 },
-  { 16406.916416341937, 10.000000000000000, 2.5000000000000000 },
-  { 6104.1720745909606, 10.000000000000000, 2.7500000000000000 },
-  { 2459.6204220569480, 10.000000000000000, 3.0000000000000000 },
-  { 1059.2358443703381, 10.000000000000000, 3.2500000000000000 },
-  { 482.53582096664758, 10.000000000000000, 3.5000000000000000 },
-  { 230.64249314993776, 10.000000000000000, 3.7500000000000000 },
-  { 114.91408364049620, 10.000000000000000, 4.0000000000000000 },
-  { 59.361613632706479, 10.000000000000000, 4.2500000000000000 },
-  { 31.652958759229868, 10.000000000000000, 4.5000000000000000 },
-  { 17.357723966417399, 10.000000000000000, 4.7500000000000000 },
-  { 9.7585628291778121, 10.000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 6.1035156250000000e-05 at index 1
+// max(|f - f_GSL| / |f_GSL|): 7.7998476565326393e-16
+// mean(f - f_GSL): -3.0495557438392496e-06
+// variance(f - f_GSL): 5.1522383752309128e-13
+// stddev(f - f_GSL): 7.1779094277031061e-07
+const testcase_cyl_bessel_k<double>
+data014[20] =
+{
+  { 194481817927839.88, 10.000000000000000, 0.25000000000000000, 0.0 },
+  { 188937569319.90030, 10.000000000000000, 0.50000000000000000, 0.0 },
+  { 3248187687.8018155, 10.000000000000000, 0.75000000000000000, 0.0 },
+  { 180713289.90102944, 10.000000000000000, 1.0000000000000000, 0.0 },
+  { 19104425.945252180, 10.000000000000000, 1.2500000000000000, 0.0 },
+  { 3027483.5236822353, 10.000000000000000, 1.5000000000000000, 0.0 },
+  { 633724.71555087867, 10.000000000000000, 1.7500000000000000, 0.0 },
+  { 162482.40397955943, 10.000000000000000, 2.0000000000000000, 0.0 },
+  { 48602.446087749791, 10.000000000000000, 2.2500000000000000, 0.0 },
+  { 16406.916416341937, 10.000000000000000, 2.5000000000000000, 0.0 },
+  { 6104.1720745909606, 10.000000000000000, 2.7500000000000000, 0.0 },
+  { 2459.6204220569480, 10.000000000000000, 3.0000000000000000, 0.0 },
+  { 1059.2358443703381, 10.000000000000000, 3.2500000000000000, 0.0 },
+  { 482.53582096664758, 10.000000000000000, 3.5000000000000000, 0.0 },
+  { 230.64249314993782, 10.000000000000000, 3.7500000000000000, 0.0 },
+  { 114.91408364049623, 10.000000000000000, 4.0000000000000000, 0.0 },
+  { 59.361613632706479, 10.000000000000000, 4.2500000000000000, 0.0 },
+  { 31.652958759229872, 10.000000000000000, 4.5000000000000000, 0.0 },
+  { 17.357723966417399, 10.000000000000000, 4.7500000000000000, 0.0 },
+  { 9.7585628291778121, 10.000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=10.000000000000000.
-template<typename Tp>
-  void
-  test008()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data008)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data008[i].nu), Tp(data008[i].x));
-       const Tp f0 = data008[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler014 = 2.5000000000000020e-13;
 
 // Test data for nu=20.000000000000000.
-testcase_cyl_bessel_k<double> data009[] = {
-  { 7.0065983661641184e+34, 20.000000000000000, 0.25000000000000000 },
-  { 6.6655498744171593e+28, 20.000000000000000, 0.50000000000000000 },
-  { 1.9962989615380379e+25, 20.000000000000000, 0.75000000000000000 },
-  { 6.2943693604245335e+22, 20.000000000000000, 1.0000000000000000 },
-  { 7.2034511920074182e+20, 20.000000000000000, 1.2500000000000000 },
-  { 1.8620549984645546e+19, 20.000000000000000, 1.5000000000000000 },
-  { 8.4415605303952486e+17, 20.000000000000000, 1.7500000000000000 },
-  { 57708568527002520., 20.000000000000000, 2.0000000000000000 },
-  { 5396824209986879.0, 20.000000000000000, 2.2500000000000000 },
-  { 645996884063683.62, 20.000000000000000, 2.5000000000000000 },
-  { 94387401970996.328, 20.000000000000000, 2.7500000000000000 },
-  { 16254643952204.371, 20.000000000000000, 3.0000000000000000 },
-  { 3212694836166.4053, 20.000000000000000, 3.2500000000000000 },
-  { 713857897923.74072, 20.000000000000000, 3.5000000000000000 },
-  { 175423421958.35925, 20.000000000000000, 3.7500000000000000 },
-  { 47050078926.298080, 20.000000000000000, 4.0000000000000000 },
-  { 13625066095.067503, 20.000000000000000, 4.2500000000000000 },
-  { 4222179870.6810656, 20.000000000000000, 4.5000000000000000 },
-  { 1389634112.7516634, 20.000000000000000, 4.7500000000000000 },
-  { 482700052.06214869, 20.000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 2.7670116110564327e+19 at index 0
+// max(|f - f_GSL| / |f_GSL|): 1.2737005853777639e-15
+// mean(f - f_GSL): -1.3835066851362150e+18
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_k<double>
+data015[20] =
+{
+  { 7.0065983661641184e+34, 20.000000000000000, 0.25000000000000000, 0.0 },
+  { 6.6655498744171593e+28, 20.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.9962989615380379e+25, 20.000000000000000, 0.75000000000000000, 0.0 },
+  { 6.2943693604245335e+22, 20.000000000000000, 1.0000000000000000, 0.0 },
+  { 7.2034511920074182e+20, 20.000000000000000, 1.2500000000000000, 0.0 },
+  { 1.8620549984645546e+19, 20.000000000000000, 1.5000000000000000, 0.0 },
+  { 8.4415605303952486e+17, 20.000000000000000, 1.7500000000000000, 0.0 },
+  { 57708568527002520., 20.000000000000000, 2.0000000000000000, 0.0 },
+  { 5396824209986879.0, 20.000000000000000, 2.2500000000000000, 0.0 },
+  { 645996884063683.62, 20.000000000000000, 2.5000000000000000, 0.0 },
+  { 94387401970996.328, 20.000000000000000, 2.7500000000000000, 0.0 },
+  { 16254643952204.371, 20.000000000000000, 3.0000000000000000, 0.0 },
+  { 3212694836166.4053, 20.000000000000000, 3.2500000000000000, 0.0 },
+  { 713857897923.74072, 20.000000000000000, 3.5000000000000000, 0.0 },
+  { 175423421958.35925, 20.000000000000000, 3.7500000000000000, 0.0 },
+  { 47050078926.298088, 20.000000000000000, 4.0000000000000000, 0.0 },
+  { 13625066095.067503, 20.000000000000000, 4.2500000000000000, 0.0 },
+  { 4222179870.6810660, 20.000000000000000, 4.5000000000000000, 0.0 },
+  { 1389634112.7516634, 20.000000000000000, 4.7500000000000000, 0.0 },
+  { 482700052.06214869, 20.000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=20.000000000000000.
-template<typename Tp>
-  void
-  test009()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data009)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data009[i].nu), Tp(data009[i].x));
-       const Tp f0 = data009[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler015 = 2.5000000000000020e-13;
 
 // Test data for nu=50.000000000000000.
-testcase_cyl_bessel_k<double> data010[] = {
-  { 4.3394604622138714e+107, 50.000000000000000, 0.25000000000000000 },
-  { 3.8505298918269003e+92, 50.000000000000000, 0.50000000000000000 },
-  { 6.0292756894842793e+83, 50.000000000000000, 0.75000000000000000 },
-  { 3.4068968541616991e+77, 50.000000000000000, 1.0000000000000000 },
-  { 4.8485527365039051e+72, 50.000000000000000, 1.2500000000000000 },
-  { 5.3091717574907920e+68, 50.000000000000000, 1.5000000000000000 },
-  { 2.3762245257445824e+65, 50.000000000000000, 1.7500000000000000 },
-  { 2.9799817396049268e+62, 50.000000000000000, 2.0000000000000000 },
-  { 8.2079431233488581e+59, 50.000000000000000, 2.2500000000000000 },
-  { 4.2046528212987503e+57, 50.000000000000000, 2.5000000000000000 },
-  { 3.5578676911884825e+55, 50.000000000000000, 2.7500000000000000 },
-  { 4.5559542293221535e+53, 50.000000000000000, 3.0000000000000000 },
-  { 8.2606735967628997e+51, 50.000000000000000, 3.2500000000000000 },
-  { 2.0139406747903812e+50, 50.000000000000000, 3.5000000000000000 },
-  { 6.3368727837484600e+48, 50.000000000000000, 3.7500000000000000 },
-  { 2.4897317389325753e+47, 50.000000000000000, 4.0000000000000000 },
-  { 1.1888958173039699e+46, 50.000000000000000, 4.2500000000000000 },
-  { 6.7472593648148542e+44, 50.000000000000000, 4.5000000000000000 },
-  { 4.4664266585930700e+43, 50.000000000000000, 4.7500000000000000 },
-  { 3.3943222434301628e+42, 50.000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 3.9111090745622133e+92 at index 0
+// max(|f - f_GSL| / |f_GSL|): 3.7220730535457535e-15
+// mean(f - f_GSL): -1.9555545372811066e+91
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_k<double>
+data016[20] =
+{
+  { 4.3394604622138714e+107, 50.000000000000000, 0.25000000000000000, 0.0 },
+  { 3.8505298918269003e+92, 50.000000000000000, 0.50000000000000000, 0.0 },
+  { 6.0292756894842793e+83, 50.000000000000000, 0.75000000000000000, 0.0 },
+  { 3.4068968541617001e+77, 50.000000000000000, 1.0000000000000000, 0.0 },
+  { 4.8485527365039051e+72, 50.000000000000000, 1.2500000000000000, 0.0 },
+  { 5.3091717574907920e+68, 50.000000000000000, 1.5000000000000000, 0.0 },
+  { 2.3762245257445824e+65, 50.000000000000000, 1.7500000000000000, 0.0 },
+  { 2.9799817396049268e+62, 50.000000000000000, 2.0000000000000000, 0.0 },
+  { 8.2079431233488581e+59, 50.000000000000000, 2.2500000000000000, 0.0 },
+  { 4.2046528212987503e+57, 50.000000000000000, 2.5000000000000000, 0.0 },
+  { 3.5578676911884825e+55, 50.000000000000000, 2.7500000000000000, 0.0 },
+  { 4.5559542293221535e+53, 50.000000000000000, 3.0000000000000000, 0.0 },
+  { 8.2606735967628997e+51, 50.000000000000000, 3.2500000000000000, 0.0 },
+  { 2.0139406747903812e+50, 50.000000000000000, 3.5000000000000000, 0.0 },
+  { 6.3368727837484613e+48, 50.000000000000000, 3.7500000000000000, 0.0 },
+  { 2.4897317389325757e+47, 50.000000000000000, 4.0000000000000000, 0.0 },
+  { 1.1888958173039699e+46, 50.000000000000000, 4.2500000000000000, 0.0 },
+  { 6.7472593648148550e+44, 50.000000000000000, 4.5000000000000000, 0.0 },
+  { 4.4664266585930700e+43, 50.000000000000000, 4.7500000000000000, 0.0 },
+  { 3.3943222434301628e+42, 50.000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=50.000000000000000.
-template<typename Tp>
-  void
-  test010()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data010)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data010[i].nu), Tp(data010[i].x));
-       const Tp f0 = data010[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler016 = 2.5000000000000020e-13;
 
 // Test data for nu=100.00000000000000.
-testcase_cyl_bessel_k<double> data011[] = {
-  { 9.5039428115809898e+245, 100.00000000000000, 0.25000000000000000 },
-  { 7.4937399313533112e+215, 100.00000000000000, 0.50000000000000000 },
-  { 1.8417471020730701e+198, 100.00000000000000, 0.75000000000000000 },
-  { 5.9003331836386410e+185, 100.00000000000000, 1.0000000000000000 },
-  { 1.2002130935576950e+176, 100.00000000000000, 1.2500000000000000 },
-  { 1.4467044226487075e+168, 100.00000000000000, 1.5000000000000000 },
-  { 2.9161498411497642e+161, 100.00000000000000, 1.7500000000000000 },
-  { 4.6194159776013925e+155, 100.00000000000000, 2.0000000000000000 },
-  { 3.5332121583541727e+150, 100.00000000000000, 2.2500000000000000 },
-  { 9.3566097231039940e+145, 100.00000000000000, 2.5000000000000000 },
-  { 6.7672283615134532e+141, 100.00000000000000, 2.7500000000000000 },
-  { 1.1219630864949494e+138, 100.00000000000000, 3.0000000000000000 },
-  { 3.7329723699990903e+134, 100.00000000000000, 3.2500000000000000 },
-  { 2.2476893883855163e+131, 100.00000000000000, 3.5000000000000000 },
-  { 2.2564559319883196e+128, 100.00000000000000, 3.7500000000000000 },
-  { 3.5353340499626455e+125, 100.00000000000000, 4.0000000000000000 },
-  { 8.1898439213010234e+122, 100.00000000000000, 4.2500000000000000 },
-  { 2.6823744110726800e+120, 100.00000000000000, 4.5000000000000000 },
-  { 1.1963963615212274e+118, 100.00000000000000, 4.7500000000000000 },
-  { 7.0398601930616815e+115, 100.00000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 8.5970689361151757e+232 at index 0
+// max(|f - f_GSL| / |f_GSL|): 9.0457919481999128e-14
+// mean(f - f_GSL): -4.2985344680575876e+231
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_k<double>
+data017[20] =
+{
+  { 9.5039428115809898e+245, 100.00000000000000, 0.25000000000000000, 0.0 },
+  { 7.4937399313533112e+215, 100.00000000000000, 0.50000000000000000, 0.0 },
+  { 1.8417471020730699e+198, 100.00000000000000, 0.75000000000000000, 0.0 },
+  { 5.9003331836386410e+185, 100.00000000000000, 1.0000000000000000, 0.0 },
+  { 1.2002130935576950e+176, 100.00000000000000, 1.2500000000000000, 0.0 },
+  { 1.4467044226487075e+168, 100.00000000000000, 1.5000000000000000, 0.0 },
+  { 2.9161498411497642e+161, 100.00000000000000, 1.7500000000000000, 0.0 },
+  { 4.6194159776013925e+155, 100.00000000000000, 2.0000000000000000, 0.0 },
+  { 3.5332121583541727e+150, 100.00000000000000, 2.2500000000000000, 0.0 },
+  { 9.3566097231039940e+145, 100.00000000000000, 2.5000000000000000, 0.0 },
+  { 6.7672283615134532e+141, 100.00000000000000, 2.7500000000000000, 0.0 },
+  { 1.1219630864949494e+138, 100.00000000000000, 3.0000000000000000, 0.0 },
+  { 3.7329723699990903e+134, 100.00000000000000, 3.2500000000000000, 0.0 },
+  { 2.2476893883855163e+131, 100.00000000000000, 3.5000000000000000, 0.0 },
+  { 2.2564559319883200e+128, 100.00000000000000, 3.7500000000000000, 0.0 },
+  { 3.5353340499626463e+125, 100.00000000000000, 4.0000000000000000, 0.0 },
+  { 8.1898439213010234e+122, 100.00000000000000, 4.2500000000000000, 0.0 },
+  { 2.6823744110726800e+120, 100.00000000000000, 4.5000000000000000, 0.0 },
+  { 1.1963963615212274e+118, 100.00000000000000, 4.7500000000000000, 0.0 },
+  { 7.0398601930616815e+115, 100.00000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=100.00000000000000.
-template<typename Tp>
-  void
-  test011()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data011)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data011[i].nu), Tp(data011[i].x));
-       const Tp f0 = data011[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
-  }
+const double toler017 = 5.0000000000000029e-12;
 //  cyl_bessel_k
 
 // Test data for nu=0.0000000000000000.
-testcase_cyl_bessel_k<double> data012[] = {
-  { 0.0036910983340425947, 0.0000000000000000, 5.0000000000000000 },
-  { 1.7780062316167650e-05, 0.0000000000000000, 10.000000000000000 },
-  { 9.8195364823964333e-08, 0.0000000000000000, 15.000000000000000 },
-  { 5.7412378153365238e-10, 0.0000000000000000, 20.000000000000000 },
-  { 3.4641615622131151e-12, 0.0000000000000000, 25.000000000000000 },
-  { 2.1324774964630566e-14, 0.0000000000000000, 30.000000000000000 },
-  { 1.3310351491429464e-16, 0.0000000000000000, 35.000000000000000 },
-  { 8.3928611000995700e-19, 0.0000000000000000, 40.000000000000000 },
-  { 5.3334561226187247e-21, 0.0000000000000000, 45.000000000000000 },
-  { 3.4101677497894956e-23, 0.0000000000000000, 50.000000000000000 },
-  { 2.1913102183534147e-25, 0.0000000000000000, 55.000000000000000 },
-  { 1.4138978405591074e-27, 0.0000000000000000, 60.000000000000000 },
-  { 9.1544673210030045e-30, 0.0000000000000000, 65.000000000000000 },
-  { 5.9446613372925013e-32, 0.0000000000000000, 70.000000000000000 },
-  { 3.8701170455869113e-34, 0.0000000000000000, 75.000000000000000 },
-  { 2.5251198425054723e-36, 0.0000000000000000, 80.000000000000000 },
-  { 1.6507623579783908e-38, 0.0000000000000000, 85.000000000000000 },
-  { 1.0810242556984256e-40, 0.0000000000000000, 90.000000000000000 },
-  { 7.0901249699001278e-43, 0.0000000000000000, 95.000000000000000 },
-  { 4.6566282291759032e-45, 0.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 4.3368086899420177e-19 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.3318588132773140e-16
+// mean(f - f_GSL): 2.1684048659978596e-20
+// variance(f - f_GSL): 2.6049748824837649e-41
+// stddev(f - f_GSL): 5.1038954559079328e-21
+const testcase_cyl_bessel_k<double>
+data018[20] =
+{
+  { 0.0036910983340425947, 0.0000000000000000, 5.0000000000000000, 0.0 },
+  { 1.7780062316167647e-05, 0.0000000000000000, 10.000000000000000, 0.0 },
+  { 9.8195364823964333e-08, 0.0000000000000000, 15.000000000000000, 0.0 },
+  { 5.7412378153365238e-10, 0.0000000000000000, 20.000000000000000, 0.0 },
+  { 3.4641615622131151e-12, 0.0000000000000000, 25.000000000000000, 0.0 },
+  { 2.1324774964630566e-14, 0.0000000000000000, 30.000000000000000, 0.0 },
+  { 1.3310351491429464e-16, 0.0000000000000000, 35.000000000000000, 0.0 },
+  { 8.3928611000995700e-19, 0.0000000000000000, 40.000000000000000, 0.0 },
+  { 5.3334561226187247e-21, 0.0000000000000000, 45.000000000000000, 0.0 },
+  { 3.4101677497894956e-23, 0.0000000000000000, 50.000000000000000, 0.0 },
+  { 2.1913102183534147e-25, 0.0000000000000000, 55.000000000000000, 0.0 },
+  { 1.4138978405591074e-27, 0.0000000000000000, 60.000000000000000, 0.0 },
+  { 9.1544673210030045e-30, 0.0000000000000000, 65.000000000000000, 0.0 },
+  { 5.9446613372925013e-32, 0.0000000000000000, 70.000000000000000, 0.0 },
+  { 3.8701170455869113e-34, 0.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.5251198425054720e-36, 0.0000000000000000, 80.000000000000000, 0.0 },
+  { 1.6507623579783908e-38, 0.0000000000000000, 85.000000000000000, 0.0 },
+  { 1.0810242556984256e-40, 0.0000000000000000, 90.000000000000000, 0.0 },
+  { 7.0901249699001278e-43, 0.0000000000000000, 95.000000000000000, 0.0 },
+  { 4.6566282291759025e-45, 0.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.0000000000000000.
-template<typename Tp>
-  void
-  test012()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data012)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data012[i].nu), Tp(data012[i].x));
-       const Tp f0 = data012[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler018 = 2.5000000000000020e-13;
 
 // Test data for nu=0.33333333333333331.
-testcase_cyl_bessel_k<double> data013[] = {
-  { 0.0037288750960535887, 0.33333333333333331, 5.0000000000000000 },
-  { 1.7874608271055339e-05, 0.33333333333333331, 10.000000000000000 },
-  { 9.8548341568798317e-08, 0.33333333333333331, 15.000000000000000 },
-  { 5.7568278247790865e-10, 0.33333333333333331, 20.000000000000000 },
-  { 3.4717201424907059e-12, 0.33333333333333331, 25.000000000000000 },
-  { 2.1363664736611189e-14, 0.33333333333333331, 30.000000000000000 },
-  { 1.3331202314165813e-16, 0.33333333333333331, 35.000000000000000 },
-  { 8.4043837769480934e-19, 0.33333333333333331, 40.000000000000000 },
-  { 5.3399731261024948e-21, 0.33333333333333331, 45.000000000000000 },
-  { 3.4139217813583632e-23, 0.33333333333333331, 50.000000000000000 },
-  { 2.1935050179185627e-25, 0.33333333333333331, 55.000000000000000 },
-  { 1.4151968805623662e-27, 0.33333333333333331, 60.000000000000000 },
-  { 9.1622357217019043e-30, 0.33333333333333331, 65.000000000000000 },
-  { 5.9493479703461315e-32, 0.33333333333333331, 70.000000000000000 },
-  { 3.8729660011055947e-34, 0.33333333333333331, 75.000000000000000 },
-  { 2.5268631828013877e-36, 0.33333333333333331, 80.000000000000000 },
-  { 1.6518353676138867e-38, 0.33333333333333331, 85.000000000000000 },
-  { 1.0816880942511494e-40, 0.33333333333333331, 90.000000000000000 },
-  { 7.0942508599231512e-43, 0.33333333333333331, 95.000000000000000 },
-  { 4.6592031570213454e-45, 0.33333333333333331, 100.00000000000000 },
+// max(|f - f_GSL|): 1.0339757656912846e-25 at index 3
+// max(|f - f_GSL| / |f_GSL|): 2.3267819230578392e-16
+// mean(f - f_GSL): 5.2104262741326337e-27
+// variance(f - f_GSL): 1.5040743467131125e-54
+// stddev(f - f_GSL): 1.2264070884959499e-27
+const testcase_cyl_bessel_k<double>
+data019[20] =
+{
+  { 0.0037288750960535887, 0.33333333333333331, 5.0000000000000000, 0.0 },
+  { 1.7874608271055336e-05, 0.33333333333333331, 10.000000000000000, 0.0 },
+  { 9.8548341568798317e-08, 0.33333333333333331, 15.000000000000000, 0.0 },
+  { 5.7568278247790865e-10, 0.33333333333333331, 20.000000000000000, 0.0 },
+  { 3.4717201424907059e-12, 0.33333333333333331, 25.000000000000000, 0.0 },
+  { 2.1363664736611189e-14, 0.33333333333333331, 30.000000000000000, 0.0 },
+  { 1.3331202314165813e-16, 0.33333333333333331, 35.000000000000000, 0.0 },
+  { 8.4043837769480934e-19, 0.33333333333333331, 40.000000000000000, 0.0 },
+  { 5.3399731261024948e-21, 0.33333333333333331, 45.000000000000000, 0.0 },
+  { 3.4139217813583632e-23, 0.33333333333333331, 50.000000000000000, 0.0 },
+  { 2.1935050179185627e-25, 0.33333333333333331, 55.000000000000000, 0.0 },
+  { 1.4151968805623662e-27, 0.33333333333333331, 60.000000000000000, 0.0 },
+  { 9.1622357217019043e-30, 0.33333333333333331, 65.000000000000000, 0.0 },
+  { 5.9493479703461315e-32, 0.33333333333333331, 70.000000000000000, 0.0 },
+  { 3.8729660011055947e-34, 0.33333333333333331, 75.000000000000000, 0.0 },
+  { 2.5268631828013874e-36, 0.33333333333333331, 80.000000000000000, 0.0 },
+  { 1.6518353676138867e-38, 0.33333333333333331, 85.000000000000000, 0.0 },
+  { 1.0816880942511494e-40, 0.33333333333333331, 90.000000000000000, 0.0 },
+  { 7.0942508599231512e-43, 0.33333333333333331, 95.000000000000000, 0.0 },
+  { 4.6592031570213448e-45, 0.33333333333333331, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.33333333333333331.
-template<typename Tp>
-  void
-  test013()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data013)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data013[i].nu), Tp(data013[i].x));
-       const Tp f0 = data013[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler019 = 2.5000000000000020e-13;
 
 // Test data for nu=0.50000000000000000.
-testcase_cyl_bessel_k<double> data014[] = {
-  { 0.0037766133746428825, 0.50000000000000000, 5.0000000000000000 },
-  { 1.7993478093705181e-05, 0.50000000000000000, 10.000000000000000 },
-  { 9.8991312032877236e-08, 0.50000000000000000, 15.000000000000000 },
-  { 5.7763739747074450e-10, 0.50000000000000000, 20.000000000000000 },
-  { 3.4811912768406949e-12, 0.50000000000000000, 25.000000000000000 },
-  { 2.1412375659560111e-14, 0.50000000000000000, 30.000000000000000 },
-  { 1.3357311366035824e-16, 0.50000000000000000, 35.000000000000000 },
-  { 8.4188091949489049e-19, 0.50000000000000000, 40.000000000000000 },
-  { 5.3481305002517408e-21, 0.50000000000000000, 45.000000000000000 },
-  { 3.4186200954570754e-23, 0.50000000000000000, 50.000000000000000 },
-  { 2.1962515908772453e-25, 0.50000000000000000, 55.000000000000000 },
-  { 1.4168223500353693e-27, 0.50000000000000000, 60.000000000000000 },
-  { 9.1719554473256892e-30, 0.50000000000000000, 65.000000000000000 },
-  { 5.9552114337788932e-32, 0.50000000000000000, 70.000000000000000 },
-  { 3.8765301321409432e-34, 0.50000000000000000, 75.000000000000000 },
-  { 2.5290440439442910e-36, 0.50000000000000000, 80.000000000000000 },
-  { 1.6531776067605980e-38, 0.50000000000000000, 85.000000000000000 },
-  { 1.0825184636529955e-40, 0.50000000000000000, 90.000000000000000 },
-  { 7.0994115873258822e-43, 0.50000000000000000, 95.000000000000000 },
-  { 4.6624238126346715e-45, 0.50000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 8.0779356694631609e-28 at index 4
+// max(|f - f_GSL| / |f_GSL|): 2.3204515428965958e-16
+// mean(f - f_GSL): 4.0547450415218674e-29
+// variance(f - f_GSL): 9.1085636297762724e-59
+// stddev(f - f_GSL): 9.5438795202874765e-30
+const testcase_cyl_bessel_k<double>
+data020[20] =
+{
+  { 0.0037766133746428825, 0.50000000000000000, 5.0000000000000000, 0.0 },
+  { 1.7993478093705178e-05, 0.50000000000000000, 10.000000000000000, 0.0 },
+  { 9.8991312032877236e-08, 0.50000000000000000, 15.000000000000000, 0.0 },
+  { 5.7763739747074450e-10, 0.50000000000000000, 20.000000000000000, 0.0 },
+  { 3.4811912768406949e-12, 0.50000000000000000, 25.000000000000000, 0.0 },
+  { 2.1412375659560111e-14, 0.50000000000000000, 30.000000000000000, 0.0 },
+  { 1.3357311366035824e-16, 0.50000000000000000, 35.000000000000000, 0.0 },
+  { 8.4188091949489049e-19, 0.50000000000000000, 40.000000000000000, 0.0 },
+  { 5.3481305002517408e-21, 0.50000000000000000, 45.000000000000000, 0.0 },
+  { 3.4186200954570754e-23, 0.50000000000000000, 50.000000000000000, 0.0 },
+  { 2.1962515908772453e-25, 0.50000000000000000, 55.000000000000000, 0.0 },
+  { 1.4168223500353693e-27, 0.50000000000000000, 60.000000000000000, 0.0 },
+  { 9.1719554473256892e-30, 0.50000000000000000, 65.000000000000000, 0.0 },
+  { 5.9552114337788932e-32, 0.50000000000000000, 70.000000000000000, 0.0 },
+  { 3.8765301321409432e-34, 0.50000000000000000, 75.000000000000000, 0.0 },
+  { 2.5290440439442907e-36, 0.50000000000000000, 80.000000000000000, 0.0 },
+  { 1.6531776067605980e-38, 0.50000000000000000, 85.000000000000000, 0.0 },
+  { 1.0825184636529955e-40, 0.50000000000000000, 90.000000000000000, 0.0 },
+  { 7.0994115873258822e-43, 0.50000000000000000, 95.000000000000000, 0.0 },
+  { 4.6624238126346709e-45, 0.50000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.50000000000000000.
-template<typename Tp>
-  void
-  test014()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data014)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data014[i].nu), Tp(data014[i].x));
-       const Tp f0 = data014[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler020 = 2.5000000000000020e-13;
 
 // Test data for nu=0.66666666666666663.
-testcase_cyl_bessel_k<double> data015[] = {
-  { 0.0038444246344968226, 0.66666666666666663, 5.0000000000000000 },
-  { 1.8161187569530204e-05, 0.66666666666666663, 10.000000000000000 },
-  { 9.9614751542305571e-08, 0.66666666666666663, 15.000000000000000 },
-  { 5.8038484271925811e-10, 0.66666666666666663, 20.000000000000000 },
-  { 3.4944937498488603e-12, 0.66666666666666663, 25.000000000000000 },
-  { 2.1480755645577720e-14, 0.66666666666666663, 30.000000000000000 },
-  { 1.3393949190152161e-16, 0.66666666666666663, 35.000000000000000 },
-  { 8.4390460553642992e-19, 0.66666666666666663, 40.000000000000000 },
-  { 5.3595716143622089e-21, 0.66666666666666663, 45.000000000000000 },
-  { 3.4252085301433749e-23, 0.66666666666666663, 50.000000000000000 },
-  { 2.2001025377982308e-25, 0.66666666666666663, 55.000000000000000 },
-  { 1.4191011274172078e-27, 0.66666666666666663, 60.000000000000000 },
-  { 9.1855803020269763e-30, 0.66666666666666663, 65.000000000000000 },
-  { 5.9634299472578764e-32, 0.66666666666666663, 70.000000000000000 },
-  { 3.8815254026478500e-34, 0.66666666666666663, 75.000000000000000 },
-  { 2.5321003991943851e-36, 0.66666666666666663, 80.000000000000000 },
-  { 1.6550585670593067e-38, 0.66666666666666663, 85.000000000000000 },
-  { 1.0836820479428605e-40, 0.66666666666666663, 90.000000000000000 },
-  { 7.1066428916285356e-43, 0.66666666666666663, 95.000000000000000 },
-  { 4.6669364587280465e-45, 0.66666666666666663, 100.00000000000000 },
+// max(|f - f_GSL|): 4.3368086899420177e-19 at index 0
+// max(|f - f_GSL| / |f_GSL|): 3.5630695000470094e-16
+// mean(f - f_GSL): -2.1684694793857957e-20
+// variance(f - f_GSL): 2.6051301291012209e-41
+// stddev(f - f_GSL): 5.1040475400423349e-21
+const testcase_cyl_bessel_k<double>
+data021[20] =
+{
+  { 0.0038444246344968226, 0.66666666666666663, 5.0000000000000000, 0.0 },
+  { 1.8161187569530204e-05, 0.66666666666666663, 10.000000000000000, 0.0 },
+  { 9.9614751542305571e-08, 0.66666666666666663, 15.000000000000000, 0.0 },
+  { 5.8038484271925811e-10, 0.66666666666666663, 20.000000000000000, 0.0 },
+  { 3.4944937498488603e-12, 0.66666666666666663, 25.000000000000000, 0.0 },
+  { 2.1480755645577720e-14, 0.66666666666666663, 30.000000000000000, 0.0 },
+  { 1.3393949190152161e-16, 0.66666666666666663, 35.000000000000000, 0.0 },
+  { 8.4390460553642992e-19, 0.66666666666666663, 40.000000000000000, 0.0 },
+  { 5.3595716143622089e-21, 0.66666666666666663, 45.000000000000000, 0.0 },
+  { 3.4252085301433749e-23, 0.66666666666666663, 50.000000000000000, 0.0 },
+  { 2.2001025377982308e-25, 0.66666666666666663, 55.000000000000000, 0.0 },
+  { 1.4191011274172078e-27, 0.66666666666666663, 60.000000000000000, 0.0 },
+  { 9.1855803020269763e-30, 0.66666666666666663, 65.000000000000000, 0.0 },
+  { 5.9634299472578764e-32, 0.66666666666666663, 70.000000000000000, 0.0 },
+  { 3.8815254026478500e-34, 0.66666666666666663, 75.000000000000000, 0.0 },
+  { 2.5321003991943847e-36, 0.66666666666666663, 80.000000000000000, 0.0 },
+  { 1.6550585670593067e-38, 0.66666666666666663, 85.000000000000000, 0.0 },
+  { 1.0836820479428605e-40, 0.66666666666666663, 90.000000000000000, 0.0 },
+  { 7.1066428916285356e-43, 0.66666666666666663, 95.000000000000000, 0.0 },
+  { 4.6669364587280459e-45, 0.66666666666666663, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.66666666666666663.
-template<typename Tp>
-  void
-  test015()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data015)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data015[i].nu), Tp(data015[i].x));
-       const Tp f0 = data015[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler021 = 2.5000000000000020e-13;
 
 // Test data for nu=1.0000000000000000.
-testcase_cyl_bessel_k<double> data016[] = {
-  { 0.0040446134454521655, 1.0000000000000000, 5.0000000000000000 },
-  { 1.8648773453825582e-05, 1.0000000000000000, 10.000000000000000 },
-  { 1.0141729369762091e-07, 1.0000000000000000, 15.000000000000000 },
-  { 5.8830579695570384e-10, 1.0000000000000000, 20.000000000000000 },
-  { 3.5327780731999345e-12, 1.0000000000000000, 25.000000000000000 },
-  { 2.1677320018915498e-14, 1.0000000000000000, 30.000000000000000 },
-  { 1.3499178340011053e-16, 1.0000000000000000, 35.000000000000000 },
-  { 8.4971319548610435e-19, 1.0000000000000000, 40.000000000000000 },
-  { 5.3923945937225035e-21, 1.0000000000000000, 45.000000000000000 },
-  { 3.4441022267175555e-23, 1.0000000000000000, 50.000000000000000 },
-  { 2.2111422716117463e-25, 1.0000000000000000, 55.000000000000000 },
-  { 1.4256320265171041e-27, 1.0000000000000000, 60.000000000000000 },
-  { 9.2246195278906156e-30, 1.0000000000000000, 65.000000000000000 },
-  { 5.9869736739138550e-32, 1.0000000000000000, 70.000000000000000 },
-  { 3.8958329467421912e-34, 1.0000000000000000, 75.000000000000000 },
-  { 2.5408531275211708e-36, 1.0000000000000000, 80.000000000000000 },
-  { 1.6604444948567571e-38, 1.0000000000000000, 85.000000000000000 },
-  { 1.0870134457498335e-40, 1.0000000000000000, 90.000000000000000 },
-  { 7.1273442329907240e-43, 1.0000000000000000, 95.000000000000000 },
-  { 4.6798537356369101e-45, 1.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 1.0339757656912846e-25 at index 3
+// max(|f - f_GSL| / |f_GSL|): 1.7575481510496439e-16
+// mean(f - f_GSL): 5.1899158905965940e-27
+// variance(f - f_GSL): 1.4922563408014978e-54
+// stddev(f - f_GSL): 1.2215794451452995e-27
+const testcase_cyl_bessel_k<double>
+data022[20] =
+{
+  { 0.0040446134454521655, 1.0000000000000000, 5.0000000000000000, 0.0 },
+  { 1.8648773453825579e-05, 1.0000000000000000, 10.000000000000000, 0.0 },
+  { 1.0141729369762091e-07, 1.0000000000000000, 15.000000000000000, 0.0 },
+  { 5.8830579695570384e-10, 1.0000000000000000, 20.000000000000000, 0.0 },
+  { 3.5327780731999345e-12, 1.0000000000000000, 25.000000000000000, 0.0 },
+  { 2.1677320018915498e-14, 1.0000000000000000, 30.000000000000000, 0.0 },
+  { 1.3499178340011053e-16, 1.0000000000000000, 35.000000000000000, 0.0 },
+  { 8.4971319548610435e-19, 1.0000000000000000, 40.000000000000000, 0.0 },
+  { 5.3923945937225035e-21, 1.0000000000000000, 45.000000000000000, 0.0 },
+  { 3.4441022267175555e-23, 1.0000000000000000, 50.000000000000000, 0.0 },
+  { 2.2111422716117463e-25, 1.0000000000000000, 55.000000000000000, 0.0 },
+  { 1.4256320265171041e-27, 1.0000000000000000, 60.000000000000000, 0.0 },
+  { 9.2246195278906156e-30, 1.0000000000000000, 65.000000000000000, 0.0 },
+  { 5.9869736739138550e-32, 1.0000000000000000, 70.000000000000000, 0.0 },
+  { 3.8958329467421912e-34, 1.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.5408531275211705e-36, 1.0000000000000000, 80.000000000000000, 0.0 },
+  { 1.6604444948567571e-38, 1.0000000000000000, 85.000000000000000, 0.0 },
+  { 1.0870134457498335e-40, 1.0000000000000000, 90.000000000000000, 0.0 },
+  { 7.1273442329907240e-43, 1.0000000000000000, 95.000000000000000, 0.0 },
+  { 4.6798537356369088e-45, 1.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=1.0000000000000000.
-template<typename Tp>
-  void
-  test016()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data016)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data016[i].nu), Tp(data016[i].x));
-       const Tp f0 = data016[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler022 = 2.5000000000000020e-13;
 
 // Test data for nu=2.0000000000000000.
-testcase_cyl_bessel_k<double> data017[] = {
-  { 0.0053089437122234608, 2.0000000000000000, 5.0000000000000000 },
-  { 2.1509817006932767e-05, 2.0000000000000000, 10.000000000000000 },
-  { 1.1171767065031378e-07, 2.0000000000000000, 15.000000000000000 },
-  { 6.3295436122922281e-10, 2.0000000000000000, 20.000000000000000 },
-  { 3.7467838080691102e-12, 2.0000000000000000, 25.000000000000000 },
-  { 2.2769929632558265e-14, 2.0000000000000000, 30.000000000000000 },
-  { 1.4081733110858665e-16, 2.0000000000000000, 35.000000000000000 },
-  { 8.8177176978426223e-19, 2.0000000000000000, 40.000000000000000 },
-  { 5.5731181045619470e-21, 2.0000000000000000, 45.000000000000000 },
-  { 3.5479318388581979e-23, 2.0000000000000000, 50.000000000000000 },
-  { 2.2717153918665688e-25, 2.0000000000000000, 55.000000000000000 },
-  { 1.4614189081096777e-27, 2.0000000000000000, 60.000000000000000 },
-  { 9.4383017680150234e-30, 2.0000000000000000, 65.000000000000000 },
-  { 6.1157177279757537e-32, 2.0000000000000000, 70.000000000000000 },
-  { 3.9740059241667034e-34, 2.0000000000000000, 75.000000000000000 },
-  { 2.5886411706935015e-36, 2.0000000000000000, 80.000000000000000 },
-  { 1.6898316402103142e-38, 2.0000000000000000, 85.000000000000000 },
-  { 1.1051801100484218e-40, 2.0000000000000000, 90.000000000000000 },
-  { 7.2401743221736176e-43, 2.0000000000000000, 95.000000000000000 },
-  { 4.7502253038886413e-45, 2.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 8.6736173798840355e-19 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.1559652446630200e-16
+// mean(f - f_GSL): 4.3368092109689917e-20
+// variance(f - f_GSL): 1.0419897026230187e-40
+// stddev(f - f_GSL): 1.0207789685446202e-20
+const testcase_cyl_bessel_k<double>
+data023[20] =
+{
+  { 0.0053089437122234608, 2.0000000000000000, 5.0000000000000000, 0.0 },
+  { 2.1509817006932763e-05, 2.0000000000000000, 10.000000000000000, 0.0 },
+  { 1.1171767065031378e-07, 2.0000000000000000, 15.000000000000000, 0.0 },
+  { 6.3295436122922281e-10, 2.0000000000000000, 20.000000000000000, 0.0 },
+  { 3.7467838080691102e-12, 2.0000000000000000, 25.000000000000000, 0.0 },
+  { 2.2769929632558265e-14, 2.0000000000000000, 30.000000000000000, 0.0 },
+  { 1.4081733110858665e-16, 2.0000000000000000, 35.000000000000000, 0.0 },
+  { 8.8177176978426223e-19, 2.0000000000000000, 40.000000000000000, 0.0 },
+  { 5.5731181045619470e-21, 2.0000000000000000, 45.000000000000000, 0.0 },
+  { 3.5479318388581979e-23, 2.0000000000000000, 50.000000000000000, 0.0 },
+  { 2.2717153918665688e-25, 2.0000000000000000, 55.000000000000000, 0.0 },
+  { 1.4614189081096777e-27, 2.0000000000000000, 60.000000000000000, 0.0 },
+  { 9.4383017680150234e-30, 2.0000000000000000, 65.000000000000000, 0.0 },
+  { 6.1157177279757537e-32, 2.0000000000000000, 70.000000000000000, 0.0 },
+  { 3.9740059241667034e-34, 2.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.5886411706935012e-36, 2.0000000000000000, 80.000000000000000, 0.0 },
+  { 1.6898316402103142e-38, 2.0000000000000000, 85.000000000000000, 0.0 },
+  { 1.1051801100484218e-40, 2.0000000000000000, 90.000000000000000, 0.0 },
+  { 7.2401743221736176e-43, 2.0000000000000000, 95.000000000000000, 0.0 },
+  { 4.7502253038886407e-45, 2.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=2.0000000000000000.
-template<typename Tp>
-  void
-  test017()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data017)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data017[i].nu), Tp(data017[i].x));
-       const Tp f0 = data017[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler023 = 2.5000000000000020e-13;
 
 // Test data for nu=5.0000000000000000.
-testcase_cyl_bessel_k<double> data018[] = {
-  { 0.032706273712031865, 5.0000000000000000, 5.0000000000000000 },
-  { 5.7541849985312288e-05, 5.0000000000000000, 10.000000000000000 },
-  { 2.1878261369258224e-07, 5.0000000000000000, 15.000000000000000 },
-  { 1.0538660139974233e-09, 5.0000000000000000, 20.000000000000000 },
-  { 5.6485921365284157e-12, 5.0000000000000000, 25.000000000000000 },
-  { 3.2103335105890266e-14, 5.0000000000000000, 30.000000000000000 },
-  { 1.8919208406439644e-16, 5.0000000000000000, 35.000000000000000 },
-  { 1.1423814375953188e-18, 5.0000000000000000, 40.000000000000000 },
-  { 7.0181216822204101e-21, 5.0000000000000000, 45.000000000000000 },
-  { 4.3671822541009859e-23, 5.0000000000000000, 50.000000000000000 },
-  { 2.7444967640357869e-25, 5.0000000000000000, 55.000000000000000 },
-  { 1.7382232741886986e-27, 5.0000000000000000, 60.000000000000000 },
-  { 1.1078474298959669e-29, 5.0000000000000000, 65.000000000000000 },
-  { 7.0974537081794416e-32, 5.0000000000000000, 70.000000000000000 },
-  { 4.5667269500061064e-34, 5.0000000000000000, 75.000000000000000 },
-  { 2.9491764420206150e-36, 5.0000000000000000, 80.000000000000000 },
-  { 1.9105685973117463e-38, 5.0000000000000000, 85.000000000000000 },
-  { 1.2411034311592645e-40, 5.0000000000000000, 90.000000000000000 },
-  { 8.0814211331379146e-43, 5.0000000000000000, 95.000000000000000 },
-  { 5.2732561132929509e-45, 5.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 6.9388939039072284e-18 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.1215788643493719e-16
+// mean(f - f_GSL): 3.4694602906449006e-19
+// variance(f - f_GSL): 6.6687837719455956e-39
+// stddev(f - f_GSL): 8.1662621632822905e-20
+const testcase_cyl_bessel_k<double>
+data024[20] =
+{
+  { 0.032706273712031865, 5.0000000000000000, 5.0000000000000000, 0.0 },
+  { 5.7541849985312275e-05, 5.0000000000000000, 10.000000000000000, 0.0 },
+  { 2.1878261369258224e-07, 5.0000000000000000, 15.000000000000000, 0.0 },
+  { 1.0538660139974233e-09, 5.0000000000000000, 20.000000000000000, 0.0 },
+  { 5.6485921365284157e-12, 5.0000000000000000, 25.000000000000000, 0.0 },
+  { 3.2103335105890266e-14, 5.0000000000000000, 30.000000000000000, 0.0 },
+  { 1.8919208406439644e-16, 5.0000000000000000, 35.000000000000000, 0.0 },
+  { 1.1423814375953188e-18, 5.0000000000000000, 40.000000000000000, 0.0 },
+  { 7.0181216822204101e-21, 5.0000000000000000, 45.000000000000000, 0.0 },
+  { 4.3671822541009859e-23, 5.0000000000000000, 50.000000000000000, 0.0 },
+  { 2.7444967640357869e-25, 5.0000000000000000, 55.000000000000000, 0.0 },
+  { 1.7382232741886986e-27, 5.0000000000000000, 60.000000000000000, 0.0 },
+  { 1.1078474298959669e-29, 5.0000000000000000, 65.000000000000000, 0.0 },
+  { 7.0974537081794416e-32, 5.0000000000000000, 70.000000000000000, 0.0 },
+  { 4.5667269500061064e-34, 5.0000000000000000, 75.000000000000000, 0.0 },
+  { 2.9491764420206146e-36, 5.0000000000000000, 80.000000000000000, 0.0 },
+  { 1.9105685973117463e-38, 5.0000000000000000, 85.000000000000000, 0.0 },
+  { 1.2411034311592645e-40, 5.0000000000000000, 90.000000000000000, 0.0 },
+  { 8.0814211331379146e-43, 5.0000000000000000, 95.000000000000000, 0.0 },
+  { 5.2732561132929503e-45, 5.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=5.0000000000000000.
-template<typename Tp>
-  void
-  test018()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data018)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data018[i].nu), Tp(data018[i].x));
-       const Tp f0 = data018[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler024 = 2.5000000000000020e-13;
 
 // Test data for nu=10.000000000000000.
-testcase_cyl_bessel_k<double> data019[] = {
-  { 9.7585628291778121, 10.000000000000000, 5.0000000000000000 },
-  { 0.0016142553003906700, 10.000000000000000, 10.000000000000000 },
-  { 2.2605303776606435e-06, 10.000000000000000, 15.000000000000000 },
-  { 6.3162145283215804e-09, 10.000000000000000, 20.000000000000000 },
-  { 2.4076769602801233e-11, 10.000000000000000, 25.000000000000000 },
-  { 1.0842816942222975e-13, 10.000000000000000, 30.000000000000000 },
-  { 5.3976770429777191e-16, 10.000000000000000, 35.000000000000000 },
-  { 2.8680293113671932e-18, 10.000000000000000, 40.000000000000000 },
-  { 1.5939871900169600e-20, 10.000000000000000, 45.000000000000000 },
-  { 9.1509882099879962e-23, 10.000000000000000, 50.000000000000000 },
-  { 5.3823846249592858e-25, 10.000000000000000, 55.000000000000000 },
-  { 3.2253408700563144e-27, 10.000000000000000, 60.000000000000000 },
-  { 1.9613367530075138e-29, 10.000000000000000, 65.000000000000000 },
-  { 1.2068471495933484e-31, 10.000000000000000, 70.000000000000000 },
-  { 7.4979152649449644e-34, 10.000000000000000, 75.000000000000000 },
-  { 4.6957285830490538e-36, 10.000000000000000, 80.000000000000000 },
-  { 2.9606323347034079e-38, 10.000000000000000, 85.000000000000000 },
-  { 1.8773542561131613e-40, 10.000000000000000, 90.000000000000000 },
-  { 1.1962899527846350e-42, 10.000000000000000, 95.000000000000000 },
-  { 7.6554279773881018e-45, 10.000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 5.3290705182007514e-15 at index 0
+// max(|f - f_GSL| / |f_GSL|): 5.4609173619982130e-16
+// mean(f - f_GSL): 2.6646441036645034e-16
+// variance(f - f_GSL): 3.9336998333484790e-33
+// stddev(f - f_GSL): 6.2719214227766586e-17
+const testcase_cyl_bessel_k<double>
+data025[20] =
+{
+  { 9.7585628291778121, 10.000000000000000, 5.0000000000000000, 0.0 },
+  { 0.0016142553003906698, 10.000000000000000, 10.000000000000000, 0.0 },
+  { 2.2605303776606435e-06, 10.000000000000000, 15.000000000000000, 0.0 },
+  { 6.3162145283215804e-09, 10.000000000000000, 20.000000000000000, 0.0 },
+  { 2.4076769602801233e-11, 10.000000000000000, 25.000000000000000, 0.0 },
+  { 1.0842816942222975e-13, 10.000000000000000, 30.000000000000000, 0.0 },
+  { 5.3976770429777191e-16, 10.000000000000000, 35.000000000000000, 0.0 },
+  { 2.8680293113671932e-18, 10.000000000000000, 40.000000000000000, 0.0 },
+  { 1.5939871900169600e-20, 10.000000000000000, 45.000000000000000, 0.0 },
+  { 9.1509882099879962e-23, 10.000000000000000, 50.000000000000000, 0.0 },
+  { 5.3823846249592858e-25, 10.000000000000000, 55.000000000000000, 0.0 },
+  { 3.2253408700563144e-27, 10.000000000000000, 60.000000000000000, 0.0 },
+  { 1.9613367530075138e-29, 10.000000000000000, 65.000000000000000, 0.0 },
+  { 1.2068471495933484e-31, 10.000000000000000, 70.000000000000000, 0.0 },
+  { 7.4979152649449644e-34, 10.000000000000000, 75.000000000000000, 0.0 },
+  { 4.6957285830490531e-36, 10.000000000000000, 80.000000000000000, 0.0 },
+  { 2.9606323347034079e-38, 10.000000000000000, 85.000000000000000, 0.0 },
+  { 1.8773542561131613e-40, 10.000000000000000, 90.000000000000000, 0.0 },
+  { 1.1962899527846350e-42, 10.000000000000000, 95.000000000000000, 0.0 },
+  { 7.6554279773881006e-45, 10.000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=10.000000000000000.
-template<typename Tp>
-  void
-  test019()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data019)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data019[i].nu), Tp(data019[i].x));
-       const Tp f0 = data019[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler025 = 2.5000000000000020e-13;
 
 // Test data for nu=20.000000000000000.
-testcase_cyl_bessel_k<double> data020[] = {
-  { 482700052.06214869, 20.000000000000000, 5.0000000000000000 },
-  { 178.74427820770546, 20.000000000000000, 10.000000000000000 },
-  { 0.012141257729731143, 20.000000000000000, 15.000000000000000 },
-  { 5.5431116361258155e-06, 20.000000000000000, 20.000000000000000 },
-  { 6.3744029330352113e-09, 20.000000000000000, 25.000000000000000 },
-  { 1.2304516475442478e-11, 20.000000000000000, 30.000000000000000 },
-  { 3.2673136479809018e-14, 20.000000000000000, 35.000000000000000 },
-  { 1.0703023799997383e-16, 20.000000000000000, 40.000000000000000 },
-  { 4.0549953175660457e-19, 20.000000000000000, 45.000000000000000 },
-  { 1.7061483797220349e-21, 20.000000000000000, 50.000000000000000 },
-  { 7.7617008115659413e-24, 20.000000000000000, 55.000000000000000 },
-  { 3.7482954006874720e-26, 20.000000000000000, 60.000000000000000 },
-  { 1.8966880763956576e-28, 20.000000000000000, 65.000000000000000 },
-  { 9.9615763479998864e-31, 20.000000000000000, 70.000000000000000 },
-  { 5.3921623063091066e-33, 20.000000000000000, 75.000000000000000 },
-  { 2.9920407657642272e-35, 20.000000000000000, 80.000000000000000 },
-  { 1.6948662723618255e-37, 20.000000000000000, 85.000000000000000 },
-  { 9.7689149642963042e-40, 20.000000000000000, 90.000000000000000 },
-  { 5.7143603019220823e-42, 20.000000000000000, 95.000000000000000 },
-  { 3.3852054148901700e-44, 20.000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 4.1723251342773438e-07 at index 0
+// max(|f - f_GSL| / |f_GSL|): 1.2224656515794909e-15
+// mean(f - f_GSL): 2.0861629934990416e-08
+// variance(f - f_GSL): 2.4111224573101845e-17
+// stddev(f - f_GSL): 4.9103181743245358e-09
+const testcase_cyl_bessel_k<double>
+data026[20] =
+{
+  { 482700052.06214869, 20.000000000000000, 5.0000000000000000, 0.0 },
+  { 178.74427820770543, 20.000000000000000, 10.000000000000000, 0.0 },
+  { 0.012141257729731143, 20.000000000000000, 15.000000000000000, 0.0 },
+  { 5.5431116361258155e-06, 20.000000000000000, 20.000000000000000, 0.0 },
+  { 6.3744029330352113e-09, 20.000000000000000, 25.000000000000000, 0.0 },
+  { 1.2304516475442478e-11, 20.000000000000000, 30.000000000000000, 0.0 },
+  { 3.2673136479809018e-14, 20.000000000000000, 35.000000000000000, 0.0 },
+  { 1.0703023799997383e-16, 20.000000000000000, 40.000000000000000, 0.0 },
+  { 4.0549953175660457e-19, 20.000000000000000, 45.000000000000000, 0.0 },
+  { 1.7061483797220349e-21, 20.000000000000000, 50.000000000000000, 0.0 },
+  { 7.7617008115659413e-24, 20.000000000000000, 55.000000000000000, 0.0 },
+  { 3.7482954006874720e-26, 20.000000000000000, 60.000000000000000, 0.0 },
+  { 1.8966880763956576e-28, 20.000000000000000, 65.000000000000000, 0.0 },
+  { 9.9615763479998864e-31, 20.000000000000000, 70.000000000000000, 0.0 },
+  { 5.3921623063091066e-33, 20.000000000000000, 75.000000000000000, 0.0 },
+  { 2.9920407657642266e-35, 20.000000000000000, 80.000000000000000, 0.0 },
+  { 1.6948662723618255e-37, 20.000000000000000, 85.000000000000000, 0.0 },
+  { 9.7689149642963042e-40, 20.000000000000000, 90.000000000000000, 0.0 },
+  { 5.7143603019220823e-42, 20.000000000000000, 95.000000000000000, 0.0 },
+  { 3.3852054148901695e-44, 20.000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=20.000000000000000.
-template<typename Tp>
-  void
-  test020()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data020)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data020[i].nu), Tp(data020[i].x));
-       const Tp f0 = data020[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler026 = 2.5000000000000020e-13;
 
 // Test data for nu=50.000000000000000.
-testcase_cyl_bessel_k<double> data021[] = {
-  { 3.3943222434301628e+42, 50.000000000000000, 5.0000000000000000 },
-  { 2.0613737753892557e+27, 50.000000000000000, 10.000000000000000 },
-  { 1.7267736974519188e+18, 50.000000000000000, 15.000000000000000 },
-  { 411711209122.01788, 50.000000000000000, 20.000000000000000 },
-  { 1972478.7419813874, 50.000000000000000, 25.000000000000000 },
-  { 58.770686258007267, 50.000000000000000, 30.000000000000000 },
-  { 0.0058659391182535178, 50.000000000000000, 35.000000000000000 },
-  { 1.3634854128794101e-06, 50.000000000000000, 40.000000000000000 },
-  { 5.8652396362160819e-10, 50.000000000000000, 45.000000000000000 },
-  { 4.0060134766400893e-13, 50.000000000000000, 50.000000000000000 },
-  { 3.9062324485711016e-16, 50.000000000000000, 55.000000000000000 },
-  { 5.0389298085176510e-19, 50.000000000000000, 60.000000000000000 },
-  { 8.1305344250110424e-22, 50.000000000000000, 65.000000000000000 },
-  { 1.5732816234948991e-24, 50.000000000000000, 70.000000000000000 },
-  { 3.5349854993874412e-27, 50.000000000000000, 75.000000000000000 },
-  { 8.9940101003189485e-30, 50.000000000000000, 80.000000000000000 },
-  { 2.5403205503080723e-32, 50.000000000000000, 85.000000000000000 },
-  { 7.8397596486715721e-35, 50.000000000000000, 90.000000000000000 },
-  { 2.6098900651329542e-37, 50.000000000000000, 95.000000000000000 },
-  { 9.2745226536133258e-40, 50.000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 8.6655802749976619e+27 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.6684549464729312e-15
+// mean(f - f_GSL): 4.3327901374988334e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_k<double>
+data027[20] =
+{
+  { 3.3943222434301628e+42, 50.000000000000000, 5.0000000000000000, 0.0 },
+  { 2.0613737753892554e+27, 50.000000000000000, 10.000000000000000, 0.0 },
+  { 1.7267736974519188e+18, 50.000000000000000, 15.000000000000000, 0.0 },
+  { 411711209122.01788, 50.000000000000000, 20.000000000000000, 0.0 },
+  { 1972478.7419813874, 50.000000000000000, 25.000000000000000, 0.0 },
+  { 58.770686258007267, 50.000000000000000, 30.000000000000000, 0.0 },
+  { 0.0058659391182535178, 50.000000000000000, 35.000000000000000, 0.0 },
+  { 1.3634854128794101e-06, 50.000000000000000, 40.000000000000000, 0.0 },
+  { 5.8652396362160819e-10, 50.000000000000000, 45.000000000000000, 0.0 },
+  { 4.0060134766400893e-13, 50.000000000000000, 50.000000000000000, 0.0 },
+  { 3.9062324485711016e-16, 50.000000000000000, 55.000000000000000, 0.0 },
+  { 5.0389298085176510e-19, 50.000000000000000, 60.000000000000000, 0.0 },
+  { 8.1305344250110424e-22, 50.000000000000000, 65.000000000000000, 0.0 },
+  { 1.5732816234948991e-24, 50.000000000000000, 70.000000000000000, 0.0 },
+  { 3.5349854993874412e-27, 50.000000000000000, 75.000000000000000, 0.0 },
+  { 8.9940101003189471e-30, 50.000000000000000, 80.000000000000000, 0.0 },
+  { 2.5403205503080723e-32, 50.000000000000000, 85.000000000000000, 0.0 },
+  { 7.8397596486715721e-35, 50.000000000000000, 90.000000000000000, 0.0 },
+  { 2.6098900651329542e-37, 50.000000000000000, 95.000000000000000, 0.0 },
+  { 9.2745226536133242e-40, 50.000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=50.000000000000000.
-template<typename Tp>
-  void
-  test021()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data021)
-                          / sizeof(testcase_cyl_bessel_k<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data021[i].nu), Tp(data021[i].x));
-       const Tp f0 = data021[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler027 = 2.5000000000000020e-13;
 
 // Test data for nu=100.00000000000000.
-testcase_cyl_bessel_k<double> data022[] = {
-  { 7.0398601930616815e+115, 100.00000000000000, 5.0000000000000000 },
-  { 4.5966740842695238e+85, 100.00000000000000, 10.000000000000000 },
-  { 8.2565552242653946e+67, 100.00000000000000, 15.000000000000000 },
-  { 1.7081356456876041e+55, 100.00000000000000, 20.000000000000000 },
-  { 1.9858028128780610e+45, 100.00000000000000, 25.000000000000000 },
-  { 1.2131584253026677e+37, 100.00000000000000, 30.000000000000000 },
-  { 1.1016916354696688e+30, 100.00000000000000, 35.000000000000000 },
-  { 7.0074023297775712e+23, 100.00000000000000, 40.000000000000000 },
-  { 1.9236643958470894e+18, 100.00000000000000, 45.000000000000000 },
-  { 16394035276269.250, 100.00000000000000, 50.000000000000000 },
-  { 343254952.89495474, 100.00000000000000, 55.000000000000000 },
-  { 14870.012754946298, 100.00000000000000, 60.000000000000000 },
-  { 1.1708099078572216, 100.00000000000000, 65.000000000000000 },
-  { 0.00015161193930722313, 100.00000000000000, 70.000000000000000 },
-  { 2.9850234381623443e-08, 100.00000000000000, 75.000000000000000 },
-  { 8.3928710724649129e-12, 100.00000000000000, 80.000000000000000 },
-  { 3.2033435630927732e-15, 100.00000000000000, 85.000000000000000 },
-  { 1.5922281431788096e-18, 100.00000000000000, 90.000000000000000 },
-  { 9.9589454577674131e-22, 100.00000000000000, 95.000000000000000 },
-  { 7.6171296304940840e-25, 100.00000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 3.4996011596528191e+101 at index 0
+// max(|f - f_GSL| / |f_GSL|): 5.1049818083452373e-15
+// mean(f - f_GSL): 1.7498005798264095e+100
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_bessel_k<double>
+data028[20] =
+{
+  { 7.0398601930616815e+115, 100.00000000000000, 5.0000000000000000, 0.0 },
+  { 4.5966740842695231e+85, 100.00000000000000, 10.000000000000000, 0.0 },
+  { 8.2565552242653946e+67, 100.00000000000000, 15.000000000000000, 0.0 },
+  { 1.7081356456876041e+55, 100.00000000000000, 20.000000000000000, 0.0 },
+  { 1.9858028128780610e+45, 100.00000000000000, 25.000000000000000, 0.0 },
+  { 1.2131584253026677e+37, 100.00000000000000, 30.000000000000000, 0.0 },
+  { 1.1016916354696688e+30, 100.00000000000000, 35.000000000000000, 0.0 },
+  { 7.0074023297775712e+23, 100.00000000000000, 40.000000000000000, 0.0 },
+  { 1.9236643958470894e+18, 100.00000000000000, 45.000000000000000, 0.0 },
+  { 16394035276269.250, 100.00000000000000, 50.000000000000000, 0.0 },
+  { 343254952.89495474, 100.00000000000000, 55.000000000000000, 0.0 },
+  { 14870.012754946298, 100.00000000000000, 60.000000000000000, 0.0 },
+  { 1.1708099078572216, 100.00000000000000, 65.000000000000000, 0.0 },
+  { 0.00015161193930722313, 100.00000000000000, 70.000000000000000, 0.0 },
+  { 2.9850234381623443e-08, 100.00000000000000, 75.000000000000000, 0.0 },
+  { 8.3928710724649113e-12, 100.00000000000000, 80.000000000000000, 0.0 },
+  { 3.2033435630927732e-15, 100.00000000000000, 85.000000000000000, 0.0 },
+  { 1.5922281431788096e-18, 100.00000000000000, 90.000000000000000, 0.0 },
+  { 9.9589454577674131e-22, 100.00000000000000, 95.000000000000000, 0.0 },
+  { 7.6171296304940831e-25, 100.00000000000000, 100.00000000000000, 0.0 },
 };
+const double toler028 = 5.0000000000000039e-13;
 
-// Test function for nu=100.00000000000000.
-template<typename Tp>
+template<typename Ret, unsigned int Num>
   void
-  test022()
+  test(const testcase_cyl_bessel_k<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data022)
-                          / sizeof(testcase_cyl_bessel_k<double>);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::tr1::cyl_bessel_k(Tp(data022[i].nu), Tp(data022[i].x));
-       const Tp f0 = data022[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::tr1::cyl_bessel_k(data[i].nu, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
       }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
+    VERIFY(max_abs_frac < toler);
   }
 
 int
 main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
-  test015<double>();
-  test016<double>();
-  test017<double>();
-  test018<double>();
-  test019<double>();
-  test020<double>();
-  test021<double>();
-  test022<double>();
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
+  test(data016, toler016);
+  test(data017, toler017);
+  test(data018, toler018);
+  test(data019, toler019);
+  test(data020, toler020);
+  test(data021, toler021);
+  test(data022, toler022);
+  test(data023, toler023);
+  test(data024, toler024);
+  test(data025, toler025);
+  test(data026, toler026);
+  test(data027, toler027);
+  test(data028, toler028);
   return 0;
 }
index 9c8a067..5579149 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  cyl_neumann
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for nu=0.0000000000000000.
-testcase_cyl_neumann<double> data001[] = {
-  { -0.93157302493005878, 0.0000000000000000, 0.25000000000000000 },
-  { -0.44451873350670656, 0.0000000000000000, 0.50000000000000000 },
-  { -0.13717276938577236, 0.0000000000000000, 0.75000000000000000 },
-  { 0.088256964215676942, 0.0000000000000000, 1.0000000000000000 },
-  { 0.25821685159454072, 0.0000000000000000, 1.2500000000000000 },
-  { 0.38244892379775886, 0.0000000000000000, 1.5000000000000000 },
-  { 0.46549262864690610, 0.0000000000000000, 1.7500000000000000 },
-  { 0.51037567264974493, 0.0000000000000000, 2.0000000000000000 },
-  { 0.52006476245727862, 0.0000000000000000, 2.2500000000000000 },
-  { 0.49807035961523194, 0.0000000000000000, 2.5000000000000000 },
-  { 0.44865872156913222, 0.0000000000000000, 2.7500000000000000 },
-  { 0.37685001001279045, 0.0000000000000000, 3.0000000000000000 },
-  { 0.28828690267308710, 0.0000000000000000, 3.2500000000000000 },
-  { 0.18902194392082688, 0.0000000000000000, 3.5000000000000000 },
-  { 0.085256756977362638, 0.0000000000000000, 3.7500000000000000 },
-  { -0.016940739325064763, 0.0000000000000000, 4.0000000000000000 },
-  { -0.11191885116160770, 0.0000000000000000, 4.2500000000000000 },
-  { -0.19470500862950454, 0.0000000000000000, 4.5000000000000000 },
-  { -0.26123250323497549, 0.0000000000000000, 4.7500000000000000 },
-  { -0.30851762524903359, 0.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 9.9920072216264089e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 1.5769525176812613e-14
+// mean(f - f_GSL): 1.7173762412170391e-17
+// variance(f - f_GSL): 1.8144622474613909e-32
+// stddev(f - f_GSL): 1.3470197650596635e-16
+const testcase_cyl_neumann<double>
+data007[20] =
+{
+  { -0.93157302493005878, 0.0000000000000000, 0.25000000000000000, 0.0 },
+  { -0.44451873350670656, 0.0000000000000000, 0.50000000000000000, 0.0 },
+  { -0.13717276938577236, 0.0000000000000000, 0.75000000000000000, 0.0 },
+  { 0.088256964215676942, 0.0000000000000000, 1.0000000000000000, 0.0 },
+  { 0.25821685159454072, 0.0000000000000000, 1.2500000000000000, 0.0 },
+  { 0.38244892379775886, 0.0000000000000000, 1.5000000000000000, 0.0 },
+  { 0.46549262864690610, 0.0000000000000000, 1.7500000000000000, 0.0 },
+  { 0.51037567264974493, 0.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.52006476245727862, 0.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.49807035961523194, 0.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.44865872156913222, 0.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.37685001001279045, 0.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.28828690267308710, 0.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.18902194392082688, 0.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.085256756977362638, 0.0000000000000000, 3.7500000000000000, 0.0 },
+  { -0.016940739325064763, 0.0000000000000000, 4.0000000000000000, 0.0 },
+  { -0.11191885116160770, 0.0000000000000000, 4.2500000000000000, 0.0 },
+  { -0.19470500862950454, 0.0000000000000000, 4.5000000000000000, 0.0 },
+  { -0.26123250323497549, 0.0000000000000000, 4.7500000000000000, 0.0 },
+  { -0.30851762524903359, 0.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.0000000000000000.
-template<typename Tp>
-  void
-  test001()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data001)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data001[i].nu), Tp(data001[i].x));
-       const Tp f0 = data001[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler007 = 1.0000000000000008e-12;
 
 // Test data for nu=0.33333333333333331.
-testcase_cyl_neumann<double> data002[] = {
-  { -1.3461842332051077, 0.33333333333333331, 0.25000000000000000 },
-  { -0.84062782604337771, 0.33333333333333331, 0.50000000000000000 },
-  { -0.52488281484097077, 0.33333333333333331, 0.75000000000000000 },
-  { -0.27880164127599205, 0.33333333333333331, 1.0000000000000000 },
-  { -0.074321349727836453, 0.33333333333333331, 1.2500000000000000 },
-  { 0.096610087766627981, 0.33333333333333331, 1.5000000000000000 },
-  { 0.23582564494922068, 0.33333333333333331, 1.7500000000000000 },
-  { 0.34319996626034494, 0.33333333333333331, 2.0000000000000000 },
-  { 0.41835668452349323, 0.33333333333333331, 2.2500000000000000 },
-  { 0.46145947419129157, 0.33333333333333331, 2.5000000000000000 },
-  { 0.47358926135786023, 0.33333333333333331, 2.7500000000000000 },
-  { 0.45689303457230640, 0.33333333333333331, 3.0000000000000000 },
-  { 0.41458485697347386, 0.33333333333333331, 3.2500000000000000 },
-  { 0.35084133277859947, 0.33333333333333331, 3.5000000000000000 },
-  { 0.27061914527820891, 0.33333333333333331, 3.7500000000000000 },
-  { 0.17941676634394862, 0.33333333333333331, 4.0000000000000000 },
-  { 0.083000434191526043, 0.33333333333333331, 4.2500000000000000 },
-  { -0.012886361627105348, 0.33333333333333331, 4.5000000000000000 },
-  { -0.10281143123935124, 0.33333333333333331, 4.7500000000000000 },
-  { -0.18192321129343850, 0.33333333333333331, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.7208456881689926e-15 at index 7
+// max(|f - f_GSL| / |f_GSL|): 5.0141196309547185e-15
+// mean(f - f_GSL): -1.8908485888147198e-17
+// variance(f - f_GSL): 4.0002408539583433e-33
+// stddev(f - f_GSL): 6.3247457292434642e-17
+const testcase_cyl_neumann<double>
+data008[20] =
+{
+  { -1.3461842332051073, 0.33333333333333331, 0.25000000000000000, 0.0 },
+  { -0.84062782604337771, 0.33333333333333331, 0.50000000000000000, 0.0 },
+  { -0.52488281484097088, 0.33333333333333331, 0.75000000000000000, 0.0 },
+  { -0.27880164127599216, 0.33333333333333331, 1.0000000000000000, 0.0 },
+  { -0.074321349727836453, 0.33333333333333331, 1.2500000000000000, 0.0 },
+  { 0.096610087766627981, 0.33333333333333331, 1.5000000000000000, 0.0 },
+  { 0.23582564494922068, 0.33333333333333331, 1.7500000000000000, 0.0 },
+  { 0.34319996626034494, 0.33333333333333331, 2.0000000000000000, 0.0 },
+  { 0.41835668452349323, 0.33333333333333331, 2.2500000000000000, 0.0 },
+  { 0.46145947419129157, 0.33333333333333331, 2.5000000000000000, 0.0 },
+  { 0.47358926135786023, 0.33333333333333331, 2.7500000000000000, 0.0 },
+  { 0.45689303457230640, 0.33333333333333331, 3.0000000000000000, 0.0 },
+  { 0.41458485697347386, 0.33333333333333331, 3.2500000000000000, 0.0 },
+  { 0.35084133277859947, 0.33333333333333331, 3.5000000000000000, 0.0 },
+  { 0.27061914527820891, 0.33333333333333331, 3.7500000000000000, 0.0 },
+  { 0.17941676634394862, 0.33333333333333331, 4.0000000000000000, 0.0 },
+  { 0.083000434191526043, 0.33333333333333331, 4.2500000000000000, 0.0 },
+  { -0.012886361627105348, 0.33333333333333331, 4.5000000000000000, 0.0 },
+  { -0.10281143123935124, 0.33333333333333331, 4.7500000000000000, 0.0 },
+  { -0.18192321129343850, 0.33333333333333331, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.33333333333333331.
-template<typename Tp>
-  void
-  test002()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data002)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data002[i].nu), Tp(data002[i].x));
-       const Tp f0 = data002[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-  }
+const double toler008 = 5.0000000000000039e-13;
 
 // Test data for nu=0.50000000000000000.
-testcase_cyl_neumann<double> data003[] = {
-  { -1.5461605241060765, 0.50000000000000000, 0.25000000000000000 },
-  { -0.99024588024340454, 0.50000000000000000, 0.50000000000000000 },
-  { -0.67411792914454460, 0.50000000000000000, 0.75000000000000000 },
-  { -0.43109886801837594, 0.50000000000000000, 1.0000000000000000 },
-  { -0.22502969244466481, 0.50000000000000000, 1.2500000000000000 },
-  { -0.046083165893097265, 0.50000000000000000, 1.5000000000000000 },
-  { 0.10750804524368722, 0.50000000000000000, 1.7500000000000000 },
-  { 0.23478571040624849, 0.50000000000000000, 2.0000000000000000 },
-  { 0.33414002338271825, 0.50000000000000000, 2.2500000000000000 },
-  { 0.40427830223905686, 0.50000000000000000, 2.5000000000000000 },
-  { 0.44472115119490507, 0.50000000000000000, 2.7500000000000000 },
-  { 0.45604882079463316, 0.50000000000000000, 3.0000000000000000 },
-  { 0.43998859501924370, 0.50000000000000000, 3.2500000000000000 },
-  { 0.39938682536304909, 0.50000000000000000, 3.5000000000000000 },
-  { 0.33809163836693340, 0.50000000000000000, 3.7500000000000000 },
-  { 0.26076607667717877, 0.50000000000000000, 4.0000000000000000 },
-  { 0.17264962544644955, 0.50000000000000000, 4.2500000000000000 },
-  { 0.079285862862978548, 0.50000000000000000, 4.5000000000000000 },
-  { -0.013765943019498003, 0.50000000000000000, 4.7500000000000000 },
-  { -0.10121770918510846, 0.50000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 5.5511151231257827e-16 at index 1
+// max(|f - f_GSL| / |f_GSL|): 6.6252247616878728e-15
+// mean(f - f_GSL): -8.0924850154318048e-17
+// variance(f - f_GSL): 1.5661893379337934e-34
+// stddev(f - f_GSL): 1.2514748650827124e-17
+const testcase_cyl_neumann<double>
+data009[20] =
+{
+  { -1.5461605241060765, 0.50000000000000000, 0.25000000000000000, 0.0 },
+  { -0.99024588024340454, 0.50000000000000000, 0.50000000000000000, 0.0 },
+  { -0.67411792914454438, 0.50000000000000000, 0.75000000000000000, 0.0 },
+  { -0.43109886801837571, 0.50000000000000000, 1.0000000000000000, 0.0 },
+  { -0.22502969244466481, 0.50000000000000000, 1.2500000000000000, 0.0 },
+  { -0.046083165893097265, 0.50000000000000000, 1.5000000000000000, 0.0 },
+  { 0.10750804524368722, 0.50000000000000000, 1.7500000000000000, 0.0 },
+  { 0.23478571040624849, 0.50000000000000000, 2.0000000000000000, 0.0 },
+  { 0.33414002338271825, 0.50000000000000000, 2.2500000000000000, 0.0 },
+  { 0.40427830223905686, 0.50000000000000000, 2.5000000000000000, 0.0 },
+  { 0.44472115119490507, 0.50000000000000000, 2.7500000000000000, 0.0 },
+  { 0.45604882079463316, 0.50000000000000000, 3.0000000000000000, 0.0 },
+  { 0.43998859501924370, 0.50000000000000000, 3.2500000000000000, 0.0 },
+  { 0.39938682536304909, 0.50000000000000000, 3.5000000000000000, 0.0 },
+  { 0.33809163836693340, 0.50000000000000000, 3.7500000000000000, 0.0 },
+  { 0.26076607667717877, 0.50000000000000000, 4.0000000000000000, 0.0 },
+  { 0.17264962544644955, 0.50000000000000000, 4.2500000000000000, 0.0 },
+  { 0.079285862862978548, 0.50000000000000000, 4.5000000000000000, 0.0 },
+  { -0.013765943019498003, 0.50000000000000000, 4.7500000000000000, 0.0 },
+  { -0.10121770918510846, 0.50000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.50000000000000000.
-template<typename Tp>
-  void
-  test003()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data003)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data003[i].nu), Tp(data003[i].x));
-       const Tp f0 = data003[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-  }
+const double toler009 = 5.0000000000000039e-13;
 
 // Test data for nu=0.66666666666666663.
-testcase_cyl_neumann<double> data004[] = {
-  { -1.8021638417426857, 0.66666666666666663, 0.25000000000000000 },
-  { -1.1316060101031435, 0.66666666666666663, 0.50000000000000000 },
-  { -0.80251156358450737, 0.66666666666666663, 0.75000000000000000 },
-  { -0.56270321497463327, 0.66666666666666663, 1.0000000000000000 },
-  { -0.36007453643432208, 0.66666666666666663, 1.2500000000000000 },
-  { -0.18017937469615020, 0.66666666666666663, 1.5000000000000000 },
-  { -0.019885608758103752, 0.66666666666666663, 1.7500000000000000 },
-  { 0.11989345361903521, 0.66666666666666663, 2.0000000000000000 },
-  { 0.23690889836358039, 0.66666666666666663, 2.2500000000000000 },
-  { 0.32882045742954535, 0.66666666666666663, 2.5000000000000000 },
-  { 0.39385133784531856, 0.66666666666666663, 2.7500000000000000 },
-  { 0.43115101690935642, 0.66666666666666663, 3.0000000000000000 },
-  { 0.44098127351445843, 0.66666666666666663, 3.2500000000000000 },
-  { 0.42477631413456485, 0.66666666666666663, 3.5000000000000000 },
-  { 0.38510384155620386, 0.66666666666666663, 3.7500000000000000 },
-  { 0.32554526794354366, 0.66666666666666663, 4.0000000000000000 },
-  { 0.25051080073878446, 0.66666666666666663, 4.2500000000000000 },
-  { 0.16500507211842136, 0.66666666666666663, 4.5000000000000000 },
-  { 0.074359649728861360, 0.66666666666666663, 4.7500000000000000 },
-  { -0.016050662643389627, 0.66666666666666663, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.0547118733938987e-15 at index 9
+// max(|f - f_GSL| / |f_GSL|): 7.7816158152055799e-15
+// mean(f - f_GSL): 1.0772632785815972e-16
+// variance(f - f_GSL): 1.6340061794441914e-35
+// stddev(f - f_GSL): 4.0422842297940791e-18
+const testcase_cyl_neumann<double>
+data010[20] =
+{
+  { -1.8021638417426857, 0.66666666666666663, 0.25000000000000000, 0.0 },
+  { -1.1316060101031435, 0.66666666666666663, 0.50000000000000000, 0.0 },
+  { -0.80251156358450748, 0.66666666666666663, 0.75000000000000000, 0.0 },
+  { -0.56270321497463327, 0.66666666666666663, 1.0000000000000000, 0.0 },
+  { -0.36007453643432208, 0.66666666666666663, 1.2500000000000000, 0.0 },
+  { -0.18017937469615020, 0.66666666666666663, 1.5000000000000000, 0.0 },
+  { -0.019885608758103752, 0.66666666666666663, 1.7500000000000000, 0.0 },
+  { 0.11989345361903521, 0.66666666666666663, 2.0000000000000000, 0.0 },
+  { 0.23690889836358039, 0.66666666666666663, 2.2500000000000000, 0.0 },
+  { 0.32882045742954535, 0.66666666666666663, 2.5000000000000000, 0.0 },
+  { 0.39385133784531856, 0.66666666666666663, 2.7500000000000000, 0.0 },
+  { 0.43115101690935642, 0.66666666666666663, 3.0000000000000000, 0.0 },
+  { 0.44098127351445843, 0.66666666666666663, 3.2500000000000000, 0.0 },
+  { 0.42477631413456485, 0.66666666666666663, 3.5000000000000000, 0.0 },
+  { 0.38510384155620386, 0.66666666666666663, 3.7500000000000000, 0.0 },
+  { 0.32554526794354366, 0.66666666666666663, 4.0000000000000000, 0.0 },
+  { 0.25051080073878446, 0.66666666666666663, 4.2500000000000000, 0.0 },
+  { 0.16500507211842136, 0.66666666666666663, 4.5000000000000000, 0.0 },
+  { 0.074359649728861360, 0.66666666666666663, 4.7500000000000000, 0.0 },
+  { -0.016050662643389627, 0.66666666666666663, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=0.66666666666666663.
-template<typename Tp>
-  void
-  test004()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data004)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data004[i].nu), Tp(data004[i].x));
-       const Tp f0 = data004[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-  }
+const double toler010 = 5.0000000000000039e-13;
 
 // Test data for nu=1.0000000000000000.
-testcase_cyl_neumann<double> data005[] = {
-  { -0.10703243154093699, 1.0000000000000000, 2.0000000000000000 },
-  { 0.027192057738017056, 1.0000000000000000, 2.2500000000000000 },
-  { 0.14591813796678599, 1.0000000000000000, 2.5000000000000000 },
-  { 0.24601900149738354, 1.0000000000000000, 2.7500000000000000 },
-  { 0.32467442479180003, 1.0000000000000000, 3.0000000000000000 },
-  { 0.37977777371708382, 1.0000000000000000, 3.2500000000000000 },
-  { 0.41018841788751170, 1.0000000000000000, 3.5000000000000000 },
-  { 0.41586877934522715, 1.0000000000000000, 3.7500000000000000 },
-  { 0.39792571055709991, 1.0000000000000000, 4.0000000000000000 },
-  { 0.35856889308385076, 1.0000000000000000, 4.2500000000000000 },
-  { 0.30099732306965449, 1.0000000000000000, 4.5000000000000000 },
-  { 0.22922559673872217, 1.0000000000000000, 4.7500000000000000 },
-  { 0.14786314339122700, 1.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 8.5001450322863548e-16 at index 8
+// max(|f - f_GSL| / |f_GSL|): 3.1259660869292553e-14
+// mean(f - f_GSL): 8.2746309804093703e-17
+// variance(f - f_GSL): 1.0590097247613155e-33
+// stddev(f - f_GSL): 3.2542429607534157e-17
+const testcase_cyl_neumann<double>
+data011[20] =
+{
+  { -2.7041052293152825, 1.0000000000000000, 0.25000000000000000, 0.0 },
+  { -1.4714723926702433, 1.0000000000000000, 0.50000000000000000, 0.0 },
+  { -1.0375945507692856, 1.0000000000000000, 0.75000000000000000, 0.0 },
+  { -0.78121282130028891, 1.0000000000000000, 1.0000000000000000, 0.0 },
+  { -0.58436403661500824, 1.0000000000000000, 1.2500000000000000, 0.0 },
+  { -0.41230862697391119, 1.0000000000000000, 1.5000000000000000, 0.0 },
+  { -0.25397298594624573, 1.0000000000000000, 1.7500000000000000, 0.0 },
+  { -0.10703243154093699, 1.0000000000000000, 2.0000000000000000, 0.0 },
+  { 0.027192057738017056, 1.0000000000000000, 2.2500000000000000, 0.0 },
+  { 0.14591813796678599, 1.0000000000000000, 2.5000000000000000, 0.0 },
+  { 0.24601900149738354, 1.0000000000000000, 2.7500000000000000, 0.0 },
+  { 0.32467442479180003, 1.0000000000000000, 3.0000000000000000, 0.0 },
+  { 0.37977777371708382, 1.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.41018841788751170, 1.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.41586877934522715, 1.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.39792571055709991, 1.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.35856889308385076, 1.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.30099732306965449, 1.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.22922559673872217, 1.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.14786314339122700, 1.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=1.0000000000000000.
-template<typename Tp>
-  void
-  test005()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data005)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data005[i].nu), Tp(data005[i].x));
-       const Tp f0 = data005[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-  }
+const double toler011 = 2.5000000000000015e-12;
 
 // Test data for nu=2.0000000000000000.
-testcase_cyl_neumann<double> data006[] = {
-  { -20.701268809592200, 2.0000000000000000, 0.25000000000000000 },
-  { -5.4413708371742668, 2.0000000000000000, 0.50000000000000000 },
-  { -2.6297460326656559, 2.0000000000000000, 0.75000000000000000 },
-  { -1.6506826068162548, 2.0000000000000000, 1.0000000000000000 },
-  { -1.1931993101785539, 2.0000000000000000, 1.2500000000000000 },
-  { -0.93219375976297369, 2.0000000000000000, 1.5000000000000000 },
-  { -0.75574746972832973, 2.0000000000000000, 1.7500000000000000 },
-  { -0.61740810419068193, 2.0000000000000000, 2.0000000000000000 },
-  { -0.49589404446793012, 2.0000000000000000, 2.2500000000000000 },
-  { -0.38133584924180314, 2.0000000000000000, 2.5000000000000000 },
-  { -0.26973581138921693, 2.0000000000000000, 2.7500000000000000 },
-  { -0.16040039348492377, 2.0000000000000000, 3.0000000000000000 },
-  { -0.054577503462573951, 2.0000000000000000, 3.2500000000000000 },
-  { 0.045371437729179787, 2.0000000000000000, 3.5000000000000000 },
-  { 0.13653992534009185, 2.0000000000000000, 3.7500000000000000 },
-  { 0.21590359460361472, 2.0000000000000000, 4.0000000000000000 },
-  { 0.28065715378930217, 2.0000000000000000, 4.2500000000000000 },
-  { 0.32848159666046206, 2.0000000000000000, 4.5000000000000000 },
-  { 0.35774854396706901, 2.0000000000000000, 4.7500000000000000 },
-  { 0.36766288260552438, 2.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.0547118733938987e-15 at index 8
+// max(|f - f_GSL| / |f_GSL|): 1.1776017189273130e-14
+// mean(f - f_GSL): 1.4502288259166106e-16
+// variance(f - f_GSL): 2.5634607708533707e-35
+// stddev(f - f_GSL): 5.0630630757016755e-18
+const testcase_cyl_neumann<double>
+data012[20] =
+{
+  { -20.701268809592200, 2.0000000000000000, 0.25000000000000000, 0.0 },
+  { -5.4413708371742668, 2.0000000000000000, 0.50000000000000000, 0.0 },
+  { -2.6297460326656559, 2.0000000000000000, 0.75000000000000000, 0.0 },
+  { -1.6506826068162548, 2.0000000000000000, 1.0000000000000000, 0.0 },
+  { -1.1931993101785539, 2.0000000000000000, 1.2500000000000000, 0.0 },
+  { -0.93219375976297369, 2.0000000000000000, 1.5000000000000000, 0.0 },
+  { -0.75574746972832973, 2.0000000000000000, 1.7500000000000000, 0.0 },
+  { -0.61740810419068193, 2.0000000000000000, 2.0000000000000000, 0.0 },
+  { -0.49589404446793012, 2.0000000000000000, 2.2500000000000000, 0.0 },
+  { -0.38133584924180314, 2.0000000000000000, 2.5000000000000000, 0.0 },
+  { -0.26973581138921693, 2.0000000000000000, 2.7500000000000000, 0.0 },
+  { -0.16040039348492377, 2.0000000000000000, 3.0000000000000000, 0.0 },
+  { -0.054577503462573951, 2.0000000000000000, 3.2500000000000000, 0.0 },
+  { 0.045371437729179787, 2.0000000000000000, 3.5000000000000000, 0.0 },
+  { 0.13653992534009185, 2.0000000000000000, 3.7500000000000000, 0.0 },
+  { 0.21590359460361472, 2.0000000000000000, 4.0000000000000000, 0.0 },
+  { 0.28065715378930217, 2.0000000000000000, 4.2500000000000000, 0.0 },
+  { 0.32848159666046206, 2.0000000000000000, 4.5000000000000000, 0.0 },
+  { 0.35774854396706901, 2.0000000000000000, 4.7500000000000000, 0.0 },
+  { 0.36766288260552438, 2.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=2.0000000000000000.
-template<typename Tp>
-  void
-  test006()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data006)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data006[i].nu), Tp(data006[i].x));
-       const Tp f0 = data006[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-  }
+const double toler012 = 1.0000000000000008e-12;
 
 // Test data for nu=5.0000000000000000.
-testcase_cyl_neumann<double> data007[] = {
-  { -9.9359891284819675, 5.0000000000000000, 2.0000000000000000 },
-  { -5.9446343848076424, 5.0000000000000000, 2.2500000000000000 },
-  { -3.8301760007407522, 5.0000000000000000, 2.5000000000000000 },
-  { -2.6287042009459087, 5.0000000000000000, 2.7500000000000000 },
-  { -1.9059459538286738, 5.0000000000000000, 3.0000000000000000 },
-  { -1.4498157389142654, 5.0000000000000000, 3.2500000000000000 },
-  { -1.1494603169763686, 5.0000000000000000, 3.5000000000000000 },
-  { -0.94343105151431672, 5.0000000000000000, 3.7500000000000000 },
-  { -0.79585142111419982, 5.0000000000000000, 4.0000000000000000 },
-  { -0.68479288173907016, 5.0000000000000000, 4.2500000000000000 },
-  { -0.59631936513587558, 5.0000000000000000, 4.5000000000000000 },
-  { -0.52130838331747587, 5.0000000000000000, 4.7500000000000000 },
-  { -0.45369482249110193, 5.0000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 2.8421709430404007e-14 at index 4
+// max(|f - f_GSL| / |f_GSL|): 1.0726804245235588e-15
+// mean(f - f_GSL): -1.8762769116165144e-15
+// variance(f - f_GSL): 2.7042659892362611e-31
+// stddev(f - f_GSL): 5.2002557525916566e-16
+const testcase_cyl_neumann<double>
+data013[20] =
+{
+  { -251309.48151852371, 5.0000000000000000, 0.25000000000000000, 0.0 },
+  { -7946.3014788074752, 5.0000000000000000, 0.50000000000000000, 0.0 },
+  { -1067.2468952289760, 5.0000000000000000, 0.75000000000000000, 0.0 },
+  { -260.40586662581228, 5.0000000000000000, 1.0000000000000000, 0.0 },
+  { -88.474252441880395, 5.0000000000000000, 1.2500000000000000, 0.0 },
+  { -37.190308395498064, 5.0000000000000000, 1.5000000000000000, 0.0 },
+  { -18.165774988201832, 5.0000000000000000, 1.7500000000000000, 0.0 },
+  { -9.9359891284819675, 5.0000000000000000, 2.0000000000000000, 0.0 },
+  { -5.9446343848076424, 5.0000000000000000, 2.2500000000000000, 0.0 },
+  { -3.8301760007407522, 5.0000000000000000, 2.5000000000000000, 0.0 },
+  { -2.6287042009459087, 5.0000000000000000, 2.7500000000000000, 0.0 },
+  { -1.9059459538286738, 5.0000000000000000, 3.0000000000000000, 0.0 },
+  { -1.4498157389142654, 5.0000000000000000, 3.2500000000000000, 0.0 },
+  { -1.1494603169763686, 5.0000000000000000, 3.5000000000000000, 0.0 },
+  { -0.94343105151431672, 5.0000000000000000, 3.7500000000000000, 0.0 },
+  { -0.79585142111419982, 5.0000000000000000, 4.0000000000000000, 0.0 },
+  { -0.68479288173907016, 5.0000000000000000, 4.2500000000000000, 0.0 },
+  { -0.59631936513587558, 5.0000000000000000, 4.5000000000000000, 0.0 },
+  { -0.52130838331747587, 5.0000000000000000, 4.7500000000000000, 0.0 },
+  { -0.45369482249110193, 5.0000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=5.0000000000000000.
-template<typename Tp>
-  void
-  test007()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data007)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data007[i].nu), Tp(data007[i].x));
-       const Tp f0 = data007[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler013 = 2.5000000000000020e-13;
 
 // Test data for nu=10.000000000000000.
-testcase_cyl_neumann<double> data008[] = {
-  { -124241617095379.48, 10.000000000000000, 0.25000000000000000 },
-  { -121963623349.56966, 10.000000000000000, 0.50000000000000000 },
-  { -2133501638.9057348, 10.000000000000000, 0.75000000000000000 },
-  { -121618014.27868921, 10.000000000000000, 1.0000000000000000 },
-  { -13265210.158452792, 10.000000000000000, 1.2500000000000000 },
-  { -2183993.0260864049, 10.000000000000000, 1.5000000000000000 },
-  { -478274.82386541169, 10.000000000000000, 1.7500000000000000 },
-  { -129184.54220803917, 10.000000000000000, 2.0000000000000000 },
-  { -40993.254794381690, 10.000000000000000, 2.2500000000000000 },
-  { -14782.847716021070, 10.000000000000000, 2.5000000000000000 },
-  { -5916.5330998776262, 10.000000000000000, 2.7500000000000000 },
-  { -2582.6071294842995, 10.000000000000000, 3.0000000000000000 },
-  { -1213.3423564023892, 10.000000000000000, 3.2500000000000000 },
-  { -607.27437834125760, 10.000000000000000, 3.5000000000000000 },
-  { -321.17461059752202, 10.000000000000000, 3.7500000000000000 },
-  { -178.33055590796428, 10.000000000000000, 4.0000000000000000 },
-  { -103.40496587570090, 10.000000000000000, 4.2500000000000000 },
-  { -62.345024619781434, 10.000000000000000, 4.5000000000000000 },
-  { -38.944510430296937, 10.000000000000000, 4.7500000000000000 },
-  { -25.129110095610095, 10.000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 2.3841857910156250e-07 at index 2
+// max(|f - f_GSL| / |f_GSL|): 1.2724057074663479e-15
+// mean(f - f_GSL): 1.1408855549177588e-08
+// variance(f - f_GSL): 7.2112307216715587e-18
+// stddev(f - f_GSL): 2.6853734789916205e-09
+const testcase_cyl_neumann<double>
+data014[20] =
+{
+  { -124241617095379.48, 10.000000000000000, 0.25000000000000000, 0.0 },
+  { -121963623349.56966, 10.000000000000000, 0.50000000000000000, 0.0 },
+  { -2133501638.9057348, 10.000000000000000, 0.75000000000000000, 0.0 },
+  { -121618014.27868921, 10.000000000000000, 1.0000000000000000, 0.0 },
+  { -13265210.158452792, 10.000000000000000, 1.2500000000000000, 0.0 },
+  { -2183993.0260864049, 10.000000000000000, 1.5000000000000000, 0.0 },
+  { -478274.82386541169, 10.000000000000000, 1.7500000000000000, 0.0 },
+  { -129184.54220803917, 10.000000000000000, 2.0000000000000000, 0.0 },
+  { -40993.254794381690, 10.000000000000000, 2.2500000000000000, 0.0 },
+  { -14782.847716021070, 10.000000000000000, 2.5000000000000000, 0.0 },
+  { -5916.5330998776262, 10.000000000000000, 2.7500000000000000, 0.0 },
+  { -2582.6071294842995, 10.000000000000000, 3.0000000000000000, 0.0 },
+  { -1213.3423564023892, 10.000000000000000, 3.2500000000000000, 0.0 },
+  { -607.27437834125760, 10.000000000000000, 3.5000000000000000, 0.0 },
+  { -321.17461059752202, 10.000000000000000, 3.7500000000000000, 0.0 },
+  { -178.33055590796428, 10.000000000000000, 4.0000000000000000, 0.0 },
+  { -103.40496587570090, 10.000000000000000, 4.2500000000000000, 0.0 },
+  { -62.345024619781434, 10.000000000000000, 4.5000000000000000, 0.0 },
+  { -38.944510430296937, 10.000000000000000, 4.7500000000000000, 0.0 },
+  { -25.129110095610095, 10.000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=10.000000000000000.
-template<typename Tp>
-  void
-  test008()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data008)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data008[i].nu), Tp(data008[i].x));
-       const Tp f0 = data008[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler014 = 2.5000000000000020e-13;
 
 // Test data for nu=20.000000000000000.
-testcase_cyl_neumann<double> data009[] = {
-  { -4.4678815064152581e+34, 20.000000000000000, 0.25000000000000000 },
-  { -4.2714301215659088e+28, 20.000000000000000, 0.50000000000000000 },
-  { -1.2898357375834223e+25, 20.000000000000000, 0.75000000000000000 },
-  { -4.1139703148355065e+22, 20.000000000000000, 1.0000000000000000 },
-  { -4.7783533372148580e+20, 20.000000000000000, 1.2500000000000000 },
-  { -1.2577301772964241e+19, 20.000000000000000, 1.5000000000000000 },
-  { -5.8251041176649626e+17, 20.000000000000000, 1.7500000000000000 },
-  { -40816513889983640., 20.000000000000000, 2.0000000000000000 },
-  { -3925339868516418.5, 20.000000000000000, 2.2500000000000000 },
-  { -484776559582090.25, 20.000000000000000, 2.5000000000000000 },
-  { -73320655044814.469, 20.000000000000000, 2.7500000000000000 },
-  { -13113540041757.449, 20.000000000000000, 3.0000000000000000 },
-  { -2700669268882.7139, 20.000000000000000, 3.2500000000000000 },
-  { -627339518240.21240, 20.000000000000000, 3.5000000000000000 },
-  { -161695236802.71753, 20.000000000000000, 3.7500000000000000 },
-  { -45637199262.220100, 20.000000000000000, 4.0000000000000000 },
-  { -13953299213.925377, 20.000000000000000, 4.2500000000000000 },
-  { -4580215756.5691023, 20.000000000000000, 4.5000000000000000 },
-  { -1602110715.5159132, 20.000000000000000, 4.7500000000000000 },
-  { -593396529.69143200, 20.000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 6442450944.0000000 at index 2
+// max(|f - f_GSL| / |f_GSL|): 1.8080382211114952e-15
+// mean(f - f_GSL): 322083865.10024977
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_neumann<double>
+data015[20] =
+{
+  { -4.4678815064152581e+34, 20.000000000000000, 0.25000000000000000, 0.0 },
+  { -4.2714301215659088e+28, 20.000000000000000, 0.50000000000000000, 0.0 },
+  { -1.2898357375834223e+25, 20.000000000000000, 0.75000000000000000, 0.0 },
+  { -4.1139703148355065e+22, 20.000000000000000, 1.0000000000000000, 0.0 },
+  { -4.7783533372148580e+20, 20.000000000000000, 1.2500000000000000, 0.0 },
+  { -1.2577301772964241e+19, 20.000000000000000, 1.5000000000000000, 0.0 },
+  { -5.8251041176649626e+17, 20.000000000000000, 1.7500000000000000, 0.0 },
+  { -40816513889983640., 20.000000000000000, 2.0000000000000000, 0.0 },
+  { -3925339868516418.5, 20.000000000000000, 2.2500000000000000, 0.0 },
+  { -484776559582090.25, 20.000000000000000, 2.5000000000000000, 0.0 },
+  { -73320655044814.469, 20.000000000000000, 2.7500000000000000, 0.0 },
+  { -13113540041757.449, 20.000000000000000, 3.0000000000000000, 0.0 },
+  { -2700669268882.7139, 20.000000000000000, 3.2500000000000000, 0.0 },
+  { -627339518240.21240, 20.000000000000000, 3.5000000000000000, 0.0 },
+  { -161695236802.71753, 20.000000000000000, 3.7500000000000000, 0.0 },
+  { -45637199262.220100, 20.000000000000000, 4.0000000000000000, 0.0 },
+  { -13953299213.925377, 20.000000000000000, 4.2500000000000000, 0.0 },
+  { -4580215756.5691023, 20.000000000000000, 4.5000000000000000, 0.0 },
+  { -1602110715.5159132, 20.000000000000000, 4.7500000000000000, 0.0 },
+  { -593396529.69143200, 20.000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=20.000000000000000.
-template<typename Tp>
-  void
-  test009()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data009)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data009[i].nu), Tp(data009[i].x));
-       const Tp f0 = data009[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler015 = 2.5000000000000020e-13;
 
 // Test data for nu=50.000000000000000.
-testcase_cyl_neumann<double> data010[] = {
-  { -2.7643487471155969e+107, 50.000000000000000, 0.25000000000000000 },
-  { -2.4575848224461092e+92, 50.000000000000000, 0.50000000000000000 },
-  { -3.8604508467683829e+83, 50.000000000000000, 0.75000000000000000 },
-  { -2.1911428126053411e+77, 50.000000000000000, 1.0000000000000000 },
-  { -3.1362926828833165e+72, 50.000000000000000, 1.2500000000000000 },
-  { -3.4584216846550566e+68, 50.000000000000000, 1.5000000000000000 },
-  { -1.5607714080312795e+65, 50.000000000000000, 1.7500000000000000 },
-  { -1.9761505765184128e+62, 50.000000000000000, 2.0000000000000000 },
-  { -5.5023640499231188e+59, 50.000000000000000, 2.2500000000000000 },
-  { -2.8530384545826849e+57, 50.000000000000000, 2.5000000000000000 },
-  { -2.4467169322684809e+55, 50.000000000000000, 2.7500000000000000 },
-  { -3.1793891461005181e+53, 50.000000000000000, 3.0000000000000000 },
-  { -5.8573901231568658e+51, 50.000000000000000, 3.2500000000000000 },
-  { -1.4528262197760965e+50, 50.000000000000000, 3.5000000000000000 },
-  { -4.6566569870478635e+48, 50.000000000000000, 3.7500000000000000 },
-  { -1.8661134361400254e+47, 50.000000000000000, 4.0000000000000000 },
-  { -9.1005883612255402e+45, 50.000000000000000, 4.2500000000000000 },
-  { -5.2813777542386141e+44, 50.000000000000000, 4.5000000000000000 },
-  { -3.5795477722116469e+43, 50.000000000000000, 4.7500000000000000 },
-  { -2.7888370175838930e+42, 50.000000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 6.4703872001161536e+68 at index 2
+// max(|f - f_GSL| / |f_GSL|): 3.7730746786493403e-15
+// mean(f - f_GSL): 3.2351936000129644e+67
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_neumann<double>
+data016[20] =
+{
+  { -2.7643487471155969e+107, 50.000000000000000, 0.25000000000000000, 0.0 },
+  { -2.4575848224461092e+92, 50.000000000000000, 0.50000000000000000, 0.0 },
+  { -3.8604508467683829e+83, 50.000000000000000, 0.75000000000000000, 0.0 },
+  { -2.1911428126053411e+77, 50.000000000000000, 1.0000000000000000, 0.0 },
+  { -3.1362926828833165e+72, 50.000000000000000, 1.2500000000000000, 0.0 },
+  { -3.4584216846550566e+68, 50.000000000000000, 1.5000000000000000, 0.0 },
+  { -1.5607714080312795e+65, 50.000000000000000, 1.7500000000000000, 0.0 },
+  { -1.9761505765184128e+62, 50.000000000000000, 2.0000000000000000, 0.0 },
+  { -5.5023640499231188e+59, 50.000000000000000, 2.2500000000000000, 0.0 },
+  { -2.8530384545826849e+57, 50.000000000000000, 2.5000000000000000, 0.0 },
+  { -2.4467169322684809e+55, 50.000000000000000, 2.7500000000000000, 0.0 },
+  { -3.1793891461005181e+53, 50.000000000000000, 3.0000000000000000, 0.0 },
+  { -5.8573901231568658e+51, 50.000000000000000, 3.2500000000000000, 0.0 },
+  { -1.4528262197760965e+50, 50.000000000000000, 3.5000000000000000, 0.0 },
+  { -4.6566569870478635e+48, 50.000000000000000, 3.7500000000000000, 0.0 },
+  { -1.8661134361400254e+47, 50.000000000000000, 4.0000000000000000, 0.0 },
+  { -9.1005883612255402e+45, 50.000000000000000, 4.2500000000000000, 0.0 },
+  { -5.2813777542386141e+44, 50.000000000000000, 4.5000000000000000, 0.0 },
+  { -3.5795477722116469e+43, 50.000000000000000, 4.7500000000000000, 0.0 },
+  { -2.7888370175838930e+42, 50.000000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=50.000000000000000.
-template<typename Tp>
-  void
-  test010()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data010)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data010[i].nu), Tp(data010[i].x));
-       const Tp f0 = data010[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler016 = 2.5000000000000020e-13;
 
 // Test data for nu=100.00000000000000.
-testcase_cyl_neumann<double> data011[] = {
-  { -6.0523080585856754e+245, 100.00000000000000, 0.25000000000000000 },
-  { -4.7766903780412668e+215, 100.00000000000000, 0.50000000000000000 },
-  { -1.1758283017660654e+198, 100.00000000000000, 0.75000000000000000 },
-  { -3.7752878101091316e+185, 100.00000000000000, 1.0000000000000000 },
-  { -7.7013290730008304e+175, 100.00000000000000, 1.2500000000000000 },
-  { -9.3152624794288802e+167, 100.00000000000000, 1.5000000000000000 },
-  { -1.8854163374247264e+161, 100.00000000000000, 1.7500000000000000 },
-  { -3.0008260488569689e+155, 100.00000000000000, 2.0000000000000000 },
-  { -2.3075650873777408e+150, 100.00000000000000, 2.2500000000000000 },
-  { -6.1476258561369381e+145, 100.00000000000000, 2.5000000000000000 },
-  { -4.4758816234829593e+141, 100.00000000000000, 2.7500000000000000 },
-  { -7.4747961023547846e+137, 100.00000000000000, 3.0000000000000000 },
-  { -2.5067022766900123e+134, 100.00000000000000, 3.2500000000000000 },
-  { -1.5222488313431896e+131, 100.00000000000000, 3.5000000000000000 },
-  { -1.5422392812241397e+128, 100.00000000000000, 3.7500000000000000 },
-  { -2.4400857387551062e+125, 100.00000000000000, 4.0000000000000000 },
-  { -5.7118153392422278e+122, 100.00000000000000, 4.2500000000000000 },
-  { -1.8915420905194465e+120, 100.00000000000000, 4.5000000000000000 },
-  { -8.5357945104770158e+117, 100.00000000000000, 4.7500000000000000 },
-  { -5.0848639160196196e+115, 100.00000000000000, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.6126781683773614e+233 at index 0
+// max(|f - f_GSL| / |f_GSL|): 3.9669044390244564e-13
+// mean(f - f_GSL): -8.0633908418868065e+231
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_neumann<double>
+data017[20] =
+{
+  { -6.0523080585856763e+245, 100.00000000000000, 0.25000000000000000, 0.0 },
+  { -4.7766903780412668e+215, 100.00000000000000, 0.50000000000000000, 0.0 },
+  { -1.1758283017660654e+198, 100.00000000000000, 0.75000000000000000, 0.0 },
+  { -3.7752878101091316e+185, 100.00000000000000, 1.0000000000000000, 0.0 },
+  { -7.7013290729995187e+175, 100.00000000000000, 1.2500000000000000, 0.0 },
+  { -9.3152624794288802e+167, 100.00000000000000, 1.5000000000000000, 0.0 },
+  { -1.8854163374247264e+161, 100.00000000000000, 1.7500000000000000, 0.0 },
+  { -3.0008260488566283e+155, 100.00000000000000, 2.0000000000000000, 0.0 },
+  { -2.3075650873777408e+150, 100.00000000000000, 2.2500000000000000, 0.0 },
+  { -6.1476258561369381e+145, 100.00000000000000, 2.5000000000000000, 0.0 },
+  { -4.4758816234829593e+141, 100.00000000000000, 2.7500000000000000, 0.0 },
+  { -7.4747961023547862e+137, 100.00000000000000, 3.0000000000000000, 0.0 },
+  { -2.5067022766901547e+134, 100.00000000000000, 3.2500000000000000, 0.0 },
+  { -1.5222488313432757e+131, 100.00000000000000, 3.5000000000000000, 0.0 },
+  { -1.5422392812241399e+128, 100.00000000000000, 3.7500000000000000, 0.0 },
+  { -2.4400857387551062e+125, 100.00000000000000, 4.0000000000000000, 0.0 },
+  { -5.7118153392422293e+122, 100.00000000000000, 4.2500000000000000, 0.0 },
+  { -1.8915420905193392e+120, 100.00000000000000, 4.5000000000000000, 0.0 },
+  { -8.5357945104770158e+117, 100.00000000000000, 4.7500000000000000, 0.0 },
+  { -5.0848639160196196e+115, 100.00000000000000, 5.0000000000000000, 0.0 },
 };
-
-// Test function for nu=100.00000000000000.
-template<typename Tp>
-  void
-  test011()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data011)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data011[i].nu), Tp(data011[i].x));
-       const Tp f0 = data011[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-  }
+const double toler017 = 2.5000000000000014e-11;
 //  cyl_neumann
 
 // Test data for nu=0.0000000000000000.
-testcase_cyl_neumann<double> data012[] = {
-  { -0.30851762524903359, 0.0000000000000000, 5.0000000000000000 },
-  { 0.055671167283599457, 0.0000000000000000, 10.000000000000000 },
-  { 0.20546429603891822, 0.0000000000000000, 15.000000000000000 },
-  { 0.062640596809384053, 0.0000000000000000, 20.000000000000000 },
-  { -0.12724943226800617, 0.0000000000000000, 25.000000000000000 },
-  { -0.11729573168666413, 0.0000000000000000, 30.000000000000000 },
-  { 0.045797987195155689, 0.0000000000000000, 35.000000000000000 },
-  { 0.12593641705826092, 0.0000000000000000, 40.000000000000000 },
-  { 0.027060469763313333, 0.0000000000000000, 45.000000000000000 },
-  { -0.098064995470077118, 0.0000000000000000, 50.000000000000000 },
-  { -0.077569178730412594, 0.0000000000000000, 55.000000000000000 },
-  { 0.047358952209449426, 0.0000000000000000, 60.000000000000000 },
-  { 0.097183557740181920, 0.0000000000000000, 65.000000000000000 },
-  { 0.0093096664589409992, 0.0000000000000000, 70.000000000000000 },
-  { -0.085369047647775656, 0.0000000000000000, 75.000000000000000 },
-  { -0.055620339089770016, 0.0000000000000000, 80.000000000000000 },
-  { 0.049567884951494251, 0.0000000000000000, 85.000000000000000 },
-  { 0.079776475854877751, 0.0000000000000000, 90.000000000000000 },
-  { -0.0028230995861232107, 0.0000000000000000, 95.000000000000000 },
-  { -0.077244313365083153, 0.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 7.1210398688847931e-15 at index 13
+// max(|f - f_GSL| / |f_GSL|): 1.5217467741391491e-12
+// mean(f - f_GSL): 7.2554809382729962e-17
+// variance(f - f_GSL): 8.8801597233792556e-32
+// stddev(f - f_GSL): 2.9799596848580446e-16
+const testcase_cyl_neumann<double>
+data018[20] =
+{
+  { -0.30851762524903359, 0.0000000000000000, 5.0000000000000000, 0.0 },
+  { 0.055671167283599457, 0.0000000000000000, 10.000000000000000, 0.0 },
+  { 0.20546429603891822, 0.0000000000000000, 15.000000000000000, 0.0 },
+  { 0.062640596809384053, 0.0000000000000000, 20.000000000000000, 0.0 },
+  { -0.12724943226800617, 0.0000000000000000, 25.000000000000000, 0.0 },
+  { -0.11729573168666413, 0.0000000000000000, 30.000000000000000, 0.0 },
+  { 0.045797987195155689, 0.0000000000000000, 35.000000000000000, 0.0 },
+  { 0.12593641705826092, 0.0000000000000000, 40.000000000000000, 0.0 },
+  { 0.027060469763313333, 0.0000000000000000, 45.000000000000000, 0.0 },
+  { -0.098064995470077118, 0.0000000000000000, 50.000000000000000, 0.0 },
+  { -0.077569178730412594, 0.0000000000000000, 55.000000000000000, 0.0 },
+  { 0.047358952209449426, 0.0000000000000000, 60.000000000000000, 0.0 },
+  { 0.097183557740181920, 0.0000000000000000, 65.000000000000000, 0.0 },
+  { 0.0093096664589409992, 0.0000000000000000, 70.000000000000000, 0.0 },
+  { -0.085369047647775656, 0.0000000000000000, 75.000000000000000, 0.0 },
+  { -0.055620339089770016, 0.0000000000000000, 80.000000000000000, 0.0 },
+  { 0.049567884951494251, 0.0000000000000000, 85.000000000000000, 0.0 },
+  { 0.079776475854877751, 0.0000000000000000, 90.000000000000000, 0.0 },
+  { -0.0028230995861232107, 0.0000000000000000, 95.000000000000000, 0.0 },
+  { -0.077244313365083153, 0.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.0000000000000000.
-template<typename Tp>
-  void
-  test012()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data012)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data012[i].nu), Tp(data012[i].x));
-       const Tp f0 = data012[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
-  }
+const double toler018 = 1.0000000000000006e-10;
 
 // Test data for nu=0.33333333333333331.
-testcase_cyl_neumann<double> data013[] = {
-  { -0.18192321129343850, 0.33333333333333331, 5.0000000000000000 },
-  { 0.17020111788268760, 0.33333333333333331, 10.000000000000000 },
-  { 0.18540507541540796, 0.33333333333333331, 15.000000000000000 },
-  { -0.028777707635715043, 0.33333333333333331, 20.000000000000000 },
-  { -0.15829741864944163, 0.33333333333333331, 25.000000000000000 },
-  { -0.058645772316705209, 0.33333333333333331, 30.000000000000000 },
-  { 0.10294930308870617, 0.33333333333333331, 35.000000000000000 },
-  { 0.10547870367098922, 0.33333333333333331, 40.000000000000000 },
-  { -0.034334228816010816, 0.33333333333333331, 45.000000000000000 },
-  { -0.11283489933031279, 0.33333333333333331, 50.000000000000000 },
-  { -0.030007358986895105, 0.33333333333333331, 55.000000000000000 },
-  { 0.086699173295718121, 0.33333333333333331, 60.000000000000000 },
-  { 0.074875579668878658, 0.33333333333333331, 65.000000000000000 },
-  { -0.039323246374552680, 0.33333333333333331, 70.000000000000000 },
-  { -0.091263539574475236, 0.33333333333333331, 75.000000000000000 },
-  { -0.013358849535984318, 0.33333333333333331, 80.000000000000000 },
-  { 0.078373575537830198, 0.33333333333333331, 85.000000000000000 },
-  { 0.055812482883955940, 0.33333333333333331, 90.000000000000000 },
-  { -0.043310380106990683, 0.33333333333333331, 95.000000000000000 },
-  { -0.076900504962136559, 0.33333333333333331, 100.00000000000000 },
+// max(|f - f_GSL|): 6.4392935428259079e-15 at index 13
+// max(|f - f_GSL| / |f_GSL|): 4.0255283668271825e-13
+// mean(f - f_GSL): 4.0124153999343550e-16
+// variance(f - f_GSL): 5.5447658140741534e-32
+// stddev(f - f_GSL): 2.3547326417396418e-16
+const testcase_cyl_neumann<double>
+data019[20] =
+{
+  { -0.18192321129343850, 0.33333333333333331, 5.0000000000000000, 0.0 },
+  { 0.17020111788268760, 0.33333333333333331, 10.000000000000000, 0.0 },
+  { 0.18540507541540796, 0.33333333333333331, 15.000000000000000, 0.0 },
+  { -0.028777707635715043, 0.33333333333333331, 20.000000000000000, 0.0 },
+  { -0.15829741864944163, 0.33333333333333331, 25.000000000000000, 0.0 },
+  { -0.058645772316705209, 0.33333333333333331, 30.000000000000000, 0.0 },
+  { 0.10294930308870617, 0.33333333333333331, 35.000000000000000, 0.0 },
+  { 0.10547870367098922, 0.33333333333333331, 40.000000000000000, 0.0 },
+  { -0.034334228816010816, 0.33333333333333331, 45.000000000000000, 0.0 },
+  { -0.11283489933031279, 0.33333333333333331, 50.000000000000000, 0.0 },
+  { -0.030007358986895105, 0.33333333333333331, 55.000000000000000, 0.0 },
+  { 0.086699173295718121, 0.33333333333333331, 60.000000000000000, 0.0 },
+  { 0.074875579668878658, 0.33333333333333331, 65.000000000000000, 0.0 },
+  { -0.039323246374552680, 0.33333333333333331, 70.000000000000000, 0.0 },
+  { -0.091263539574475236, 0.33333333333333331, 75.000000000000000, 0.0 },
+  { -0.013358849535984318, 0.33333333333333331, 80.000000000000000, 0.0 },
+  { 0.078373575537830198, 0.33333333333333331, 85.000000000000000, 0.0 },
+  { 0.055812482883955940, 0.33333333333333331, 90.000000000000000, 0.0 },
+  { -0.043310380106990683, 0.33333333333333331, 95.000000000000000, 0.0 },
+  { -0.076900504962136559, 0.33333333333333331, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.33333333333333331.
-template<typename Tp>
-  void
-  test013()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data013)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data013[i].nu), Tp(data013[i].x));
-       const Tp f0 = data013[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-  }
+const double toler019 = 2.5000000000000014e-11;
 
 // Test data for nu=0.50000000000000000.
-testcase_cyl_neumann<double> data014[] = {
-  { -0.10121770918510846, 0.50000000000000000, 5.0000000000000000 },
-  { 0.21170886633139810, 0.50000000000000000, 10.000000000000000 },
-  { 0.15650551590730855, 0.50000000000000000, 15.000000000000000 },
-  { -0.072806904785061938, 0.50000000000000000, 20.000000000000000 },
-  { -0.15817308404205055, 0.50000000000000000, 25.000000000000000 },
-  { -0.022470290598831138, 0.50000000000000000, 30.000000000000000 },
-  { 0.12187835265849535, 0.50000000000000000, 35.000000000000000 },
-  { 0.084138655676395377, 0.50000000000000000, 40.000000000000000 },
-  { -0.062482641933003201, 0.50000000000000000, 45.000000000000000 },
-  { -0.10888475635053954, 0.50000000000000000, 50.000000000000000 },
-  { -0.0023805454010949376, 0.50000000000000000, 55.000000000000000 },
-  { 0.098104683735037918, 0.50000000000000000, 60.000000000000000 },
-  { 0.055663470218594434, 0.50000000000000000, 65.000000000000000 },
-  { -0.060396767883824871, 0.50000000000000000, 70.000000000000000 },
-  { -0.084922578922046868, 0.50000000000000000, 75.000000000000000 },
-  { 0.0098472271924441284, 0.50000000000000000, 80.000000000000000 },
-  { 0.085190643574343625, 0.50000000000000000, 85.000000000000000 },
-  { 0.037684970437156268, 0.50000000000000000, 90.000000000000000 },
-  { -0.059772904856097500, 0.50000000000000000, 95.000000000000000 },
-  { -0.068803091468728109, 0.50000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 6.5919492087118670e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 6.0282403975230169e-13
+// mean(f - f_GSL): 4.4870791110485090e-16
+// variance(f - f_GSL): 2.2330752394717835e-31
+// stddev(f - f_GSL): 4.7255425503023288e-16
+const testcase_cyl_neumann<double>
+data020[20] =
+{
+  { -0.10121770918510846, 0.50000000000000000, 5.0000000000000000, 0.0 },
+  { 0.21170886633139810, 0.50000000000000000, 10.000000000000000, 0.0 },
+  { 0.15650551590730855, 0.50000000000000000, 15.000000000000000, 0.0 },
+  { -0.072806904785061938, 0.50000000000000000, 20.000000000000000, 0.0 },
+  { -0.15817308404205055, 0.50000000000000000, 25.000000000000000, 0.0 },
+  { -0.022470290598831138, 0.50000000000000000, 30.000000000000000, 0.0 },
+  { 0.12187835265849535, 0.50000000000000000, 35.000000000000000, 0.0 },
+  { 0.084138655676395377, 0.50000000000000000, 40.000000000000000, 0.0 },
+  { -0.062482641933003201, 0.50000000000000000, 45.000000000000000, 0.0 },
+  { -0.10888475635053954, 0.50000000000000000, 50.000000000000000, 0.0 },
+  { -0.0023805454010949376, 0.50000000000000000, 55.000000000000000, 0.0 },
+  { 0.098104683735037918, 0.50000000000000000, 60.000000000000000, 0.0 },
+  { 0.055663470218594434, 0.50000000000000000, 65.000000000000000, 0.0 },
+  { -0.060396767883824871, 0.50000000000000000, 70.000000000000000, 0.0 },
+  { -0.084922578922046868, 0.50000000000000000, 75.000000000000000, 0.0 },
+  { 0.0098472271924441284, 0.50000000000000000, 80.000000000000000, 0.0 },
+  { 0.085190643574343625, 0.50000000000000000, 85.000000000000000, 0.0 },
+  { 0.037684970437156268, 0.50000000000000000, 90.000000000000000, 0.0 },
+  { -0.059772904856097500, 0.50000000000000000, 95.000000000000000, 0.0 },
+  { -0.068803091468728109, 0.50000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.50000000000000000.
-template<typename Tp>
-  void
-  test014()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data014)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data014[i].nu), Tp(data014[i].x));
-       const Tp f0 = data014[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000028e-11));
-  }
+const double toler020 = 5.0000000000000028e-11;
 
 // Test data for nu=0.66666666666666663.
-testcase_cyl_neumann<double> data015[] = {
-  { -0.016050662643389627, 0.66666666666666663, 5.0000000000000000 },
-  { 0.23937232657540733, 0.66666666666666663, 10.000000000000000 },
-  { 0.11762106604241235, 0.66666666666666663, 15.000000000000000 },
-  { -0.11182254014899558, 0.66666666666666663, 20.000000000000000 },
-  { -0.14756582982938804, 0.66666666666666663, 25.000000000000000 },
-  { 0.015078692908077713, 0.66666666666666663, 30.000000000000000 },
-  { 0.13260911815705795, 0.66666666666666663, 35.000000000000000 },
-  { 0.057217565989652698, 0.66666666666666663, 40.000000000000000 },
-  { -0.086373755152382006, 0.66666666666666663, 45.000000000000000 },
-  { -0.097624139208051616, 0.66666666666666663, 50.000000000000000 },
-  { 0.025354902147023392, 0.66666666666666663, 55.000000000000000 },
-  { 0.10288136476351206, 0.66666666666666663, 60.000000000000000 },
-  { 0.032728379560128203, 0.66666666666666663, 65.000000000000000 },
-  { -0.077363672735747818, 0.66666666666666663, 70.000000000000000 },
-  { -0.072855870458293961, 0.66666666666666663, 75.000000000000000 },
-  { 0.032358106046953543, 0.66666666666666663, 80.000000000000000 },
-  { 0.086240651537394228, 0.66666666666666663, 85.000000000000000 },
-  { 0.017029601697285190, 0.66666666666666663, 90.000000000000000 },
-  { -0.072173520560584681, 0.66666666666666663, 95.000000000000000 },
-  { -0.056057339204073887, 0.66666666666666663, 100.00000000000000 },
+// max(|f - f_GSL|): 7.2372663417752392e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 4.1336890848340281e-13
+// mean(f - f_GSL): 4.6646714269016339e-16
+// variance(f - f_GSL): 4.7228390491049495e-31
+// stddev(f - f_GSL): 6.8722915021882980e-16
+const testcase_cyl_neumann<double>
+data021[20] =
+{
+  { -0.016050662643389627, 0.66666666666666663, 5.0000000000000000, 0.0 },
+  { 0.23937232657540733, 0.66666666666666663, 10.000000000000000, 0.0 },
+  { 0.11762106604241235, 0.66666666666666663, 15.000000000000000, 0.0 },
+  { -0.11182254014899558, 0.66666666666666663, 20.000000000000000, 0.0 },
+  { -0.14756582982938804, 0.66666666666666663, 25.000000000000000, 0.0 },
+  { 0.015078692908077713, 0.66666666666666663, 30.000000000000000, 0.0 },
+  { 0.13260911815705795, 0.66666666666666663, 35.000000000000000, 0.0 },
+  { 0.057217565989652698, 0.66666666666666663, 40.000000000000000, 0.0 },
+  { -0.086373755152382006, 0.66666666666666663, 45.000000000000000, 0.0 },
+  { -0.097624139208051616, 0.66666666666666663, 50.000000000000000, 0.0 },
+  { 0.025354902147023392, 0.66666666666666663, 55.000000000000000, 0.0 },
+  { 0.10288136476351206, 0.66666666666666663, 60.000000000000000, 0.0 },
+  { 0.032728379560128203, 0.66666666666666663, 65.000000000000000, 0.0 },
+  { -0.077363672735747818, 0.66666666666666663, 70.000000000000000, 0.0 },
+  { -0.072855870458293961, 0.66666666666666663, 75.000000000000000, 0.0 },
+  { 0.032358106046953543, 0.66666666666666663, 80.000000000000000, 0.0 },
+  { 0.086240651537394228, 0.66666666666666663, 85.000000000000000, 0.0 },
+  { 0.017029601697285190, 0.66666666666666663, 90.000000000000000, 0.0 },
+  { -0.072173520560584681, 0.66666666666666663, 95.000000000000000, 0.0 },
+  { -0.056057339204073887, 0.66666666666666663, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=0.66666666666666663.
-template<typename Tp>
-  void
-  test015()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data015)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data015[i].nu), Tp(data015[i].x));
-       const Tp f0 = data015[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-  }
+const double toler021 = 2.5000000000000014e-11;
 
 // Test data for nu=1.0000000000000000.
-testcase_cyl_neumann<double> data016[] = {
-  { 0.14786314339122700, 1.0000000000000000, 5.0000000000000000 },
-  { 0.24901542420695386, 1.0000000000000000, 10.000000000000000 },
-  { 0.021073628036873522, 1.0000000000000000, 15.000000000000000 },
-  { -0.16551161436252115, 1.0000000000000000, 20.000000000000000 },
-  { -0.098829964783237412, 1.0000000000000000, 25.000000000000000 },
-  { 0.084425570661747135, 1.0000000000000000, 30.000000000000000 },
-  { 0.12751273354559009, 1.0000000000000000, 35.000000000000000 },
-  { -0.0057935058215497536, 1.0000000000000000, 40.000000000000000 },
-  { -0.11552517964639945, 1.0000000000000000, 45.000000000000000 },
-  { -0.056795668562014692, 1.0000000000000000, 50.000000000000000 },
-  { 0.073846265432577926, 1.0000000000000000, 55.000000000000000 },
-  { 0.091869609369866892, 1.0000000000000000, 60.000000000000000 },
-  { -0.017940374275377362, 1.0000000000000000, 65.000000000000000 },
-  { -0.094844652625716230, 1.0000000000000000, 70.000000000000000 },
-  { -0.035213785160580421, 1.0000000000000000, 75.000000000000000 },
-  { 0.069395913784588037, 1.0000000000000000, 80.000000000000000 },
-  { 0.071233187582749768, 1.0000000000000000, 85.000000000000000 },
-  { -0.026187238607768244, 1.0000000000000000, 90.000000000000000 },
-  { -0.081827958724501215, 1.0000000000000000, 95.000000000000000 },
-  { -0.020372312002759834, 1.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 7.6570694229616265e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 4.2680655963073912e-13
+// mean(f - f_GSL): 4.9712838012805347e-16
+// variance(f - f_GSL): 8.8456847510770884e-31
+// stddev(f - f_GSL): 9.4051500525388153e-16
+const testcase_cyl_neumann<double>
+data022[20] =
+{
+  { 0.14786314339122700, 1.0000000000000000, 5.0000000000000000, 0.0 },
+  { 0.24901542420695386, 1.0000000000000000, 10.000000000000000, 0.0 },
+  { 0.021073628036873522, 1.0000000000000000, 15.000000000000000, 0.0 },
+  { -0.16551161436252115, 1.0000000000000000, 20.000000000000000, 0.0 },
+  { -0.098829964783237412, 1.0000000000000000, 25.000000000000000, 0.0 },
+  { 0.084425570661747135, 1.0000000000000000, 30.000000000000000, 0.0 },
+  { 0.12751273354559009, 1.0000000000000000, 35.000000000000000, 0.0 },
+  { -0.0057935058215497536, 1.0000000000000000, 40.000000000000000, 0.0 },
+  { -0.11552517964639945, 1.0000000000000000, 45.000000000000000, 0.0 },
+  { -0.056795668562014692, 1.0000000000000000, 50.000000000000000, 0.0 },
+  { 0.073846265432577926, 1.0000000000000000, 55.000000000000000, 0.0 },
+  { 0.091869609369866892, 1.0000000000000000, 60.000000000000000, 0.0 },
+  { -0.017940374275377362, 1.0000000000000000, 65.000000000000000, 0.0 },
+  { -0.094844652625716230, 1.0000000000000000, 70.000000000000000, 0.0 },
+  { -0.035213785160580421, 1.0000000000000000, 75.000000000000000, 0.0 },
+  { 0.069395913784588037, 1.0000000000000000, 80.000000000000000, 0.0 },
+  { 0.071233187582749768, 1.0000000000000000, 85.000000000000000, 0.0 },
+  { -0.026187238607768244, 1.0000000000000000, 90.000000000000000, 0.0 },
+  { -0.081827958724501215, 1.0000000000000000, 95.000000000000000, 0.0 },
+  { -0.020372312002759834, 1.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=1.0000000000000000.
-template<typename Tp>
-  void
-  test016()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data016)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data016[i].nu), Tp(data016[i].x));
-       const Tp f0 = data016[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-  }
+const double toler022 = 2.5000000000000014e-11;
 
 // Test data for nu=2.0000000000000000.
-testcase_cyl_neumann<double> data017[] = {
-  { 0.36766288260552438, 2.0000000000000000, 5.0000000000000000 },
-  { -0.0058680824422086830, 2.0000000000000000, 10.000000000000000 },
-  { -0.20265447896733507, 2.0000000000000000, 15.000000000000000 },
-  { -0.079191758245636165, 2.0000000000000000, 20.000000000000000 },
-  { 0.11934303508534717, 2.0000000000000000, 25.000000000000000 },
-  { 0.12292410306411394, 2.0000000000000000, 30.000000000000000 },
-  { -0.038511545278264829, 2.0000000000000000, 35.000000000000000 },
-  { -0.12622609234933840, 2.0000000000000000, 40.000000000000000 },
-  { -0.032194922192042195, 2.0000000000000000, 45.000000000000000 },
-  { 0.095793168727596537, 2.0000000000000000, 50.000000000000000 },
-  { 0.080254497473415426, 2.0000000000000000, 55.000000000000000 },
-  { -0.044296631897120527, 2.0000000000000000, 60.000000000000000 },
-  { -0.097735569256347382, 2.0000000000000000, 65.000000000000000 },
-  { -0.012019513676818605, 2.0000000000000000, 70.000000000000000 },
-  { 0.084430013376826846, 2.0000000000000000, 75.000000000000000 },
-  { 0.057355236934384719, 2.0000000000000000, 80.000000000000000 },
-  { -0.047891809949547198, 2.0000000000000000, 85.000000000000000 },
-  { -0.080358414490605934, 2.0000000000000000, 90.000000000000000 },
-  { 0.0011004057182389746, 2.0000000000000000, 95.000000000000000 },
-  { 0.076836867125027963, 2.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 7.1210398688847931e-15 at index 13
+// max(|f - f_GSL| / |f_GSL|): 3.9367645301914862e-12
+// mean(f - f_GSL): -6.4293188828390413e-17
+// variance(f - f_GSL): 1.0170794505214399e-31
+// stddev(f - f_GSL): 3.1891683093268064e-16
+const testcase_cyl_neumann<double>
+data023[20] =
+{
+  { 0.36766288260552438, 2.0000000000000000, 5.0000000000000000, 0.0 },
+  { -0.0058680824422086830, 2.0000000000000000, 10.000000000000000, 0.0 },
+  { -0.20265447896733507, 2.0000000000000000, 15.000000000000000, 0.0 },
+  { -0.079191758245636165, 2.0000000000000000, 20.000000000000000, 0.0 },
+  { 0.11934303508534717, 2.0000000000000000, 25.000000000000000, 0.0 },
+  { 0.12292410306411394, 2.0000000000000000, 30.000000000000000, 0.0 },
+  { -0.038511545278264829, 2.0000000000000000, 35.000000000000000, 0.0 },
+  { -0.12622609234933840, 2.0000000000000000, 40.000000000000000, 0.0 },
+  { -0.032194922192042195, 2.0000000000000000, 45.000000000000000, 0.0 },
+  { 0.095793168727596537, 2.0000000000000000, 50.000000000000000, 0.0 },
+  { 0.080254497473415426, 2.0000000000000000, 55.000000000000000, 0.0 },
+  { -0.044296631897120527, 2.0000000000000000, 60.000000000000000, 0.0 },
+  { -0.097735569256347382, 2.0000000000000000, 65.000000000000000, 0.0 },
+  { -0.012019513676818605, 2.0000000000000000, 70.000000000000000, 0.0 },
+  { 0.084430013376826846, 2.0000000000000000, 75.000000000000000, 0.0 },
+  { 0.057355236934384719, 2.0000000000000000, 80.000000000000000, 0.0 },
+  { -0.047891809949547198, 2.0000000000000000, 85.000000000000000, 0.0 },
+  { -0.080358414490605934, 2.0000000000000000, 90.000000000000000, 0.0 },
+  { 0.0011004057182389746, 2.0000000000000000, 95.000000000000000, 0.0 },
+  { 0.076836867125027963, 2.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=2.0000000000000000.
-template<typename Tp>
-  void
-  test017()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data017)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data017[i].nu), Tp(data017[i].x));
-       const Tp f0 = data017[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000017e-10));
-  }
+const double toler023 = 2.5000000000000017e-10;
 
 // Test data for nu=5.0000000000000000.
-testcase_cyl_neumann<double> data018[] = {
-  { -0.45369482249110193, 5.0000000000000000, 5.0000000000000000 },
-  { 0.13540304768936234, 5.0000000000000000, 10.000000000000000 },
-  { 0.16717271575940015, 5.0000000000000000, 15.000000000000000 },
-  { -0.10003576788953220, 5.0000000000000000, 20.000000000000000 },
-  { -0.14705799311372267, 5.0000000000000000, 25.000000000000000 },
-  { 0.031627359289264301, 5.0000000000000000, 30.000000000000000 },
-  { 0.13554781474770028, 5.0000000000000000, 35.000000000000000 },
-  { 0.031869448780850247, 5.0000000000000000, 40.000000000000000 },
-  { -0.10426932700176872, 5.0000000000000000, 45.000000000000000 },
-  { -0.078548413913081594, 5.0000000000000000, 50.000000000000000 },
-  { 0.055257033062858375, 5.0000000000000000, 55.000000000000000 },
-  { 0.099464632840450887, 5.0000000000000000, 60.000000000000000 },
-  { 0.00023860469499595305, 5.0000000000000000, 65.000000000000000 },
-  { -0.091861802216406052, 5.0000000000000000, 70.000000000000000 },
-  { -0.048383671296970042, 5.0000000000000000, 75.000000000000000 },
-  { 0.060293667104896316, 5.0000000000000000, 80.000000000000000 },
-  { 0.077506166682733996, 5.0000000000000000, 85.000000000000000 },
-  { -0.015338764062239767, 5.0000000000000000, 90.000000000000000 },
-  { -0.081531504045514361, 5.0000000000000000, 95.000000000000000 },
-  { -0.029480196281661937, 5.0000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 7.8125169094417357e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 3.2742511246789352e-11
+// mean(f - f_GSL): 4.9826543715644767e-16
+// variance(f - f_GSL): 8.7640351124736941e-31
+// stddev(f - f_GSL): 9.3616425441658967e-16
+const testcase_cyl_neumann<double>
+data024[20] =
+{
+  { -0.45369482249110193, 5.0000000000000000, 5.0000000000000000, 0.0 },
+  { 0.13540304768936234, 5.0000000000000000, 10.000000000000000, 0.0 },
+  { 0.16717271575940015, 5.0000000000000000, 15.000000000000000, 0.0 },
+  { -0.10003576788953220, 5.0000000000000000, 20.000000000000000, 0.0 },
+  { -0.14705799311372267, 5.0000000000000000, 25.000000000000000, 0.0 },
+  { 0.031627359289264301, 5.0000000000000000, 30.000000000000000, 0.0 },
+  { 0.13554781474770028, 5.0000000000000000, 35.000000000000000, 0.0 },
+  { 0.031869448780850247, 5.0000000000000000, 40.000000000000000, 0.0 },
+  { -0.10426932700176872, 5.0000000000000000, 45.000000000000000, 0.0 },
+  { -0.078548413913081594, 5.0000000000000000, 50.000000000000000, 0.0 },
+  { 0.055257033062858375, 5.0000000000000000, 55.000000000000000, 0.0 },
+  { 0.099464632840450887, 5.0000000000000000, 60.000000000000000, 0.0 },
+  { 0.00023860469499595305, 5.0000000000000000, 65.000000000000000, 0.0 },
+  { -0.091861802216406052, 5.0000000000000000, 70.000000000000000, 0.0 },
+  { -0.048383671296970042, 5.0000000000000000, 75.000000000000000, 0.0 },
+  { 0.060293667104896316, 5.0000000000000000, 80.000000000000000, 0.0 },
+  { 0.077506166682733996, 5.0000000000000000, 85.000000000000000, 0.0 },
+  { -0.015338764062239767, 5.0000000000000000, 90.000000000000000, 0.0 },
+  { -0.081531504045514361, 5.0000000000000000, 95.000000000000000, 0.0 },
+  { -0.029480196281661937, 5.0000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=5.0000000000000000.
-template<typename Tp>
-  void
-  test018()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data018)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data018[i].nu), Tp(data018[i].x));
-       const Tp f0 = data018[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
-  }
+const double toler024 = 2.5000000000000013e-09;
 
 // Test data for nu=10.000000000000000.
-testcase_cyl_neumann<double> data019[] = {
-  { -25.129110095610095, 10.000000000000000, 5.0000000000000000 },
-  { -0.35981415218340279, 10.000000000000000, 10.000000000000000 },
-  { 0.21997141360195577, 10.000000000000000, 15.000000000000000 },
-  { -0.043894653515658105, 10.000000000000000, 20.000000000000000 },
-  { -0.14871839049980651, 10.000000000000000, 25.000000000000000 },
-  { 0.075056702122397012, 10.000000000000000, 30.000000000000000 },
-  { 0.12222473135000546, 10.000000000000000, 35.000000000000000 },
-  { -0.046723877232677985, 10.000000000000000, 40.000000000000000 },
-  { -0.11739339009322181, 10.000000000000000, 45.000000000000000 },
-  { 0.0057238971820535930, 10.000000000000000, 50.000000000000000 },
-  { 0.10733910125831631, 10.000000000000000, 55.000000000000000 },
-  { 0.036290350559545478, 10.000000000000000, 60.000000000000000 },
-  { -0.083239127691715667, 10.000000000000000, 65.000000000000000 },
-  { -0.069639384138314858, 10.000000000000000, 70.000000000000000 },
-  { 0.045798335061325066, 10.000000000000000, 75.000000000000000 },
-  { 0.086269195064844456, 10.000000000000000, 80.000000000000000 },
-  { -0.0018234674126248740, 10.000000000000000, 85.000000000000000 },
-  { -0.082067762371231284, 10.000000000000000, 90.000000000000000 },
-  { -0.038798074754578089, 10.000000000000000, 95.000000000000000 },
-  { 0.058331574236414913, 10.000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 3.1974423109204508e-14 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.7474477272995600e-12
+// mean(f - f_GSL): -1.4525707026091795e-15
+// variance(f - f_GSL): 1.6326443279890062e-30
+// stddev(f - f_GSL): 1.2777497125763739e-15
+const testcase_cyl_neumann<double>
+data025[20] =
+{
+  { -25.129110095610095, 10.000000000000000, 5.0000000000000000, 0.0 },
+  { -0.35981415218340279, 10.000000000000000, 10.000000000000000, 0.0 },
+  { 0.21997141360195577, 10.000000000000000, 15.000000000000000, 0.0 },
+  { -0.043894653515658105, 10.000000000000000, 20.000000000000000, 0.0 },
+  { -0.14871839049980651, 10.000000000000000, 25.000000000000000, 0.0 },
+  { 0.075056702122397012, 10.000000000000000, 30.000000000000000, 0.0 },
+  { 0.12222473135000546, 10.000000000000000, 35.000000000000000, 0.0 },
+  { -0.046723877232677985, 10.000000000000000, 40.000000000000000, 0.0 },
+  { -0.11739339009322181, 10.000000000000000, 45.000000000000000, 0.0 },
+  { 0.0057238971820535930, 10.000000000000000, 50.000000000000000, 0.0 },
+  { 0.10733910125831631, 10.000000000000000, 55.000000000000000, 0.0 },
+  { 0.036290350559545478, 10.000000000000000, 60.000000000000000, 0.0 },
+  { -0.083239127691715667, 10.000000000000000, 65.000000000000000, 0.0 },
+  { -0.069639384138314858, 10.000000000000000, 70.000000000000000, 0.0 },
+  { 0.045798335061325066, 10.000000000000000, 75.000000000000000, 0.0 },
+  { 0.086269195064844456, 10.000000000000000, 80.000000000000000, 0.0 },
+  { -0.0018234674126248740, 10.000000000000000, 85.000000000000000, 0.0 },
+  { -0.082067762371231284, 10.000000000000000, 90.000000000000000, 0.0 },
+  { -0.038798074754578089, 10.000000000000000, 95.000000000000000, 0.0 },
+  { 0.058331574236414913, 10.000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=10.000000000000000.
-template<typename Tp>
-  void
-  test019()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data019)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data019[i].nu), Tp(data019[i].x));
-       const Tp f0 = data019[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000017e-10));
-  }
+const double toler025 = 2.5000000000000017e-10;
 
 // Test data for nu=20.000000000000000.
-testcase_cyl_neumann<double> data020[] = {
-  { -593396529.69143200, 20.000000000000000, 5.0000000000000000 },
-  { -1597.4838482696259, 20.000000000000000, 10.000000000000000 },
-  { -3.3087330924737621, 20.000000000000000, 15.000000000000000 },
-  { -0.28548945860020319, 20.000000000000000, 20.000000000000000 },
-  { 0.19804074776289243, 20.000000000000000, 25.000000000000000 },
-  { -0.16848153948742683, 20.000000000000000, 30.000000000000000 },
-  { 0.10102784152594022, 20.000000000000000, 35.000000000000000 },
-  { 0.045161820565805755, 20.000000000000000, 40.000000000000000 },
-  { -0.12556489308015448, 20.000000000000000, 45.000000000000000 },
-  { 0.016442633948115834, 20.000000000000000, 50.000000000000000 },
-  { 0.10853448778255181, 20.000000000000000, 55.000000000000000 },
-  { -0.026721408520664701, 20.000000000000000, 60.000000000000000 },
-  { -0.098780425256324175, 20.000000000000000, 65.000000000000000 },
-  { 0.016201957786018233, 20.000000000000000, 70.000000000000000 },
-  { 0.093591198265063721, 20.000000000000000, 75.000000000000000 },
-  { 0.0040484400737296200, 20.000000000000000, 80.000000000000000 },
-  { -0.086314929459920531, 20.000000000000000, 85.000000000000000 },
-  { -0.028274110097231530, 20.000000000000000, 90.000000000000000 },
-  { 0.072349520791638741, 20.000000000000000, 95.000000000000000 },
-  { 0.051247973076188474, 20.000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 1.0728836059570312e-06 at index 0
+// max(|f - f_GSL| / |f_GSL|): 1.7026122670117101e-12
+// mean(f - f_GSL): -5.3644294743674170e-08
+// variance(f - f_GSL): 1.5942991469572787e-16
+// stddev(f - f_GSL): 1.2626555931675426e-08
+const testcase_cyl_neumann<double>
+data026[20] =
+{
+  { -593396529.69143200, 20.000000000000000, 5.0000000000000000, 0.0 },
+  { -1597.4838482696259, 20.000000000000000, 10.000000000000000, 0.0 },
+  { -3.3087330924737621, 20.000000000000000, 15.000000000000000, 0.0 },
+  { -0.28548945860020319, 20.000000000000000, 20.000000000000000, 0.0 },
+  { 0.19804074776289243, 20.000000000000000, 25.000000000000000, 0.0 },
+  { -0.16848153948742683, 20.000000000000000, 30.000000000000000, 0.0 },
+  { 0.10102784152594022, 20.000000000000000, 35.000000000000000, 0.0 },
+  { 0.045161820565805755, 20.000000000000000, 40.000000000000000, 0.0 },
+  { -0.12556489308015448, 20.000000000000000, 45.000000000000000, 0.0 },
+  { 0.016442633948115834, 20.000000000000000, 50.000000000000000, 0.0 },
+  { 0.10853448778255181, 20.000000000000000, 55.000000000000000, 0.0 },
+  { -0.026721408520664701, 20.000000000000000, 60.000000000000000, 0.0 },
+  { -0.098780425256324175, 20.000000000000000, 65.000000000000000, 0.0 },
+  { 0.016201957786018233, 20.000000000000000, 70.000000000000000, 0.0 },
+  { 0.093591198265063721, 20.000000000000000, 75.000000000000000, 0.0 },
+  { 0.0040484400737296200, 20.000000000000000, 80.000000000000000, 0.0 },
+  { -0.086314929459920531, 20.000000000000000, 85.000000000000000, 0.0 },
+  { -0.028274110097231530, 20.000000000000000, 90.000000000000000, 0.0 },
+  { 0.072349520791638741, 20.000000000000000, 95.000000000000000, 0.0 },
+  { 0.051247973076188474, 20.000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=20.000000000000000.
-template<typename Tp>
-  void
-  test020()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data020)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data020[i].nu), Tp(data020[i].x));
-       const Tp f0 = data020[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
-  }
+const double toler026 = 1.0000000000000006e-10;
 
 // Test data for nu=50.000000000000000.
-testcase_cyl_neumann<double> data021[] = {
-  { -2.7888370175838930e+42, 50.000000000000000, 5.0000000000000000 },
-  { -3.6410665018007421e+27, 50.000000000000000, 10.000000000000000 },
-  { -1.0929732912175415e+19, 50.000000000000000, 15.000000000000000 },
-  { -15606426801663.734, 50.000000000000000, 20.000000000000000 },
-  { -753573251.44662738, 50.000000000000000, 25.000000000000000 },
-  { -386759.32602734759, 50.000000000000000, 30.000000000000000 },
-  { -1172.8690492895323, 50.000000000000000, 35.000000000000000 },
-  { -15.615608873419944, 50.000000000000000, 40.000000000000000 },
-  { -0.87058346204176895, 50.000000000000000, 45.000000000000000 },
-  { -0.21031655464397747, 50.000000000000000, 50.000000000000000 },
-  { 0.093048240412999389, 50.000000000000000, 55.000000000000000 },
-  { 0.0086417699626744754, 50.000000000000000, 60.000000000000000 },
-  { -0.025019788459222037, 50.000000000000000, 65.000000000000000 },
-  { -0.0014815155191909152, 50.000000000000000, 70.000000000000000 },
-  { 0.050335774732164121, 50.000000000000000, 75.000000000000000 },
-  { -0.092924250967987232, 50.000000000000000, 80.000000000000000 },
-  { 0.087332463030205698, 50.000000000000000, 85.000000000000000 },
-  { -0.016164237701651860, 50.000000000000000, 90.000000000000000 },
-  { -0.068897613820457934, 50.000000000000000, 95.000000000000000 },
-  { 0.076505263944803045, 50.000000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 1.0522490333925732e+28 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.6670435417133106e-12
+// mean(f - f_GSL): -5.2612451669628722e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_neumann<double>
+data027[20] =
+{
+  { -2.7888370175838930e+42, 50.000000000000000, 5.0000000000000000, 0.0 },
+  { -3.6410665018007421e+27, 50.000000000000000, 10.000000000000000, 0.0 },
+  { -1.0929732912175415e+19, 50.000000000000000, 15.000000000000000, 0.0 },
+  { -15606426801663.734, 50.000000000000000, 20.000000000000000, 0.0 },
+  { -753573251.44662738, 50.000000000000000, 25.000000000000000, 0.0 },
+  { -386759.32602734759, 50.000000000000000, 30.000000000000000, 0.0 },
+  { -1172.8690492895323, 50.000000000000000, 35.000000000000000, 0.0 },
+  { -15.615608873419944, 50.000000000000000, 40.000000000000000, 0.0 },
+  { -0.87058346204176895, 50.000000000000000, 45.000000000000000, 0.0 },
+  { -0.21031655464397747, 50.000000000000000, 50.000000000000000, 0.0 },
+  { 0.093048240412999389, 50.000000000000000, 55.000000000000000, 0.0 },
+  { 0.0086417699626744754, 50.000000000000000, 60.000000000000000, 0.0 },
+  { -0.025019788459222037, 50.000000000000000, 65.000000000000000, 0.0 },
+  { -0.0014815155191909152, 50.000000000000000, 70.000000000000000, 0.0 },
+  { 0.050335774732164121, 50.000000000000000, 75.000000000000000, 0.0 },
+  { -0.092924250967987232, 50.000000000000000, 80.000000000000000, 0.0 },
+  { 0.087332463030205698, 50.000000000000000, 85.000000000000000, 0.0 },
+  { -0.016164237701651860, 50.000000000000000, 90.000000000000000, 0.0 },
+  { -0.068897613820457934, 50.000000000000000, 95.000000000000000, 0.0 },
+  { 0.076505263944803045, 50.000000000000000, 100.00000000000000, 0.0 },
 };
-
-// Test function for nu=50.000000000000000.
-template<typename Tp>
-  void
-  test021()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data021)
-                          / sizeof(testcase_cyl_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::cyl_neumann(Tp(data021[i].nu), Tp(data021[i].x));
-       const Tp f0 = data021[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000017e-10));
-  }
+const double toler027 = 2.5000000000000017e-10;
 
 // Test data for nu=100.00000000000000.
-testcase_cyl_neumann<double> data022[] = {
-  { -5.0848639160196196e+115, 100.00000000000000, 5.0000000000000000 },
-  { -4.8491482711800252e+85, 100.00000000000000, 10.000000000000000 },
-  { -1.6375955323195320e+68, 100.00000000000000, 15.000000000000000 },
-  { -8.2002648144679126e+55, 100.00000000000000, 20.000000000000000 },
-  { -2.9712216432562368e+46, 100.00000000000000, 25.000000000000000 },
-  { -7.2875284708240751e+38, 100.00000000000000, 30.000000000000000 },
-  { -3.4251079902108953e+32, 100.00000000000000, 35.000000000000000 },
-  { -1.4552439438101802e+27, 100.00000000000000, 40.000000000000000 },
-  { -3.4506612476220073e+22, 100.00000000000000, 45.000000000000000 },
-  { -3.2938001882025953e+18, 100.00000000000000, 50.000000000000000 },
-  { -1005686182055527.4, 100.00000000000000, 55.000000000000000 },
-  { -831892881402.11377, 100.00000000000000, 60.000000000000000 },
-  { -1650863778.0598330, 100.00000000000000, 65.000000000000000 },
-  { -7192614.1976097794, 100.00000000000000, 70.000000000000000 },
-  { -64639.072261231595, 100.00000000000000, 75.000000000000000 },
-  { -1152.5905185698466, 100.00000000000000, 80.000000000000000 },
-  { -40.250761402101560, 100.00000000000000, 85.000000000000000 },
-  { -2.8307771387185459, 100.00000000000000, 90.000000000000000 },
-  { -0.45762200495904848, 100.00000000000000, 95.000000000000000 },
-  { -0.16692141141757652, 100.00000000000000, 100.00000000000000 },
+// max(|f - f_GSL|): 6.3342780989716025e+102 at index 0
+// max(|f - f_GSL| / |f_GSL|): 1.2524955818061054e-13
+// mean(f - f_GSL): -3.1671390494858015e+101
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_cyl_neumann<double>
+data028[20] =
+{
+  { -5.0848639160196196e+115, 100.00000000000000, 5.0000000000000000, 0.0 },
+  { -4.8491482711800252e+85, 100.00000000000000, 10.000000000000000, 0.0 },
+  { -1.6375955323195320e+68, 100.00000000000000, 15.000000000000000, 0.0 },
+  { -8.2002648144679115e+55, 100.00000000000000, 20.000000000000000, 0.0 },
+  { -2.9712216432562368e+46, 100.00000000000000, 25.000000000000000, 0.0 },
+  { -7.2875284708240751e+38, 100.00000000000000, 30.000000000000000, 0.0 },
+  { -3.4251079902107980e+32, 100.00000000000000, 35.000000000000000, 0.0 },
+  { -1.4552439438102214e+27, 100.00000000000000, 40.000000000000000, 0.0 },
+  { -3.4506612476220073e+22, 100.00000000000000, 45.000000000000000, 0.0 },
+  { -3.2938001882025477e+18, 100.00000000000000, 50.000000000000000, 0.0 },
+  { -1005686182055520.4, 100.00000000000000, 55.000000000000000, 0.0 },
+  { -831892881402.09033, 100.00000000000000, 60.000000000000000, 0.0 },
+  { -1650863778.0598392, 100.00000000000000, 65.000000000000000, 0.0 },
+  { -7192614.1976097794, 100.00000000000000, 70.000000000000000, 0.0 },
+  { -64639.072261231595, 100.00000000000000, 75.000000000000000, 0.0 },
+  { -1152.5905185698466, 100.00000000000000, 80.000000000000000, 0.0 },
+  { -40.250761402101489, 100.00000000000000, 85.000000000000000, 0.0 },
+  { -2.8307771387185294, 100.00000000000000, 90.000000000000000, 0.0 },
+  { -0.45762200495904848, 100.00000000000000, 95.000000000000000, 0.0 },
+  { -0.16692141141757652, 100.00000000000000, 100.00000000000000, 0.0 },
 };
+const double toler028 = 1.0000000000000006e-11;
 
-// Test function for nu=100.00000000000000.
-template<typename Tp>
+template<typename Ret, unsigned int Num>
   void
-  test022()
+  test(const testcase_cyl_neumann<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data022)
-                          / sizeof(testcase_cyl_neumann<double>);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::tr1::cyl_neumann(Tp(data022[i].nu), Tp(data022[i].x));
-       const Tp f0 = data022[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::tr1::cyl_neumann(data[i].nu, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
       }
-    VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
+    VERIFY(max_abs_frac < toler);
   }
 
 int
 main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
-  test015<double>();
-  test016<double>();
-  test017<double>();
-  test018<double>();
-  test019<double>();
-  test020<double>();
-  test021<double>();
-  test022<double>();
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
+  test(data016, toler016);
+  test(data017, toler017);
+  test(data018, toler018);
+  test(data019, toler019);
+  test(data020, toler020);
+  test(data021, toler021);
+  test(data022, toler022);
+  test(data023, toler023);
+  test(data024, toler024);
+  test(data025, toler025);
+  test(data026, toler026);
+  test(data027, toler027);
+  test(data028, toler028);
   return 0;
 }
index 0126acc..f8ff30f 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  ellint_1
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for k=-0.90000000000000002.
-testcase_ellint_1<double> data001[] = {
-  { -0.0000000000000000, -0.90000000000000002, 0.0000000000000000 },
-  { 0.17525427376115027, -0.90000000000000002, 0.17453292519943295 },
-  { 0.35492464591297446, -0.90000000000000002, 0.34906585039886590 },
-  { 0.54388221416157134, -0.90000000000000002, 0.52359877559829882 },
-  { 0.74797400423532523, -0.90000000000000002, 0.69813170079773179 },
-  { 0.97463898451966458, -0.90000000000000002, 0.87266462599716477 },
-  { 1.2334463254523440, -0.90000000000000002, 1.0471975511965976 },
-  { 1.5355247765594910, -0.90000000000000002, 1.2217304763960306 },
-  { 1.8882928567775124, -0.90000000000000002, 1.3962634015954636 },
-  { 2.2805491384227703, -0.90000000000000002, 1.5707963267948966 },
-};
-
-// Test function for k=-0.90000000000000002.
-template <typename Tp>
-void test001()
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 5.7842011620951154e-16
+// mean(f - f_Boost): 5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
+const testcase_ellint_1<double>
+data001[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data001[i].k), Tp(data001[i].phi));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.80000000000000004.
-testcase_ellint_1<double> data002[] = {
-  { -0.0000000000000000, -0.80000000000000004, 0.0000000000000000 },
-  { 0.17510154241338902, -0.80000000000000004, 0.17453292519943295 },
-  { 0.35365068839779390, -0.80000000000000004, 0.34906585039886590 },
-  { 0.53926804409084561, -0.80000000000000004, 0.52359877559829882 },
-  { 0.73587926028070383, -0.80000000000000004, 0.69813170079773179 },
-  { 0.94770942970071170, -0.80000000000000004, 0.87266462599716477 },
-  { 1.1789022995388239, -0.80000000000000004, 1.0471975511965976 },
-  { 1.4323027881876009, -0.80000000000000004, 1.2217304763960306 },
-  { 1.7069629739121674, -0.80000000000000004, 1.3962634015954636 },
-  { 1.9953027776647296, -0.80000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, -0.90000000000000002, 0.0000000000000000, 0.0 },
+  { 0.17525427376115027, -0.90000000000000002, 0.17453292519943295, 0.0 },
+  { 0.35492464591297446, -0.90000000000000002, 0.34906585039886590, 0.0 },
+  { 0.54388221416157123, -0.90000000000000002, 0.52359877559829882, 0.0 },
+  { 0.74797400423532512, -0.90000000000000002, 0.69813170079773179, 0.0 },
+  { 0.97463898451966446, -0.90000000000000002, 0.87266462599716477, 0.0 },
+  { 1.2334463254523438, -0.90000000000000002, 1.0471975511965976, 0.0 },
+  { 1.5355247765594913, -0.90000000000000002, 1.2217304763960306, 0.0 },
+  { 1.8882928567775126, -0.90000000000000002, 1.3962634015954636, 0.0 },
+  { 2.2805491384227703, -0.90000000000000002, 1.5707963267948966, 0.0 },
 };
+const double toler001 = 2.5000000000000020e-13;
 
-// Test function for k=-0.80000000000000004.
-template <typename Tp>
-void test002()
+// Test data for k=-0.80000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.2032670495747184e-16
+// mean(f - f_Boost): 1.9428902930940239e-16
+// variance(f - f_Boost): 2.7486111305082033e-32
+// stddev(f - f_Boost): 1.6578935823834422e-16
+const testcase_ellint_1<double>
+data002[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data002)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data002[i].k), Tp(data002[i].phi));
-      const Tp f0 = data002[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.69999999999999996.
-testcase_ellint_1<double> data003[] = {
-  { -0.0000000000000000, -0.69999999999999996, 0.0000000000000000 },
-  { 0.17496737466916720, -0.69999999999999996, 0.17453292519943295 },
-  { 0.35254687535677925, -0.69999999999999996, 0.34906585039886590 },
-  { 0.53536740275997130, -0.69999999999999996, 0.52359877559829882 },
-  { 0.72603797651684465, -0.69999999999999996, 0.69813170079773179 },
-  { 0.92698296348313458, -0.69999999999999996, 0.87266462599716477 },
-  { 1.1400447527693316, -0.69999999999999996, 1.0471975511965976 },
-  { 1.3657668117194071, -0.69999999999999996, 1.2217304763960306 },
-  { 1.6024686895959159, -0.69999999999999996, 1.3962634015954636 },
-  { 1.8456939983747236, -0.69999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, -0.80000000000000004, 0.0000000000000000, 0.0 },
+  { 0.17510154241338899, -0.80000000000000004, 0.17453292519943295, 0.0 },
+  { 0.35365068839779396, -0.80000000000000004, 0.34906585039886590, 0.0 },
+  { 0.53926804409084550, -0.80000000000000004, 0.52359877559829882, 0.0 },
+  { 0.73587926028070372, -0.80000000000000004, 0.69813170079773179, 0.0 },
+  { 0.94770942970071170, -0.80000000000000004, 0.87266462599716477, 0.0 },
+  { 1.1789022995388236, -0.80000000000000004, 1.0471975511965976, 0.0 },
+  { 1.4323027881876012, -0.80000000000000004, 1.2217304763960306, 0.0 },
+  { 1.7069629739121677, -0.80000000000000004, 1.3962634015954636, 0.0 },
+  { 1.9953027776647294, -0.80000000000000004, 1.5707963267948966, 0.0 },
 };
+const double toler002 = 2.5000000000000020e-13;
 
-// Test function for k=-0.69999999999999996.
-template <typename Tp>
-void test003()
+// Test data for k=-0.69999999999999996.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.5425633303580569e-16
+// mean(f - f_Boost): 3.3306690738754695e-17
+// variance(f - f_Boost): 2.8136647641852830e-32
+// stddev(f - f_Boost): 1.6773982127644239e-16
+const testcase_ellint_1<double>
+data003[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data003)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data003[i].k), Tp(data003[i].phi));
-      const Tp f0 = data003[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.59999999999999998.
-testcase_ellint_1<double> data004[] = {
-  { -0.0000000000000000, -0.59999999999999998, 0.0000000000000000 },
-  { 0.17485154362988362, -0.59999999999999998, 0.17453292519943295 },
-  { 0.35160509865544326, -0.59999999999999998, 0.34906585039886590 },
-  { 0.53210652578446160, -0.59999999999999998, 0.52359877559829882 },
-  { 0.71805304664485670, -0.59999999999999998, 0.69813170079773179 },
-  { 0.91082759030195970, -0.59999999999999998, 0.87266462599716477 },
-  { 1.1112333229323361, -0.59999999999999998, 1.0471975511965976 },
-  { 1.3191461190365270, -0.59999999999999998, 1.2217304763960306 },
-  { 1.5332022105084773, -0.59999999999999998, 1.3962634015954636 },
-  { 1.7507538029157526, -0.59999999999999998, 1.5707963267948966 },
+  { 0.0000000000000000, -0.69999999999999996, 0.0000000000000000, 0.0 },
+  { 0.17496737466916723, -0.69999999999999996, 0.17453292519943295, 0.0 },
+  { 0.35254687535677931, -0.69999999999999996, 0.34906585039886590, 0.0 },
+  { 0.53536740275997130, -0.69999999999999996, 0.52359877559829882, 0.0 },
+  { 0.72603797651684454, -0.69999999999999996, 0.69813170079773179, 0.0 },
+  { 0.92698296348313447, -0.69999999999999996, 0.87266462599716477, 0.0 },
+  { 1.1400447527693316, -0.69999999999999996, 1.0471975511965976, 0.0 },
+  { 1.3657668117194071, -0.69999999999999996, 1.2217304763960306, 0.0 },
+  { 1.6024686895959162, -0.69999999999999996, 1.3962634015954636, 0.0 },
+  { 1.8456939983747234, -0.69999999999999996, 1.5707963267948966, 0.0 },
 };
+const double toler003 = 2.5000000000000020e-13;
 
-// Test function for k=-0.59999999999999998.
-template <typename Tp>
-void test004()
+// Test data for k=-0.59999999999999998.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.3664899092028927e-16
+// mean(f - f_Boost): 5.2735593669694933e-17
+// variance(f - f_Boost): 3.4333862218458872e-34
+// stddev(f - f_Boost): 1.8529398861932589e-17
+const testcase_ellint_1<double>
+data004[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data004)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data004[i].k), Tp(data004[i].phi));
-      const Tp f0 = data004[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.50000000000000000.
-testcase_ellint_1<double> data005[] = {
-  { -0.0000000000000000, -0.50000000000000000, 0.0000000000000000 },
-  { 0.17475385514035785, -0.50000000000000000, 0.17453292519943295 },
-  { 0.35081868470101585, -0.50000000000000000, 0.34906585039886590 },
-  { 0.52942862705190585, -0.50000000000000000, 0.52359877559829882 },
-  { 0.71164727562630326, -0.50000000000000000, 0.69813170079773179 },
-  { 0.89824523594227768, -0.50000000000000000, 0.87266462599716477 },
-  { 1.0895506700518851, -0.50000000000000000, 1.0471975511965976 },
-  { 1.2853005857432933, -0.50000000000000000, 1.2217304763960306 },
-  { 1.4845545520549484, -0.50000000000000000, 1.3962634015954636 },
-  { 1.6857503548125963, -0.50000000000000000, 1.5707963267948966 },
+  { 0.0000000000000000, -0.59999999999999998, 0.0000000000000000, 0.0 },
+  { 0.17485154362988359, -0.59999999999999998, 0.17453292519943295, 0.0 },
+  { 0.35160509865544320, -0.59999999999999998, 0.34906585039886590, 0.0 },
+  { 0.53210652578446138, -0.59999999999999998, 0.52359877559829882, 0.0 },
+  { 0.71805304664485659, -0.59999999999999998, 0.69813170079773179, 0.0 },
+  { 0.91082759030195981, -0.59999999999999998, 0.87266462599716477, 0.0 },
+  { 1.1112333229323361, -0.59999999999999998, 1.0471975511965976, 0.0 },
+  { 1.3191461190365270, -0.59999999999999998, 1.2217304763960306, 0.0 },
+  { 1.5332022105084779, -0.59999999999999998, 1.3962634015954636, 0.0 },
+  { 1.7507538029157523, -0.59999999999999998, 1.5707963267948966, 0.0 },
 };
+const double toler004 = 2.5000000000000020e-13;
 
-// Test function for k=-0.50000000000000000.
-template <typename Tp>
-void test005()
+// Test data for k=-0.50000000000000000.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.4551389361831220e-16
+// mean(f - f_Boost): -5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
+const testcase_ellint_1<double>
+data005[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data005)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data005[i].k), Tp(data005[i].phi));
-      const Tp f0 = data005[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.40000000000000002.
-testcase_ellint_1<double> data006[] = {
-  { -0.0000000000000000, -0.40000000000000002, 0.0000000000000000 },
-  { 0.17467414669441531, -0.40000000000000002, 0.17453292519943295 },
-  { 0.35018222772483443, -0.40000000000000002, 0.34906585039886590 },
-  { 0.52729015917508748, -0.40000000000000002, 0.52359877559829882 },
-  { 0.70662374407341255, -0.40000000000000002, 0.69813170079773179 },
-  { 0.88859210497602170, -0.40000000000000002, 0.87266462599716477 },
-  { 1.0733136290471379, -0.40000000000000002, 1.0471975511965976 },
-  { 1.2605612170157061, -0.40000000000000002, 1.2217304763960306 },
-  { 1.4497513956433437, -0.40000000000000002, 1.3962634015954636 },
-  { 1.6399998658645112, -0.40000000000000002, 1.5707963267948966 },
+  { 0.0000000000000000, -0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 0.17475385514035785, -0.50000000000000000, 0.17453292519943295, 0.0 },
+  { 0.35081868470101579, -0.50000000000000000, 0.34906585039886590, 0.0 },
+  { 0.52942862705190574, -0.50000000000000000, 0.52359877559829882, 0.0 },
+  { 0.71164727562630326, -0.50000000000000000, 0.69813170079773179, 0.0 },
+  { 0.89824523594227768, -0.50000000000000000, 0.87266462599716477, 0.0 },
+  { 1.0895506700518853, -0.50000000000000000, 1.0471975511965976, 0.0 },
+  { 1.2853005857432933, -0.50000000000000000, 1.2217304763960306, 0.0 },
+  { 1.4845545520549488, -0.50000000000000000, 1.3962634015954636, 0.0 },
+  { 1.6857503548125961, -0.50000000000000000, 1.5707963267948966, 0.0 },
 };
-
-// Test function for k=-0.40000000000000002.
-template <typename Tp>
-void test006()
+const double toler005 = 2.5000000000000020e-13;
+
+// Test data for k=-0.39999999999999991.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.1423314994346225e-16
+// mean(f - f_Boost): -6.9388939039072284e-17
+// variance(f - f_Boost): 1.7333369499485123e-32
+// stddev(f - f_Boost): 1.3165625507162629e-16
+const testcase_ellint_1<double>
+data006[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data006)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data006[i].k), Tp(data006[i].phi));
-      const Tp f0 = data006[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.30000000000000004.
-testcase_ellint_1<double> data007[] = {
-  { -0.0000000000000000, -0.30000000000000004, 0.0000000000000000 },
-  { 0.17461228653000102, -0.30000000000000004, 0.17453292519943295 },
-  { 0.34969146102798415, -0.30000000000000004, 0.34906585039886590 },
-  { 0.52565822873726320, -0.30000000000000004, 0.52359877559829882 },
-  { 0.70284226512408532, -0.30000000000000004, 0.69813170079773179 },
-  { 0.88144139195111182, -0.30000000000000004, 0.87266462599716477 },
-  { 1.0614897067260523, -0.30000000000000004, 1.0471975511965976 },
-  { 1.2428416824174218, -0.30000000000000004, 1.2217304763960306 },
-  { 1.4251795877015925, -0.30000000000000004, 1.3962634015954636 },
-  { 1.6080486199305126, -0.30000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, -0.39999999999999991, 0.0000000000000000, 0.0 },
+  { 0.17467414669441528, -0.39999999999999991, 0.17453292519943295, 0.0 },
+  { 0.35018222772483443, -0.39999999999999991, 0.34906585039886590, 0.0 },
+  { 0.52729015917508748, -0.39999999999999991, 0.52359877559829882, 0.0 },
+  { 0.70662374407341244, -0.39999999999999991, 0.69813170079773179, 0.0 },
+  { 0.88859210497602159, -0.39999999999999991, 0.87266462599716477, 0.0 },
+  { 1.0733136290471381, -0.39999999999999991, 1.0471975511965976, 0.0 },
+  { 1.2605612170157066, -0.39999999999999991, 1.2217304763960306, 0.0 },
+  { 1.4497513956433439, -0.39999999999999991, 1.3962634015954636, 0.0 },
+  { 1.6399998658645112, -0.39999999999999991, 1.5707963267948966, 0.0 },
 };
-
-// Test function for k=-0.30000000000000004.
-template <typename Tp>
-void test007()
+const double toler006 = 2.5000000000000020e-13;
+
+// Test data for k=-0.29999999999999993.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.2241249691539529e-16
+// mean(f - f_Boost): -8.3266726846886741e-17
+// variance(f - f_Boost): 4.1942474344433135e-32
+// stddev(f - f_Boost): 2.0479861900030756e-16
+const testcase_ellint_1<double>
+data007[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data007)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data007[i].k), Tp(data007[i].phi));
-      const Tp f0 = data007[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.19999999999999996.
-testcase_ellint_1<double> data008[] = {
-  { -0.0000000000000000, -0.19999999999999996, 0.0000000000000000 },
-  { 0.17456817290292811, -0.19999999999999996, 0.17453292519943295 },
-  { 0.34934315932086801, -0.19999999999999996, 0.34906585039886590 },
-  { 0.52450880529443988, -0.19999999999999996, 0.52359877559829882 },
-  { 0.70020491009844910, -0.19999999999999996, 0.69813170079773179 },
-  { 0.87651006649967955, -0.19999999999999996, 0.87266462599716477 },
-  { 1.0534305870298994, -0.19999999999999996, 1.0471975511965976 },
-  { 1.2308975521670784, -0.19999999999999996, 1.2217304763960306 },
-  { 1.4087733584990738, -0.19999999999999996, 1.3962634015954636 },
-  { 1.5868678474541664, -0.19999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, -0.29999999999999993, 0.0000000000000000, 0.0 },
+  { 0.17461228653000099, -0.29999999999999993, 0.17453292519943295, 0.0 },
+  { 0.34969146102798421, -0.29999999999999993, 0.34906585039886590, 0.0 },
+  { 0.52565822873726309, -0.29999999999999993, 0.52359877559829882, 0.0 },
+  { 0.70284226512408543, -0.29999999999999993, 0.69813170079773179, 0.0 },
+  { 0.88144139195111171, -0.29999999999999993, 0.87266462599716477, 0.0 },
+  { 1.0614897067260520, -0.29999999999999993, 1.0471975511965976, 0.0 },
+  { 1.2428416824174220, -0.29999999999999993, 1.2217304763960306, 0.0 },
+  { 1.4251795877015929, -0.29999999999999993, 1.3962634015954636, 0.0 },
+  { 1.6080486199305126, -0.29999999999999993, 1.5707963267948966, 0.0 },
 };
+const double toler007 = 2.5000000000000020e-13;
 
-// Test function for k=-0.19999999999999996.
-template <typename Tp>
-void test008()
+// Test data for k=-0.19999999999999996.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.2156475739151676e-16
+// mean(f - f_Boost): -9.7144514654701197e-17
+// variance(f - f_Boost): 1.1650687317898094e-33
+// stddev(f - f_Boost): 3.4133103166717924e-17
+const testcase_ellint_1<double>
+data008[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data008)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data008[i].k), Tp(data008[i].phi));
-      const Tp f0 = data008[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.099999999999999978.
-testcase_ellint_1<double> data009[] = {
-  { -0.0000000000000000, -0.099999999999999978, 0.0000000000000000 },
-  { 0.17454173353063665, -0.099999999999999978, 0.17453292519943295 },
-  { 0.34913506721468085, -0.099999999999999978, 0.34906585039886590 },
-  { 0.52382550016538953, -0.099999999999999978, 0.52359877559829882 },
-  { 0.69864700854177031, -0.099999999999999978, 0.69813170079773179 },
-  { 0.87361792586964870, -0.099999999999999978, 0.87266462599716477 },
-  { 1.0487386319621685, -0.099999999999999978, 1.0471975511965976 },
-  { 1.2239913752078757, -0.099999999999999978, 1.2217304763960306 },
-  { 1.3993423113684049, -0.099999999999999978, 1.3962634015954636 },
-  { 1.5747455615173562, -0.099999999999999978, 1.5707963267948966 },
+  { 0.0000000000000000, -0.19999999999999996, 0.0000000000000000, 0.0 },
+  { 0.17456817290292806, -0.19999999999999996, 0.17453292519943295, 0.0 },
+  { 0.34934315932086796, -0.19999999999999996, 0.34906585039886590, 0.0 },
+  { 0.52450880529443988, -0.19999999999999996, 0.52359877559829882, 0.0 },
+  { 0.70020491009844887, -0.19999999999999996, 0.69813170079773179, 0.0 },
+  { 0.87651006649967977, -0.19999999999999996, 0.87266462599716477, 0.0 },
+  { 1.0534305870298994, -0.19999999999999996, 1.0471975511965976, 0.0 },
+  { 1.2308975521670789, -0.19999999999999996, 1.2217304763960306, 0.0 },
+  { 1.4087733584990738, -0.19999999999999996, 1.3962634015954636, 0.0 },
+  { 1.5868678474541662, -0.19999999999999996, 1.5707963267948966, 0.0 },
 };
+const double toler008 = 2.5000000000000020e-13;
 
-// Test function for k=-0.099999999999999978.
-template <typename Tp>
-void test009()
+// Test data for k=-0.099999999999999978.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.1735566504509645e-16
+// mean(f - f_Boost): -3.6082248300317589e-17
+// variance(f - f_Boost): 8.2258607846939269e-33
+// stddev(f - f_Boost): 9.0696531271564778e-17
+const testcase_ellint_1<double>
+data009[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data009)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data009[i].k), Tp(data009[i].phi));
-      const Tp f0 = data009[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.0000000000000000.
-testcase_ellint_1<double> data010[] = {
-  { -0.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
-  { 0.17453292519943295, 0.0000000000000000, 0.17453292519943295 },
-  { 0.34906585039886584, 0.0000000000000000, 0.34906585039886590 },
-  { 0.52359877559829882, 0.0000000000000000, 0.52359877559829882 },
-  { 0.69813170079773179, 0.0000000000000000, 0.69813170079773179 },
-  { 0.87266462599716477, 0.0000000000000000, 0.87266462599716477 },
-  { 1.0471975511965976, 0.0000000000000000, 1.0471975511965976 },
-  { 1.2217304763960304, 0.0000000000000000, 1.2217304763960306 },
-  { 1.3962634015954631, 0.0000000000000000, 1.3962634015954636 },
-  { 1.5707963267948966, 0.0000000000000000, 1.5707963267948966 },
+  { 0.0000000000000000, -0.099999999999999978, 0.0000000000000000, 0.0 },
+  { 0.17454173353063662, -0.099999999999999978, 0.17453292519943295, 0.0 },
+  { 0.34913506721468096, -0.099999999999999978, 0.34906585039886590, 0.0 },
+  { 0.52382550016538953, -0.099999999999999978, 0.52359877559829882, 0.0 },
+  { 0.69864700854177020, -0.099999999999999978, 0.69813170079773179, 0.0 },
+  { 0.87361792586964859, -0.099999999999999978, 0.87266462599716477, 0.0 },
+  { 1.0487386319621685, -0.099999999999999978, 1.0471975511965976, 0.0 },
+  { 1.2239913752078759, -0.099999999999999978, 1.2217304763960306, 0.0 },
+  { 1.3993423113684051, -0.099999999999999978, 1.3962634015954636, 0.0 },
+  { 1.5747455615173558, -0.099999999999999978, 1.5707963267948966, 0.0 },
 };
+const double toler009 = 2.5000000000000020e-13;
 
-// Test function for k=0.0000000000000000.
-template <typename Tp>
-void test010()
+// Test data for k=0.0000000000000000.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.1203697876423447e-16
+// mean(f - f_Boost): -1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
+const testcase_ellint_1<double>
+data010[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data010)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data010[i].k), Tp(data010[i].phi));
-      const Tp f0 = data010[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.10000000000000009.
-testcase_ellint_1<double> data011[] = {
-  { -0.0000000000000000, 0.10000000000000009, 0.0000000000000000 },
-  { 0.17454173353063665, 0.10000000000000009, 0.17453292519943295 },
-  { 0.34913506721468085, 0.10000000000000009, 0.34906585039886590 },
-  { 0.52382550016538953, 0.10000000000000009, 0.52359877559829882 },
-  { 0.69864700854177031, 0.10000000000000009, 0.69813170079773179 },
-  { 0.87361792586964870, 0.10000000000000009, 0.87266462599716477 },
-  { 1.0487386319621685, 0.10000000000000009, 1.0471975511965976 },
-  { 1.2239913752078757, 0.10000000000000009, 1.2217304763960306 },
-  { 1.3993423113684049, 0.10000000000000009, 1.3962634015954636 },
-  { 1.5747455615173562, 0.10000000000000009, 1.5707963267948966 },
+  { 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.17453292519943295, 0.0000000000000000, 0.17453292519943295, 0.0 },
+  { 0.34906585039886590, 0.0000000000000000, 0.34906585039886590, 0.0 },
+  { 0.52359877559829882, 0.0000000000000000, 0.52359877559829882, 0.0 },
+  { 0.69813170079773179, 0.0000000000000000, 0.69813170079773179, 0.0 },
+  { 0.87266462599716477, 0.0000000000000000, 0.87266462599716477, 0.0 },
+  { 1.0471975511965976, 0.0000000000000000, 1.0471975511965976, 0.0 },
+  { 1.2217304763960306, 0.0000000000000000, 1.2217304763960306, 0.0 },
+  { 1.3962634015954636, 0.0000000000000000, 1.3962634015954636, 0.0 },
+  { 1.5707963267948966, 0.0000000000000000, 1.5707963267948966, 0.0 },
 };
+const double toler010 = 2.5000000000000020e-13;
 
-// Test function for k=0.10000000000000009.
-template <typename Tp>
-void test011()
+// Test data for k=0.10000000000000009.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.1735566504509645e-16
+// mean(f - f_Boost): -5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
+const testcase_ellint_1<double>
+data011[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data011)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data011[i].k), Tp(data011[i].phi));
-      const Tp f0 = data011[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.19999999999999996.
-testcase_ellint_1<double> data012[] = {
-  { -0.0000000000000000, 0.19999999999999996, 0.0000000000000000 },
-  { 0.17456817290292811, 0.19999999999999996, 0.17453292519943295 },
-  { 0.34934315932086801, 0.19999999999999996, 0.34906585039886590 },
-  { 0.52450880529443988, 0.19999999999999996, 0.52359877559829882 },
-  { 0.70020491009844910, 0.19999999999999996, 0.69813170079773179 },
-  { 0.87651006649967955, 0.19999999999999996, 0.87266462599716477 },
-  { 1.0534305870298994, 0.19999999999999996, 1.0471975511965976 },
-  { 1.2308975521670784, 0.19999999999999996, 1.2217304763960306 },
-  { 1.4087733584990738, 0.19999999999999996, 1.3962634015954636 },
-  { 1.5868678474541664, 0.19999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, 0.10000000000000009, 0.0000000000000000, 0.0 },
+  { 0.17454173353063662, 0.10000000000000009, 0.17453292519943295, 0.0 },
+  { 0.34913506721468096, 0.10000000000000009, 0.34906585039886590, 0.0 },
+  { 0.52382550016538953, 0.10000000000000009, 0.52359877559829882, 0.0 },
+  { 0.69864700854177020, 0.10000000000000009, 0.69813170079773179, 0.0 },
+  { 0.87361792586964859, 0.10000000000000009, 0.87266462599716477, 0.0 },
+  { 1.0487386319621685, 0.10000000000000009, 1.0471975511965976, 0.0 },
+  { 1.2239913752078759, 0.10000000000000009, 1.2217304763960306, 0.0 },
+  { 1.3993423113684051, 0.10000000000000009, 1.3962634015954636, 0.0 },
+  { 1.5747455615173560, 0.10000000000000009, 1.5707963267948966, 0.0 },
 };
-
-// Test function for k=0.19999999999999996.
-template <typename Tp>
-void test012()
+const double toler011 = 2.5000000000000020e-13;
+
+// Test data for k=0.20000000000000018.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.2156475739151676e-16
+// mean(f - f_Boost): -9.7144514654701197e-17
+// variance(f - f_Boost): 1.1650687317898094e-33
+// stddev(f - f_Boost): 3.4133103166717924e-17
+const testcase_ellint_1<double>
+data012[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data012)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data012[i].k), Tp(data012[i].phi));
-      const Tp f0 = data012[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.30000000000000004.
-testcase_ellint_1<double> data013[] = {
-  { -0.0000000000000000, 0.30000000000000004, 0.0000000000000000 },
-  { 0.17461228653000102, 0.30000000000000004, 0.17453292519943295 },
-  { 0.34969146102798415, 0.30000000000000004, 0.34906585039886590 },
-  { 0.52565822873726320, 0.30000000000000004, 0.52359877559829882 },
-  { 0.70284226512408532, 0.30000000000000004, 0.69813170079773179 },
-  { 0.88144139195111182, 0.30000000000000004, 0.87266462599716477 },
-  { 1.0614897067260523, 0.30000000000000004, 1.0471975511965976 },
-  { 1.2428416824174218, 0.30000000000000004, 1.2217304763960306 },
-  { 1.4251795877015925, 0.30000000000000004, 1.3962634015954636 },
-  { 1.6080486199305126, 0.30000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, 0.20000000000000018, 0.0000000000000000, 0.0 },
+  { 0.17456817290292806, 0.20000000000000018, 0.17453292519943295, 0.0 },
+  { 0.34934315932086796, 0.20000000000000018, 0.34906585039886590, 0.0 },
+  { 0.52450880529443988, 0.20000000000000018, 0.52359877559829882, 0.0 },
+  { 0.70020491009844887, 0.20000000000000018, 0.69813170079773179, 0.0 },
+  { 0.87651006649967977, 0.20000000000000018, 0.87266462599716477, 0.0 },
+  { 1.0534305870298994, 0.20000000000000018, 1.0471975511965976, 0.0 },
+  { 1.2308975521670789, 0.20000000000000018, 1.2217304763960306, 0.0 },
+  { 1.4087733584990738, 0.20000000000000018, 1.3962634015954636, 0.0 },
+  { 1.5868678474541662, 0.20000000000000018, 1.5707963267948966, 0.0 },
 };
+const double toler012 = 2.5000000000000020e-13;
 
-// Test function for k=0.30000000000000004.
-template <typename Tp>
-void test013()
+// Test data for k=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.5233306300061082e-16
+// mean(f - f_Boost): -1.0547118733938987e-16
+// variance(f - f_Boost): 7.5633408838247182e-32
+// stddev(f - f_Boost): 2.7501528837184157e-16
+const testcase_ellint_1<double>
+data013[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data013)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data013[i].k), Tp(data013[i].phi));
-      const Tp f0 = data013[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.39999999999999991.
-testcase_ellint_1<double> data014[] = {
-  { -0.0000000000000000, 0.39999999999999991, 0.0000000000000000 },
-  { 0.17467414669441531, 0.39999999999999991, 0.17453292519943295 },
-  { 0.35018222772483443, 0.39999999999999991, 0.34906585039886590 },
-  { 0.52729015917508748, 0.39999999999999991, 0.52359877559829882 },
-  { 0.70662374407341255, 0.39999999999999991, 0.69813170079773179 },
-  { 0.88859210497602170, 0.39999999999999991, 0.87266462599716477 },
-  { 1.0733136290471379, 0.39999999999999991, 1.0471975511965976 },
-  { 1.2605612170157061, 0.39999999999999991, 1.2217304763960306 },
-  { 1.4497513956433437, 0.39999999999999991, 1.3962634015954636 },
-  { 1.6399998658645112, 0.39999999999999991, 1.5707963267948966 },
+  { 0.0000000000000000, 0.30000000000000004, 0.0000000000000000, 0.0 },
+  { 0.17461228653000099, 0.30000000000000004, 0.17453292519943295, 0.0 },
+  { 0.34969146102798421, 0.30000000000000004, 0.34906585039886590, 0.0 },
+  { 0.52565822873726309, 0.30000000000000004, 0.52359877559829882, 0.0 },
+  { 0.70284226512408543, 0.30000000000000004, 0.69813170079773179, 0.0 },
+  { 0.88144139195111171, 0.30000000000000004, 0.87266462599716477, 0.0 },
+  { 1.0614897067260520, 0.30000000000000004, 1.0471975511965976, 0.0 },
+  { 1.2428416824174220, 0.30000000000000004, 1.2217304763960306, 0.0 },
+  { 1.4251795877015929, 0.30000000000000004, 1.3962634015954636, 0.0 },
+  { 1.6080486199305128, 0.30000000000000004, 1.5707963267948966, 0.0 },
 };
-
-// Test function for k=0.39999999999999991.
-template <typename Tp>
-void test014()
+const double toler013 = 2.5000000000000020e-13;
+
+// Test data for k=0.40000000000000013.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.1423314994346225e-16
+// mean(f - f_Boost): -4.7184478546569152e-17
+// variance(f - f_Boost): 1.9448563670505968e-32
+// stddev(f - f_Boost): 1.3945810722401896e-16
+const testcase_ellint_1<double>
+data014[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data014)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data014[i].k), Tp(data014[i].phi));
-      const Tp f0 = data014[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.50000000000000000.
-testcase_ellint_1<double> data015[] = {
-  { -0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
-  { 0.17475385514035785, 0.50000000000000000, 0.17453292519943295 },
-  { 0.35081868470101585, 0.50000000000000000, 0.34906585039886590 },
-  { 0.52942862705190585, 0.50000000000000000, 0.52359877559829882 },
-  { 0.71164727562630326, 0.50000000000000000, 0.69813170079773179 },
-  { 0.89824523594227768, 0.50000000000000000, 0.87266462599716477 },
-  { 1.0895506700518851, 0.50000000000000000, 1.0471975511965976 },
-  { 1.2853005857432933, 0.50000000000000000, 1.2217304763960306 },
-  { 1.4845545520549484, 0.50000000000000000, 1.3962634015954636 },
-  { 1.6857503548125963, 0.50000000000000000, 1.5707963267948966 },
+  { 0.0000000000000000, 0.40000000000000013, 0.0000000000000000, 0.0 },
+  { 0.17467414669441528, 0.40000000000000013, 0.17453292519943295, 0.0 },
+  { 0.35018222772483443, 0.40000000000000013, 0.34906585039886590, 0.0 },
+  { 0.52729015917508748, 0.40000000000000013, 0.52359877559829882, 0.0 },
+  { 0.70662374407341244, 0.40000000000000013, 0.69813170079773179, 0.0 },
+  { 0.88859210497602159, 0.40000000000000013, 0.87266462599716477, 0.0 },
+  { 1.0733136290471381, 0.40000000000000013, 1.0471975511965976, 0.0 },
+  { 1.2605612170157066, 0.40000000000000013, 1.2217304763960306, 0.0 },
+  { 1.4497513956433439, 0.40000000000000013, 1.3962634015954636, 0.0 },
+  { 1.6399998658645112, 0.40000000000000013, 1.5707963267948966, 0.0 },
 };
+const double toler014 = 2.5000000000000020e-13;
 
-// Test function for k=0.50000000000000000.
-template <typename Tp>
-void test015()
+// Test data for k=0.50000000000000000.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.4551389361831220e-16
+// mean(f - f_Boost): -5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
+const testcase_ellint_1<double>
+data015[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data015)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data015[i].k), Tp(data015[i].phi));
-      const Tp f0 = data015[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.60000000000000009.
-testcase_ellint_1<double> data016[] = {
-  { -0.0000000000000000, 0.60000000000000009, 0.0000000000000000 },
-  { 0.17485154362988362, 0.60000000000000009, 0.17453292519943295 },
-  { 0.35160509865544326, 0.60000000000000009, 0.34906585039886590 },
-  { 0.53210652578446160, 0.60000000000000009, 0.52359877559829882 },
-  { 0.71805304664485670, 0.60000000000000009, 0.69813170079773179 },
-  { 0.91082759030195970, 0.60000000000000009, 0.87266462599716477 },
-  { 1.1112333229323366, 0.60000000000000009, 1.0471975511965976 },
-  { 1.3191461190365270, 0.60000000000000009, 1.2217304763960306 },
-  { 1.5332022105084775, 0.60000000000000009, 1.3962634015954636 },
-  { 1.7507538029157526, 0.60000000000000009, 1.5707963267948966 },
+  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 0.17475385514035785, 0.50000000000000000, 0.17453292519943295, 0.0 },
+  { 0.35081868470101579, 0.50000000000000000, 0.34906585039886590, 0.0 },
+  { 0.52942862705190574, 0.50000000000000000, 0.52359877559829882, 0.0 },
+  { 0.71164727562630326, 0.50000000000000000, 0.69813170079773179, 0.0 },
+  { 0.89824523594227768, 0.50000000000000000, 0.87266462599716477, 0.0 },
+  { 1.0895506700518853, 0.50000000000000000, 1.0471975511965976, 0.0 },
+  { 1.2853005857432933, 0.50000000000000000, 1.2217304763960306, 0.0 },
+  { 1.4845545520549488, 0.50000000000000000, 1.3962634015954636, 0.0 },
+  { 1.6857503548125961, 0.50000000000000000, 1.5707963267948966, 0.0 },
 };
+const double toler015 = 2.5000000000000020e-13;
 
-// Test function for k=0.60000000000000009.
-template <typename Tp>
-void test016()
+// Test data for k=0.60000000000000009.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.3664899092028927e-16
+// mean(f - f_Boost): 7.4940054162198071e-17
+// variance(f - f_Boost): 2.6715739327327140e-33
+// stddev(f - f_Boost): 5.1687270509601433e-17
+const testcase_ellint_1<double>
+data016[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data016)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data016[i].k), Tp(data016[i].phi));
-      const Tp f0 = data016[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.69999999999999996.
-testcase_ellint_1<double> data017[] = {
-  { -0.0000000000000000, 0.69999999999999996, 0.0000000000000000 },
-  { 0.17496737466916720, 0.69999999999999996, 0.17453292519943295 },
-  { 0.35254687535677925, 0.69999999999999996, 0.34906585039886590 },
-  { 0.53536740275997130, 0.69999999999999996, 0.52359877559829882 },
-  { 0.72603797651684465, 0.69999999999999996, 0.69813170079773179 },
-  { 0.92698296348313458, 0.69999999999999996, 0.87266462599716477 },
-  { 1.1400447527693316, 0.69999999999999996, 1.0471975511965976 },
-  { 1.3657668117194071, 0.69999999999999996, 1.2217304763960306 },
-  { 1.6024686895959159, 0.69999999999999996, 1.3962634015954636 },
-  { 1.8456939983747236, 0.69999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, 0.60000000000000009, 0.0000000000000000, 0.0 },
+  { 0.17485154362988359, 0.60000000000000009, 0.17453292519943295, 0.0 },
+  { 0.35160509865544320, 0.60000000000000009, 0.34906585039886590, 0.0 },
+  { 0.53210652578446138, 0.60000000000000009, 0.52359877559829882, 0.0 },
+  { 0.71805304664485659, 0.60000000000000009, 0.69813170079773179, 0.0 },
+  { 0.91082759030195981, 0.60000000000000009, 0.87266462599716477, 0.0 },
+  { 1.1112333229323361, 0.60000000000000009, 1.0471975511965976, 0.0 },
+  { 1.3191461190365270, 0.60000000000000009, 1.2217304763960306, 0.0 },
+  { 1.5332022105084779, 0.60000000000000009, 1.3962634015954636, 0.0 },
+  { 1.7507538029157526, 0.60000000000000009, 1.5707963267948966, 0.0 },
 };
-
-// Test function for k=0.69999999999999996.
-template <typename Tp>
-void test017()
+const double toler016 = 2.5000000000000020e-13;
+
+// Test data for k=0.70000000000000018.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.1569224977685422e-16
+// mean(f - f_Boost): -1.1102230246251566e-17
+// variance(f - f_Boost): 2.3145398087213714e-32
+// stddev(f - f_Boost): 1.5213611697165703e-16
+const testcase_ellint_1<double>
+data017[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data017)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data017[i].k), Tp(data017[i].phi));
-      const Tp f0 = data017[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.80000000000000004.
-testcase_ellint_1<double> data018[] = {
-  { -0.0000000000000000, 0.80000000000000004, 0.0000000000000000 },
-  { 0.17510154241338902, 0.80000000000000004, 0.17453292519943295 },
-  { 0.35365068839779390, 0.80000000000000004, 0.34906585039886590 },
-  { 0.53926804409084561, 0.80000000000000004, 0.52359877559829882 },
-  { 0.73587926028070383, 0.80000000000000004, 0.69813170079773179 },
-  { 0.94770942970071170, 0.80000000000000004, 0.87266462599716477 },
-  { 1.1789022995388239, 0.80000000000000004, 1.0471975511965976 },
-  { 1.4323027881876009, 0.80000000000000004, 1.2217304763960306 },
-  { 1.7069629739121674, 0.80000000000000004, 1.3962634015954636 },
-  { 1.9953027776647296, 0.80000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, 0.70000000000000018, 0.0000000000000000, 0.0 },
+  { 0.17496737466916723, 0.70000000000000018, 0.17453292519943295, 0.0 },
+  { 0.35254687535677931, 0.70000000000000018, 0.34906585039886590, 0.0 },
+  { 0.53536740275997130, 0.70000000000000018, 0.52359877559829882, 0.0 },
+  { 0.72603797651684454, 0.70000000000000018, 0.69813170079773179, 0.0 },
+  { 0.92698296348313447, 0.70000000000000018, 0.87266462599716477, 0.0 },
+  { 1.1400447527693318, 0.70000000000000018, 1.0471975511965976, 0.0 },
+  { 1.3657668117194073, 0.70000000000000018, 1.2217304763960306, 0.0 },
+  { 1.6024686895959164, 0.70000000000000018, 1.3962634015954636, 0.0 },
+  { 1.8456939983747236, 0.70000000000000018, 1.5707963267948966, 0.0 },
 };
+const double toler017 = 2.5000000000000020e-13;
 
-// Test function for k=0.80000000000000004.
-template <typename Tp>
-void test018()
+// Test data for k=0.80000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.2032670495747184e-16
+// mean(f - f_Boost): 1.9428902930940239e-16
+// variance(f - f_Boost): 2.7486111305082033e-32
+// stddev(f - f_Boost): 1.6578935823834422e-16
+const testcase_ellint_1<double>
+data018[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data018)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data018[i].k), Tp(data018[i].phi));
-      const Tp f0 = data018[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.89999999999999991.
-testcase_ellint_1<double> data019[] = {
-  { -0.0000000000000000, 0.89999999999999991, 0.0000000000000000 },
-  { 0.17525427376115027, 0.89999999999999991, 0.17453292519943295 },
-  { 0.35492464591297446, 0.89999999999999991, 0.34906585039886590 },
-  { 0.54388221416157123, 0.89999999999999991, 0.52359877559829882 },
-  { 0.74797400423532501, 0.89999999999999991, 0.69813170079773179 },
-  { 0.97463898451966458, 0.89999999999999991, 0.87266462599716477 },
-  { 1.2334463254523438, 0.89999999999999991, 1.0471975511965976 },
-  { 1.5355247765594910, 0.89999999999999991, 1.2217304763960306 },
-  { 1.8882928567775117, 0.89999999999999991, 1.3962634015954636 },
-  { 2.2805491384227699, 0.89999999999999991, 1.5707963267948966 },
+  { 0.0000000000000000, 0.80000000000000004, 0.0000000000000000, 0.0 },
+  { 0.17510154241338899, 0.80000000000000004, 0.17453292519943295, 0.0 },
+  { 0.35365068839779396, 0.80000000000000004, 0.34906585039886590, 0.0 },
+  { 0.53926804409084550, 0.80000000000000004, 0.52359877559829882, 0.0 },
+  { 0.73587926028070372, 0.80000000000000004, 0.69813170079773179, 0.0 },
+  { 0.94770942970071170, 0.80000000000000004, 0.87266462599716477, 0.0 },
+  { 1.1789022995388236, 0.80000000000000004, 1.0471975511965976, 0.0 },
+  { 1.4323027881876012, 0.80000000000000004, 1.2217304763960306, 0.0 },
+  { 1.7069629739121677, 0.80000000000000004, 1.3962634015954636, 0.0 },
+  { 1.9953027776647294, 0.80000000000000004, 1.5707963267948966, 0.0 },
 };
-
-// Test function for k=0.89999999999999991.
-template <typename Tp>
-void test019()
+const double toler018 = 2.5000000000000020e-13;
+
+// Test data for k=0.90000000000000013.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3381508715713360e-16
+// mean(f - f_Boost): 1.4710455076283324e-16
+// variance(f - f_Boost): 6.7801293731072419e-32
+// stddev(f - f_Boost): 2.6038681558610532e-16
+const testcase_ellint_1<double>
+data019[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data019)
-                         / sizeof(testcase_ellint_1<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_1(Tp(data019[i].k), Tp(data019[i].phi));
-      const Tp f0 = data019[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+  { 0.0000000000000000, 0.90000000000000013, 0.0000000000000000, 0.0 },
+  { 0.17525427376115027, 0.90000000000000013, 0.17453292519943295, 0.0 },
+  { 0.35492464591297446, 0.90000000000000013, 0.34906585039886590, 0.0 },
+  { 0.54388221416157123, 0.90000000000000013, 0.52359877559829882, 0.0 },
+  { 0.74797400423532512, 0.90000000000000013, 0.69813170079773179, 0.0 },
+  { 0.97463898451966446, 0.90000000000000013, 0.87266462599716477, 0.0 },
+  { 1.2334463254523440, 0.90000000000000013, 1.0471975511965976, 0.0 },
+  { 1.5355247765594915, 0.90000000000000013, 1.2217304763960306, 0.0 },
+  { 1.8882928567775128, 0.90000000000000013, 1.3962634015954636, 0.0 },
+  { 2.2805491384227707, 0.90000000000000013, 1.5707963267948966, 0.0 },
+};
+const double toler019 = 2.5000000000000020e-13;
+
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_ellint_1<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+      {
+       const Ret f = std::tr1::ellint_1(data[i].k, data[i].phi);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
+int
+main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
-  test015<double>();
-  test016<double>();
-  test017<double>();
-  test018<double>();
-  test019<double>();
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
+  test(data016, toler016);
+  test(data017, toler017);
+  test(data018, toler018);
+  test(data019, toler019);
   return 0;
 }
index e0717ba..6b26e74 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  ellint_2
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for k=-0.90000000000000002.
-testcase_ellint_2<double> data001[] = {
-  { -0.0000000000000000, -0.90000000000000002, 0.0000000000000000 },
-  { 0.17381690606167963, -0.90000000000000002, 0.17453292519943295 },
-  { 0.34337919186972055, -0.90000000000000002, 0.34906585039886590 },
-  { 0.50464268659856337, -0.90000000000000002, 0.52359877559829882 },
-  { 0.65400003842368593, -0.90000000000000002, 0.69813170079773179 },
-  { 0.78854928419904657, -0.90000000000000002, 0.87266462599716477 },
-  { 0.90645698626315407, -0.90000000000000002, 1.0471975511965976 },
-  { 1.0075154899135925, -0.90000000000000002, 1.2217304763960306 },
-  { 1.0940135583194071, -0.90000000000000002, 1.3962634015954636 },
-  { 1.1716970527816140, -0.90000000000000002, 1.5707963267948966 },
-};
-
-// Test function for k=-0.90000000000000002.
-template <typename Tp>
-void test001()
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 6.6116483711056727e-16
+// mean(f - f_Boost): -8.6042284408449634e-17
+// variance(f - f_Boost): 4.1543973284335233e-32
+// stddev(f - f_Boost): 2.0382338748125847e-16
+const testcase_ellint_2<double>
+data001[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data001[i].k), Tp(data001[i].phi));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
-}
-
-// Test data for k=-0.80000000000000004.
-testcase_ellint_2<double> data002[] = {
-  { -0.0000000000000000, -0.80000000000000004, 0.0000000000000000 },
-  { 0.17396762274534808, -0.80000000000000004, 0.17453292519943295 },
-  { 0.34458685226969316, -0.80000000000000004, 0.34906585039886590 },
-  { 0.50872923654502444, -0.80000000000000004, 0.52359877559829882 },
-  { 0.66372016539176237, -0.80000000000000004, 0.69813170079773179 },
-  { 0.80760344410167406, -0.80000000000000004, 0.87266462599716477 },
-  { 0.93945480372495072, -0.80000000000000004, 1.0471975511965976 },
-  { 1.0597473310395036, -0.80000000000000004, 1.2217304763960306 },
-  { 1.1706981862452361, -0.80000000000000004, 1.3962634015954636 },
-  { 1.2763499431699066, -0.80000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, -0.90000000000000002, 0.0000000000000000, 0.0 },
+  { 0.17381690606167963, -0.90000000000000002, 0.17453292519943295, 0.0 },
+  { 0.34337919186972055, -0.90000000000000002, 0.34906585039886590, 0.0 },
+  { 0.50464268659856337, -0.90000000000000002, 0.52359877559829882, 0.0 },
+  { 0.65400003842368593, -0.90000000000000002, 0.69813170079773179, 0.0 },
+  { 0.78854928419904635, -0.90000000000000002, 0.87266462599716477, 0.0 },
+  { 0.90645698626315396, -0.90000000000000002, 1.0471975511965976, 0.0 },
+  { 1.0075154899135927, -0.90000000000000002, 1.2217304763960306, 0.0 },
+  { 1.0940135583194071, -0.90000000000000002, 1.3962634015954636, 0.0 },
+  { 1.1716970527816142, -0.90000000000000002, 1.5707963267948966, 0.0 },
 };
+const double toler001 = 2.5000000000000020e-13;
 
-// Test function for k=-0.80000000000000004.
-template <typename Tp>
-void test002()
+// Test data for k=-0.80000000000000004.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.0438106231598255e-15
+// mean(f - f_Boost): 1.8318679906315082e-16
+// variance(f - f_Boost): 1.6301071049293564e-31
+// stddev(f - f_Boost): 4.0374584888632060e-16
+const testcase_ellint_2<double>
+data002[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data002)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data002[i].k), Tp(data002[i].phi));
-      const Tp f0 = data002[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
-
-// Test data for k=-0.69999999999999996.
-testcase_ellint_2<double> data003[] = {
-  { -0.0000000000000000, -0.69999999999999996, 0.0000000000000000 },
-  { 0.17410041242702540, -0.69999999999999996, 0.17453292519943295 },
-  { 0.34564605085764760, -0.69999999999999996, 0.34906585039886590 },
-  { 0.51228495693314657, -0.69999999999999996, 0.52359877559829882 },
-  { 0.67207654098799530, -0.69999999999999996, 0.69813170079773179 },
-  { 0.82370932631556515, -0.69999999999999996, 0.87266462599716477 },
-  { 0.96672313309452795, -0.69999999999999996, 1.0471975511965976 },
-  { 1.1017090644949503, -0.69999999999999996, 1.2217304763960306 },
-  { 1.2304180097292916, -0.69999999999999996, 1.3962634015954636 },
-  { 1.3556611355719557, -0.69999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, -0.80000000000000004, 0.0000000000000000, 0.0 },
+  { 0.17396762274534805, -0.80000000000000004, 0.17453292519943295, 0.0 },
+  { 0.34458685226969321, -0.80000000000000004, 0.34906585039886590, 0.0 },
+  { 0.50872923654502433, -0.80000000000000004, 0.52359877559829882, 0.0 },
+  { 0.66372016539176226, -0.80000000000000004, 0.69813170079773179, 0.0 },
+  { 0.80760344410167406, -0.80000000000000004, 0.87266462599716477, 0.0 },
+  { 0.93945480372495072, -0.80000000000000004, 1.0471975511965976, 0.0 },
+  { 1.0597473310395040, -0.80000000000000004, 1.2217304763960306, 0.0 },
+  { 1.1706981862452359, -0.80000000000000004, 1.3962634015954636, 0.0 },
+  { 1.2763499431699064, -0.80000000000000004, 1.5707963267948966, 0.0 },
 };
+const double toler002 = 2.5000000000000020e-13;
 
-// Test function for k=-0.69999999999999996.
-template <typename Tp>
-void test003()
+// Test data for k=-0.69999999999999996.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.4138821888802831e-16
+// mean(f - f_Boost): 1.9428902930940238e-17
+// variance(f - f_Boost): 2.6524572947662036e-32
+// stddev(f - f_Boost): 1.6286366368119696e-16
+const testcase_ellint_2<double>
+data003[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data003)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data003[i].k), Tp(data003[i].phi));
-      const Tp f0 = data003[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for k=-0.59999999999999998.
-testcase_ellint_2<double> data004[] = {
-  { -0.0000000000000000, -0.59999999999999998, 0.0000000000000000 },
-  { 0.17421534919599130, -0.59999999999999998, 0.17453292519943295 },
-  { 0.34655927787174101, -0.59999999999999998, 0.34906585039886590 },
-  { 0.51533034538432165, -0.59999999999999998, 0.52359877559829882 },
-  { 0.67916550597453029, -0.59999999999999998, 0.69813170079773179 },
-  { 0.83720218180349870, -0.59999999999999998, 0.87266462599716477 },
-  { 0.98922159354937755, -0.59999999999999998, 1.0471975511965976 },
-  { 1.1357478470419360, -0.59999999999999998, 1.2217304763960306 },
-  { 1.2780617372844056, -0.59999999999999998, 1.3962634015954636 },
-  { 1.4180833944487243, -0.59999999999999998, 1.5707963267948966 },
+  { 0.0000000000000000, -0.69999999999999996, 0.0000000000000000, 0.0 },
+  { 0.17410041242702540, -0.69999999999999996, 0.17453292519943295, 0.0 },
+  { 0.34564605085764760, -0.69999999999999996, 0.34906585039886590, 0.0 },
+  { 0.51228495693314657, -0.69999999999999996, 0.52359877559829882, 0.0 },
+  { 0.67207654098799530, -0.69999999999999996, 0.69813170079773179, 0.0 },
+  { 0.82370932631556493, -0.69999999999999996, 0.87266462599716477, 0.0 },
+  { 0.96672313309452806, -0.69999999999999996, 1.0471975511965976, 0.0 },
+  { 1.1017090644949501, -0.69999999999999996, 1.2217304763960306, 0.0 },
+  { 1.2304180097292916, -0.69999999999999996, 1.3962634015954636, 0.0 },
+  { 1.3556611355719554, -0.69999999999999996, 1.5707963267948966, 0.0 },
 };
+const double toler003 = 2.5000000000000020e-13;
 
-// Test function for k=-0.59999999999999998.
-template <typename Tp>
-void test004()
+// Test data for k=-0.59999999999999998.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 1.9550519554437030e-16
+// mean(f - f_Boost): 1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
+const testcase_ellint_2<double>
+data004[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data004)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data004[i].k), Tp(data004[i].phi));
-      const Tp f0 = data004[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for k=-0.50000000000000000.
-testcase_ellint_2<double> data005[] = {
-  { -0.0000000000000000, -0.50000000000000000, 0.0000000000000000 },
-  { 0.17431249677315910, -0.50000000000000000, 0.17453292519943295 },
-  { 0.34732862537770803, -0.50000000000000000, 0.34906585039886590 },
-  { 0.51788193485993805, -0.50000000000000000, 0.52359877559829882 },
-  { 0.68506022954164536, -0.50000000000000000, 0.69813170079773179 },
-  { 0.84831662803347196, -0.50000000000000000, 0.87266462599716477 },
-  { 1.0075555551444717, -0.50000000000000000, 1.0471975511965976 },
-  { 1.1631768599287302, -0.50000000000000000, 1.2217304763960306 },
-  { 1.3160584048772543, -0.50000000000000000, 1.3962634015954636 },
-  { 1.4674622093394274, -0.50000000000000000, 1.5707963267948966 },
+  { 0.0000000000000000, -0.59999999999999998, 0.0000000000000000, 0.0 },
+  { 0.17421534919599127, -0.59999999999999998, 0.17453292519943295, 0.0 },
+  { 0.34655927787174096, -0.59999999999999998, 0.34906585039886590, 0.0 },
+  { 0.51533034538432143, -0.59999999999999998, 0.52359877559829882, 0.0 },
+  { 0.67916550597453018, -0.59999999999999998, 0.69813170079773179, 0.0 },
+  { 0.83720218180349881, -0.59999999999999998, 0.87266462599716477, 0.0 },
+  { 0.98922159354937755, -0.59999999999999998, 1.0471975511965976, 0.0 },
+  { 1.1357478470419362, -0.59999999999999998, 1.2217304763960306, 0.0 },
+  { 1.2780617372844061, -0.59999999999999998, 1.3962634015954636, 0.0 },
+  { 1.4180833944487241, -0.59999999999999998, 1.5707963267948966, 0.0 },
 };
+const double toler004 = 2.5000000000000020e-13;
 
-// Test function for k=-0.50000000000000000.
-template <typename Tp>
-void test005()
+// Test data for k=-0.50000000000000000.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.8178992821201131e-16
+// mean(f - f_Boost): -4.9960036108132046e-17
+// variance(f - f_Boost): 3.0133908324921077e-32
+// stddev(f - f_Boost): 1.7359121039073689e-16
+const testcase_ellint_2<double>
+data005[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data005)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data005[i].k), Tp(data005[i].phi));
-      const Tp f0 = data005[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.40000000000000002.
-testcase_ellint_2<double> data006[] = {
-  { -0.0000000000000000, -0.40000000000000002, 0.0000000000000000 },
-  { 0.17439190872481269, -0.40000000000000002, 0.17453292519943295 },
-  { 0.34795581767099210, -0.40000000000000002, 0.34906585039886590 },
-  { 0.51995290683804474, -0.40000000000000002, 0.52359877559829882 },
-  { 0.68981638464431549, -0.40000000000000002, 0.69813170079773179 },
-  { 0.85722088859936041, -0.40000000000000002, 0.87266462599716477 },
-  { 1.0221301327876993, -0.40000000000000002, 1.0471975511965976 },
-  { 1.1848138019818371, -0.40000000000000002, 1.2217304763960306 },
-  { 1.3458259266501531, -0.40000000000000002, 1.3962634015954636 },
-  { 1.5059416123600402, -0.40000000000000002, 1.5707963267948966 },
+  { 0.0000000000000000, -0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 0.17431249677315908, -0.50000000000000000, 0.17453292519943295, 0.0 },
+  { 0.34732862537770803, -0.50000000000000000, 0.34906585039886590, 0.0 },
+  { 0.51788193485993794, -0.50000000000000000, 0.52359877559829882, 0.0 },
+  { 0.68506022954164547, -0.50000000000000000, 0.69813170079773179, 0.0 },
+  { 0.84831662803347208, -0.50000000000000000, 0.87266462599716477, 0.0 },
+  { 1.0075555551444719, -0.50000000000000000, 1.0471975511965976, 0.0 },
+  { 1.1631768599287302, -0.50000000000000000, 1.2217304763960306, 0.0 },
+  { 1.3160584048772548, -0.50000000000000000, 1.3962634015954636, 0.0 },
+  { 1.4674622093394272, -0.50000000000000000, 1.5707963267948966, 0.0 },
 };
-
-// Test function for k=-0.40000000000000002.
-template <typename Tp>
-void test006()
+const double toler005 = 2.5000000000000020e-13;
+
+// Test data for k=-0.39999999999999991.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 2.9489138636265387e-16
+// mean(f - f_Boost): 8.6042284408449634e-17
+// variance(f - f_Boost): 1.5826864298542218e-32
+// stddev(f - f_Boost): 1.2580486595733180e-16
+const testcase_ellint_2<double>
+data006[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data006)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data006[i].k), Tp(data006[i].phi));
-      const Tp f0 = data006[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.30000000000000004.
-testcase_ellint_2<double> data007[] = {
-  { -0.0000000000000000, -0.30000000000000004, 0.0000000000000000 },
-  { 0.17445362864048916, -0.30000000000000004, 0.17453292519943295 },
-  { 0.34844223535713464, -0.30000000000000004, 0.34906585039886590 },
-  { 0.52155353877411770, -0.30000000000000004, 0.52359877559829882 },
-  { 0.69347584418369879, -0.30000000000000004, 0.69813170079773179 },
-  { 0.86403609928237668, -0.30000000000000004, 0.87266462599716477 },
-  { 1.0332234514065410, -0.30000000000000004, 1.0471975511965976 },
-  { 1.2011943182068923, -0.30000000000000004, 1.2217304763960306 },
-  { 1.3682566113689620, -0.30000000000000004, 1.3962634015954636 },
-  { 1.5348334649232489, -0.30000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, -0.39999999999999991, 0.0000000000000000, 0.0 },
+  { 0.17439190872481267, -0.39999999999999991, 0.17453292519943295, 0.0 },
+  { 0.34795581767099210, -0.39999999999999991, 0.34906585039886590, 0.0 },
+  { 0.51995290683804463, -0.39999999999999991, 0.52359877559829882, 0.0 },
+  { 0.68981638464431527, -0.39999999999999991, 0.69813170079773179, 0.0 },
+  { 0.85722088859936030, -0.39999999999999991, 0.87266462599716477, 0.0 },
+  { 1.0221301327876993, -0.39999999999999991, 1.0471975511965976, 0.0 },
+  { 1.1848138019818375, -0.39999999999999991, 1.2217304763960306, 0.0 },
+  { 1.3458259266501533, -0.39999999999999991, 1.3962634015954636, 0.0 },
+  { 1.5059416123600404, -0.39999999999999991, 1.5707963267948966, 0.0 },
 };
-
-// Test function for k=-0.30000000000000004.
-template <typename Tp>
-void test007()
+const double toler006 = 2.5000000000000020e-13;
+
+// Test data for k=-0.29999999999999993.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3401048387253188e-16
+// mean(f - f_Boost): 7.2164496600635178e-17
+// variance(f - f_Boost): 4.3555500115139682e-32
+// stddev(f - f_Boost): 2.0869954507650391e-16
+const testcase_ellint_2<double>
+data007[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data007)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data007[i].k), Tp(data007[i].phi));
-      const Tp f0 = data007[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.19999999999999996.
-testcase_ellint_2<double> data008[] = {
-  { -0.0000000000000000, -0.19999999999999996, 0.0000000000000000 },
-  { 0.17449769027652814, -0.19999999999999996, 0.17453292519943295 },
-  { 0.34878893400762095, -0.19999999999999996, 0.34906585039886590 },
-  { 0.52269152856057410, -0.19999999999999996, 0.52359877559829882 },
-  { 0.69606913360157596, -0.19999999999999996, 0.69813170079773179 },
-  { 0.86884782374863356, -0.19999999999999996, 0.87266462599716477 },
-  { 1.0410255369689567, -0.19999999999999996, 1.0471975511965976 },
-  { 1.2126730391631360, -0.19999999999999996, 1.2217304763960306 },
-  { 1.3839259540325153, -0.19999999999999996, 1.3962634015954636 },
-  { 1.5549685462425296, -0.19999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, -0.29999999999999993, 0.0000000000000000, 0.0 },
+  { 0.17445362864048913, -0.29999999999999993, 0.17453292519943295, 0.0 },
+  { 0.34844223535713470, -0.29999999999999993, 0.34906585039886590, 0.0 },
+  { 0.52155353877411759, -0.29999999999999993, 0.52359877559829882, 0.0 },
+  { 0.69347584418369890, -0.29999999999999993, 0.69813170079773179, 0.0 },
+  { 0.86403609928237657, -0.29999999999999993, 0.87266462599716477, 0.0 },
+  { 1.0332234514065408, -0.29999999999999993, 1.0471975511965976, 0.0 },
+  { 1.2011943182068923, -0.29999999999999993, 1.2217304763960306, 0.0 },
+  { 1.3682566113689625, -0.29999999999999993, 1.3962634015954636, 0.0 },
+  { 1.5348334649232489, -0.29999999999999993, 1.5707963267948966, 0.0 },
 };
+const double toler007 = 2.5000000000000020e-13;
 
-// Test function for k=-0.19999999999999996.
-template <typename Tp>
-void test008()
+// Test data for k=-0.19999999999999996.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.2658819988515356e-16
+// mean(f - f_Boost): -5.2735593669694933e-17
+// variance(f - f_Boost): 3.0473442641042680e-32
+// stddev(f - f_Boost): 1.7456644190978597e-16
+const testcase_ellint_2<double>
+data008[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data008)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data008[i].k), Tp(data008[i].phi));
-      const Tp f0 = data008[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.099999999999999978.
-testcase_ellint_2<double> data009[] = {
-  { -0.0000000000000000, -0.099999999999999978, 0.0000000000000000 },
-  { 0.17452411766649945, -0.099999999999999978, 0.17453292519943295 },
-  { 0.34899665805442398, -0.099999999999999978, 0.34906585039886590 },
-  { 0.52337222400508787, -0.099999999999999978, 0.52359877559829882 },
-  { 0.69761705217284875, -0.099999999999999978, 0.69813170079773179 },
-  { 0.87171309273007491, -0.099999999999999978, 0.87266462599716477 },
-  { 1.0456602197056328, -0.099999999999999978, 1.0471975511965976 },
-  { 1.2194762899272025, -0.099999999999999978, 1.2217304763960306 },
-  { 1.3931950229892744, -0.099999999999999978, 1.3962634015954636 },
-  { 1.5668619420216685, -0.099999999999999978, 1.5707963267948966 },
+  { 0.0000000000000000, -0.19999999999999996, 0.0000000000000000, 0.0 },
+  { 0.17449769027652809, -0.19999999999999996, 0.17453292519943295, 0.0 },
+  { 0.34878893400762090, -0.19999999999999996, 0.34906585039886590, 0.0 },
+  { 0.52269152856057410, -0.19999999999999996, 0.52359877559829882, 0.0 },
+  { 0.69606913360157574, -0.19999999999999996, 0.69813170079773179, 0.0 },
+  { 0.86884782374863379, -0.19999999999999996, 0.87266462599716477, 0.0 },
+  { 1.0410255369689567, -0.19999999999999996, 1.0471975511965976, 0.0 },
+  { 1.2126730391631364, -0.19999999999999996, 1.2217304763960306, 0.0 },
+  { 1.3839259540325151, -0.19999999999999996, 1.3962634015954636, 0.0 },
+  { 1.5549685462425293, -0.19999999999999996, 1.5707963267948966, 0.0 },
 };
+const double toler008 = 2.5000000000000020e-13;
 
-// Test function for k=-0.099999999999999978.
-template <typename Tp>
-void test009()
+// Test data for k=-0.099999999999999978.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.1875595485348024e-16
+// mean(f - f_Boost): -4.7184478546569152e-17
+// variance(f - f_Boost): 2.7486111305082032e-34
+// stddev(f - f_Boost): 1.6578935823834422e-17
+const testcase_ellint_2<double>
+data009[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data009)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data009[i].k), Tp(data009[i].phi));
-      const Tp f0 = data009[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.0000000000000000.
-testcase_ellint_2<double> data010[] = {
-  { -0.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
-  { 0.17453292519943295, 0.0000000000000000, 0.17453292519943295 },
-  { 0.34906585039886584, 0.0000000000000000, 0.34906585039886590 },
-  { 0.52359877559829882, 0.0000000000000000, 0.52359877559829882 },
-  { 0.69813170079773179, 0.0000000000000000, 0.69813170079773179 },
-  { 0.87266462599716477, 0.0000000000000000, 0.87266462599716477 },
-  { 1.0471975511965976, 0.0000000000000000, 1.0471975511965976 },
-  { 1.2217304763960304, 0.0000000000000000, 1.2217304763960306 },
-  { 1.3962634015954631, 0.0000000000000000, 1.3962634015954636 },
-  { 1.5707963267948966, 0.0000000000000000, 1.5707963267948966 },
+  { 0.0000000000000000, -0.099999999999999978, 0.0000000000000000, 0.0 },
+  { 0.17452411766649942, -0.099999999999999978, 0.17453292519943295, 0.0 },
+  { 0.34899665805442409, -0.099999999999999978, 0.34906585039886590, 0.0 },
+  { 0.52337222400508787, -0.099999999999999978, 0.52359877559829882, 0.0 },
+  { 0.69761705217284864, -0.099999999999999978, 0.69813170079773179, 0.0 },
+  { 0.87171309273007491, -0.099999999999999978, 0.87266462599716477, 0.0 },
+  { 1.0456602197056326, -0.099999999999999978, 1.0471975511965976, 0.0 },
+  { 1.2194762899272027, -0.099999999999999978, 1.2217304763960306, 0.0 },
+  { 1.3931950229892747, -0.099999999999999978, 1.3962634015954636, 0.0 },
+  { 1.5668619420216683, -0.099999999999999978, 1.5707963267948966, 0.0 },
 };
+const double toler009 = 2.5000000000000020e-13;
 
-// Test function for k=0.0000000000000000.
-template <typename Tp>
-void test010()
+// Test data for k=0.0000000000000000.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.1203697876423447e-16
+// mean(f - f_Boost): -1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
+const testcase_ellint_2<double>
+data010[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data010)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data010[i].k), Tp(data010[i].phi));
-      const Tp f0 = data010[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.10000000000000009.
-testcase_ellint_2<double> data011[] = {
-  { -0.0000000000000000, 0.10000000000000009, 0.0000000000000000 },
-  { 0.17452411766649945, 0.10000000000000009, 0.17453292519943295 },
-  { 0.34899665805442398, 0.10000000000000009, 0.34906585039886590 },
-  { 0.52337222400508787, 0.10000000000000009, 0.52359877559829882 },
-  { 0.69761705217284875, 0.10000000000000009, 0.69813170079773179 },
-  { 0.87171309273007491, 0.10000000000000009, 0.87266462599716477 },
-  { 1.0456602197056328, 0.10000000000000009, 1.0471975511965976 },
-  { 1.2194762899272025, 0.10000000000000009, 1.2217304763960306 },
-  { 1.3931950229892744, 0.10000000000000009, 1.3962634015954636 },
-  { 1.5668619420216685, 0.10000000000000009, 1.5707963267948966 },
+  { 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+  { 0.17453292519943295, 0.0000000000000000, 0.17453292519943295, 0.0 },
+  { 0.34906585039886590, 0.0000000000000000, 0.34906585039886590, 0.0 },
+  { 0.52359877559829882, 0.0000000000000000, 0.52359877559829882, 0.0 },
+  { 0.69813170079773179, 0.0000000000000000, 0.69813170079773179, 0.0 },
+  { 0.87266462599716477, 0.0000000000000000, 0.87266462599716477, 0.0 },
+  { 1.0471975511965976, 0.0000000000000000, 1.0471975511965976, 0.0 },
+  { 1.2217304763960306, 0.0000000000000000, 1.2217304763960306, 0.0 },
+  { 1.3962634015954636, 0.0000000000000000, 1.3962634015954636, 0.0 },
+  { 1.5707963267948966, 0.0000000000000000, 1.5707963267948966, 0.0 },
 };
+const double toler010 = 2.5000000000000020e-13;
 
-// Test function for k=0.10000000000000009.
-template <typename Tp>
-void test011()
+// Test data for k=0.10000000000000009.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.1875595485348024e-16
+// mean(f - f_Boost): -4.7184478546569152e-17
+// variance(f - f_Boost): 2.7486111305082032e-34
+// stddev(f - f_Boost): 1.6578935823834422e-17
+const testcase_ellint_2<double>
+data011[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data011)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data011[i].k), Tp(data011[i].phi));
-      const Tp f0 = data011[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.19999999999999996.
-testcase_ellint_2<double> data012[] = {
-  { -0.0000000000000000, 0.19999999999999996, 0.0000000000000000 },
-  { 0.17449769027652814, 0.19999999999999996, 0.17453292519943295 },
-  { 0.34878893400762095, 0.19999999999999996, 0.34906585039886590 },
-  { 0.52269152856057410, 0.19999999999999996, 0.52359877559829882 },
-  { 0.69606913360157596, 0.19999999999999996, 0.69813170079773179 },
-  { 0.86884782374863356, 0.19999999999999996, 0.87266462599716477 },
-  { 1.0410255369689567, 0.19999999999999996, 1.0471975511965976 },
-  { 1.2126730391631360, 0.19999999999999996, 1.2217304763960306 },
-  { 1.3839259540325153, 0.19999999999999996, 1.3962634015954636 },
-  { 1.5549685462425296, 0.19999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, 0.10000000000000009, 0.0000000000000000, 0.0 },
+  { 0.17452411766649942, 0.10000000000000009, 0.17453292519943295, 0.0 },
+  { 0.34899665805442409, 0.10000000000000009, 0.34906585039886590, 0.0 },
+  { 0.52337222400508787, 0.10000000000000009, 0.52359877559829882, 0.0 },
+  { 0.69761705217284864, 0.10000000000000009, 0.69813170079773179, 0.0 },
+  { 0.87171309273007491, 0.10000000000000009, 0.87266462599716477, 0.0 },
+  { 1.0456602197056326, 0.10000000000000009, 1.0471975511965976, 0.0 },
+  { 1.2194762899272027, 0.10000000000000009, 1.2217304763960306, 0.0 },
+  { 1.3931950229892747, 0.10000000000000009, 1.3962634015954636, 0.0 },
+  { 1.5668619420216683, 0.10000000000000009, 1.5707963267948966, 0.0 },
 };
-
-// Test function for k=0.19999999999999996.
-template <typename Tp>
-void test012()
+const double toler011 = 2.5000000000000020e-13;
+
+// Test data for k=0.20000000000000018.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.2658819988515356e-16
+// mean(f - f_Boost): -5.2735593669694933e-17
+// variance(f - f_Boost): 3.0473442641042680e-32
+// stddev(f - f_Boost): 1.7456644190978597e-16
+const testcase_ellint_2<double>
+data012[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data012)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data012[i].k), Tp(data012[i].phi));
-      const Tp f0 = data012[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.30000000000000004.
-testcase_ellint_2<double> data013[] = {
-  { -0.0000000000000000, 0.30000000000000004, 0.0000000000000000 },
-  { 0.17445362864048916, 0.30000000000000004, 0.17453292519943295 },
-  { 0.34844223535713464, 0.30000000000000004, 0.34906585039886590 },
-  { 0.52155353877411770, 0.30000000000000004, 0.52359877559829882 },
-  { 0.69347584418369879, 0.30000000000000004, 0.69813170079773179 },
-  { 0.86403609928237668, 0.30000000000000004, 0.87266462599716477 },
-  { 1.0332234514065410, 0.30000000000000004, 1.0471975511965976 },
-  { 1.2011943182068923, 0.30000000000000004, 1.2217304763960306 },
-  { 1.3682566113689620, 0.30000000000000004, 1.3962634015954636 },
-  { 1.5348334649232489, 0.30000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, 0.20000000000000018, 0.0000000000000000, 0.0 },
+  { 0.17449769027652809, 0.20000000000000018, 0.17453292519943295, 0.0 },
+  { 0.34878893400762090, 0.20000000000000018, 0.34906585039886590, 0.0 },
+  { 0.52269152856057410, 0.20000000000000018, 0.52359877559829882, 0.0 },
+  { 0.69606913360157574, 0.20000000000000018, 0.69813170079773179, 0.0 },
+  { 0.86884782374863379, 0.20000000000000018, 0.87266462599716477, 0.0 },
+  { 1.0410255369689567, 0.20000000000000018, 1.0471975511965976, 0.0 },
+  { 1.2126730391631364, 0.20000000000000018, 1.2217304763960306, 0.0 },
+  { 1.3839259540325151, 0.20000000000000018, 1.3962634015954636, 0.0 },
+  { 1.5549685462425291, 0.20000000000000018, 1.5707963267948966, 0.0 },
 };
+const double toler012 = 2.5000000000000020e-13;
 
-// Test function for k=0.30000000000000004.
-template <typename Tp>
-void test013()
+// Test data for k=0.30000000000000004.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3401048387253188e-16
+// mean(f - f_Boost): 7.2164496600635178e-17
+// variance(f - f_Boost): 4.3555500115139682e-32
+// stddev(f - f_Boost): 2.0869954507650391e-16
+const testcase_ellint_2<double>
+data013[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data013)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data013[i].k), Tp(data013[i].phi));
-      const Tp f0 = data013[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.39999999999999991.
-testcase_ellint_2<double> data014[] = {
-  { -0.0000000000000000, 0.39999999999999991, 0.0000000000000000 },
-  { 0.17439190872481269, 0.39999999999999991, 0.17453292519943295 },
-  { 0.34795581767099210, 0.39999999999999991, 0.34906585039886590 },
-  { 0.51995290683804474, 0.39999999999999991, 0.52359877559829882 },
-  { 0.68981638464431549, 0.39999999999999991, 0.69813170079773179 },
-  { 0.85722088859936041, 0.39999999999999991, 0.87266462599716477 },
-  { 1.0221301327876993, 0.39999999999999991, 1.0471975511965976 },
-  { 1.1848138019818373, 0.39999999999999991, 1.2217304763960306 },
-  { 1.3458259266501531, 0.39999999999999991, 1.3962634015954636 },
-  { 1.5059416123600404, 0.39999999999999991, 1.5707963267948966 },
+  { 0.0000000000000000, 0.30000000000000004, 0.0000000000000000, 0.0 },
+  { 0.17445362864048913, 0.30000000000000004, 0.17453292519943295, 0.0 },
+  { 0.34844223535713470, 0.30000000000000004, 0.34906585039886590, 0.0 },
+  { 0.52155353877411759, 0.30000000000000004, 0.52359877559829882, 0.0 },
+  { 0.69347584418369890, 0.30000000000000004, 0.69813170079773179, 0.0 },
+  { 0.86403609928237657, 0.30000000000000004, 0.87266462599716477, 0.0 },
+  { 1.0332234514065408, 0.30000000000000004, 1.0471975511965976, 0.0 },
+  { 1.2011943182068923, 0.30000000000000004, 1.2217304763960306, 0.0 },
+  { 1.3682566113689625, 0.30000000000000004, 1.3962634015954636, 0.0 },
+  { 1.5348334649232489, 0.30000000000000004, 1.5707963267948966, 0.0 },
 };
-
-// Test function for k=0.39999999999999991.
-template <typename Tp>
-void test014()
+const double toler013 = 2.5000000000000020e-13;
+
+// Test data for k=0.40000000000000013.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.1795655454506157e-15
+// mean(f - f_Boost): 2.0816681711721685e-16
+// variance(f - f_Boost): 3.0360740073926687e-31
+// stddev(f - f_Boost): 5.5100580826273227e-16
+const testcase_ellint_2<double>
+data014[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data014)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data014[i].k), Tp(data014[i].phi));
-      const Tp f0 = data014[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.50000000000000000.
-testcase_ellint_2<double> data015[] = {
-  { -0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
-  { 0.17431249677315910, 0.50000000000000000, 0.17453292519943295 },
-  { 0.34732862537770803, 0.50000000000000000, 0.34906585039886590 },
-  { 0.51788193485993805, 0.50000000000000000, 0.52359877559829882 },
-  { 0.68506022954164536, 0.50000000000000000, 0.69813170079773179 },
-  { 0.84831662803347196, 0.50000000000000000, 0.87266462599716477 },
-  { 1.0075555551444717, 0.50000000000000000, 1.0471975511965976 },
-  { 1.1631768599287302, 0.50000000000000000, 1.2217304763960306 },
-  { 1.3160584048772543, 0.50000000000000000, 1.3962634015954636 },
-  { 1.4674622093394274, 0.50000000000000000, 1.5707963267948966 },
+  { 0.0000000000000000, 0.40000000000000013, 0.0000000000000000, 0.0 },
+  { 0.17439190872481267, 0.40000000000000013, 0.17453292519943295, 0.0 },
+  { 0.34795581767099210, 0.40000000000000013, 0.34906585039886590, 0.0 },
+  { 0.51995290683804463, 0.40000000000000013, 0.52359877559829882, 0.0 },
+  { 0.68981638464431527, 0.40000000000000013, 0.69813170079773179, 0.0 },
+  { 0.85722088859936030, 0.40000000000000013, 0.87266462599716477, 0.0 },
+  { 1.0221301327876993, 0.40000000000000013, 1.0471975511965976, 0.0 },
+  { 1.1848138019818375, 0.40000000000000013, 1.2217304763960306, 0.0 },
+  { 1.3458259266501531, 0.40000000000000013, 1.3962634015954636, 0.0 },
+  { 1.5059416123600402, 0.40000000000000013, 1.5707963267948966, 0.0 },
 };
+const double toler014 = 2.5000000000000020e-13;
 
-// Test function for k=0.50000000000000000.
-template <typename Tp>
-void test015()
+// Test data for k=0.50000000000000000.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.8178992821201131e-16
+// mean(f - f_Boost): -4.9960036108132046e-17
+// variance(f - f_Boost): 3.0133908324921077e-32
+// stddev(f - f_Boost): 1.7359121039073689e-16
+const testcase_ellint_2<double>
+data015[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data015)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data015[i].k), Tp(data015[i].phi));
-      const Tp f0 = data015[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.60000000000000009.
-testcase_ellint_2<double> data016[] = {
-  { -0.0000000000000000, 0.60000000000000009, 0.0000000000000000 },
-  { 0.17421534919599130, 0.60000000000000009, 0.17453292519943295 },
-  { 0.34655927787174101, 0.60000000000000009, 0.34906585039886590 },
-  { 0.51533034538432165, 0.60000000000000009, 0.52359877559829882 },
-  { 0.67916550597453029, 0.60000000000000009, 0.69813170079773179 },
-  { 0.83720218180349870, 0.60000000000000009, 0.87266462599716477 },
-  { 0.98922159354937789, 0.60000000000000009, 1.0471975511965976 },
-  { 1.1357478470419360, 0.60000000000000009, 1.2217304763960306 },
-  { 1.2780617372844056, 0.60000000000000009, 1.3962634015954636 },
-  { 1.4180833944487241, 0.60000000000000009, 1.5707963267948966 },
+  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+  { 0.17431249677315908, 0.50000000000000000, 0.17453292519943295, 0.0 },
+  { 0.34732862537770803, 0.50000000000000000, 0.34906585039886590, 0.0 },
+  { 0.51788193485993794, 0.50000000000000000, 0.52359877559829882, 0.0 },
+  { 0.68506022954164547, 0.50000000000000000, 0.69813170079773179, 0.0 },
+  { 0.84831662803347208, 0.50000000000000000, 0.87266462599716477, 0.0 },
+  { 1.0075555551444719, 0.50000000000000000, 1.0471975511965976, 0.0 },
+  { 1.1631768599287302, 0.50000000000000000, 1.2217304763960306, 0.0 },
+  { 1.3160584048772548, 0.50000000000000000, 1.3962634015954636, 0.0 },
+  { 1.4674622093394272, 0.50000000000000000, 1.5707963267948966, 0.0 },
 };
+const double toler015 = 2.5000000000000020e-13;
 
-// Test function for k=0.60000000000000009.
-template <typename Tp>
-void test016()
+// Test data for k=0.60000000000000009.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.9101039108874066e-16
+// mean(f - f_Boost): 1.9428902930940238e-17
+// variance(f - f_Boost): 7.1986981476874020e-33
+// stddev(f - f_Boost): 8.4845142157270271e-17
+const testcase_ellint_2<double>
+data016[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data016)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data016[i].k), Tp(data016[i].phi));
-      const Tp f0 = data016[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for k=0.69999999999999996.
-testcase_ellint_2<double> data017[] = {
-  { -0.0000000000000000, 0.69999999999999996, 0.0000000000000000 },
-  { 0.17410041242702540, 0.69999999999999996, 0.17453292519943295 },
-  { 0.34564605085764760, 0.69999999999999996, 0.34906585039886590 },
-  { 0.51228495693314657, 0.69999999999999996, 0.52359877559829882 },
-  { 0.67207654098799530, 0.69999999999999996, 0.69813170079773179 },
-  { 0.82370932631556515, 0.69999999999999996, 0.87266462599716477 },
-  { 0.96672313309452795, 0.69999999999999996, 1.0471975511965976 },
-  { 1.1017090644949503, 0.69999999999999996, 1.2217304763960306 },
-  { 1.2304180097292916, 0.69999999999999996, 1.3962634015954636 },
-  { 1.3556611355719557, 0.69999999999999996, 1.5707963267948966 },
+  { 0.0000000000000000, 0.60000000000000009, 0.0000000000000000, 0.0 },
+  { 0.17421534919599127, 0.60000000000000009, 0.17453292519943295, 0.0 },
+  { 0.34655927787174096, 0.60000000000000009, 0.34906585039886590, 0.0 },
+  { 0.51533034538432143, 0.60000000000000009, 0.52359877559829882, 0.0 },
+  { 0.67916550597453018, 0.60000000000000009, 0.69813170079773179, 0.0 },
+  { 0.83720218180349881, 0.60000000000000009, 0.87266462599716477, 0.0 },
+  { 0.98922159354937755, 0.60000000000000009, 1.0471975511965976, 0.0 },
+  { 1.1357478470419360, 0.60000000000000009, 1.2217304763960306, 0.0 },
+  { 1.2780617372844061, 0.60000000000000009, 1.3962634015954636, 0.0 },
+  { 1.4180833944487241, 0.60000000000000009, 1.5707963267948966, 0.0 },
 };
-
-// Test function for k=0.69999999999999996.
-template <typename Tp>
-void test017()
+const double toler016 = 2.5000000000000020e-13;
+
+// Test data for k=0.70000000000000018.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.5937579711009016e-16
+// mean(f - f_Boost): 6.1062266354383615e-17
+// variance(f - f_Boost): 1.8112301165881739e-32
+// stddev(f - f_Boost): 1.3458194962877355e-16
+const testcase_ellint_2<double>
+data017[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data017)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data017[i].k), Tp(data017[i].phi));
-      const Tp f0 = data017[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for k=0.80000000000000004.
-testcase_ellint_2<double> data018[] = {
-  { -0.0000000000000000, 0.80000000000000004, 0.0000000000000000 },
-  { 0.17396762274534808, 0.80000000000000004, 0.17453292519943295 },
-  { 0.34458685226969316, 0.80000000000000004, 0.34906585039886590 },
-  { 0.50872923654502444, 0.80000000000000004, 0.52359877559829882 },
-  { 0.66372016539176237, 0.80000000000000004, 0.69813170079773179 },
-  { 0.80760344410167406, 0.80000000000000004, 0.87266462599716477 },
-  { 0.93945480372495072, 0.80000000000000004, 1.0471975511965976 },
-  { 1.0597473310395036, 0.80000000000000004, 1.2217304763960306 },
-  { 1.1706981862452361, 0.80000000000000004, 1.3962634015954636 },
-  { 1.2763499431699066, 0.80000000000000004, 1.5707963267948966 },
+  { 0.0000000000000000, 0.70000000000000018, 0.0000000000000000, 0.0 },
+  { 0.17410041242702540, 0.70000000000000018, 0.17453292519943295, 0.0 },
+  { 0.34564605085764760, 0.70000000000000018, 0.34906585039886590, 0.0 },
+  { 0.51228495693314657, 0.70000000000000018, 0.52359877559829882, 0.0 },
+  { 0.67207654098799519, 0.70000000000000018, 0.69813170079773179, 0.0 },
+  { 0.82370932631556493, 0.70000000000000018, 0.87266462599716477, 0.0 },
+  { 0.96672313309452806, 0.70000000000000018, 1.0471975511965976, 0.0 },
+  { 1.1017090644949501, 0.70000000000000018, 1.2217304763960306, 0.0 },
+  { 1.2304180097292916, 0.70000000000000018, 1.3962634015954636, 0.0 },
+  { 1.3556611355719552, 0.70000000000000018, 1.5707963267948966, 0.0 },
 };
+const double toler017 = 2.5000000000000020e-13;
 
-// Test function for k=0.80000000000000004.
-template <typename Tp>
-void test018()
+// Test data for k=0.80000000000000004.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.0438106231598255e-15
+// mean(f - f_Boost): 1.8318679906315082e-16
+// variance(f - f_Boost): 1.6301071049293564e-31
+// stddev(f - f_Boost): 4.0374584888632060e-16
+const testcase_ellint_2<double>
+data018[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data018)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data018[i].k), Tp(data018[i].phi));
-      const Tp f0 = data018[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
-
-// Test data for k=0.89999999999999991.
-testcase_ellint_2<double> data019[] = {
-  { -0.0000000000000000, 0.89999999999999991, 0.0000000000000000 },
-  { 0.17381690606167963, 0.89999999999999991, 0.17453292519943295 },
-  { 0.34337919186972055, 0.89999999999999991, 0.34906585039886590 },
-  { 0.50464268659856337, 0.89999999999999991, 0.52359877559829882 },
-  { 0.65400003842368581, 0.89999999999999991, 0.69813170079773179 },
-  { 0.78854928419904657, 0.89999999999999991, 0.87266462599716477 },
-  { 0.90645698626315385, 0.89999999999999991, 1.0471975511965976 },
-  { 1.0075154899135930, 0.89999999999999991, 1.2217304763960306 },
-  { 1.0940135583194071, 0.89999999999999991, 1.3962634015954636 },
-  { 1.1716970527816142, 0.89999999999999991, 1.5707963267948966 },
+  { 0.0000000000000000, 0.80000000000000004, 0.0000000000000000, 0.0 },
+  { 0.17396762274534805, 0.80000000000000004, 0.17453292519943295, 0.0 },
+  { 0.34458685226969321, 0.80000000000000004, 0.34906585039886590, 0.0 },
+  { 0.50872923654502433, 0.80000000000000004, 0.52359877559829882, 0.0 },
+  { 0.66372016539176226, 0.80000000000000004, 0.69813170079773179, 0.0 },
+  { 0.80760344410167406, 0.80000000000000004, 0.87266462599716477, 0.0 },
+  { 0.93945480372495072, 0.80000000000000004, 1.0471975511965976, 0.0 },
+  { 1.0597473310395040, 0.80000000000000004, 1.2217304763960306, 0.0 },
+  { 1.1706981862452359, 0.80000000000000004, 1.3962634015954636, 0.0 },
+  { 1.2763499431699064, 0.80000000000000004, 1.5707963267948966, 0.0 },
 };
-
-// Test function for k=0.89999999999999991.
-template <typename Tp>
-void test019()
+const double toler018 = 2.5000000000000020e-13;
+
+// Test data for k=0.90000000000000013.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 6.6116483711056727e-16
+// mean(f - f_Boost): 1.3877787807814457e-17
+// variance(f - f_Boost): 2.3776912893669577e-35
+// stddev(f - f_Boost): 4.8761575952454181e-18
+const testcase_ellint_2<double>
+data019[10] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data019)
-                         / sizeof(testcase_ellint_2<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_2(Tp(data019[i].k), Tp(data019[i].phi));
-      const Tp f0 = data019[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
-}
+  { 0.0000000000000000, 0.90000000000000013, 0.0000000000000000, 0.0 },
+  { 0.17381690606167963, 0.90000000000000013, 0.17453292519943295, 0.0 },
+  { 0.34337919186972055, 0.90000000000000013, 0.34906585039886590, 0.0 },
+  { 0.50464268659856337, 0.90000000000000013, 0.52359877559829882, 0.0 },
+  { 0.65400003842368593, 0.90000000000000013, 0.69813170079773179, 0.0 },
+  { 0.78854928419904635, 0.90000000000000013, 0.87266462599716477, 0.0 },
+  { 0.90645698626315385, 0.90000000000000013, 1.0471975511965976, 0.0 },
+  { 1.0075154899135927, 0.90000000000000013, 1.2217304763960306, 0.0 },
+  { 1.0940135583194068, 0.90000000000000013, 1.3962634015954636, 0.0 },
+  { 1.1716970527816140, 0.90000000000000013, 1.5707963267948966, 0.0 },
+};
+const double toler019 = 2.5000000000000020e-13;
+
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_ellint_2<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+      {
+       const Ret f = std::tr1::ellint_2(data[i].k, data[i].phi);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
+int
+main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
-  test015<double>();
-  test016<double>();
-  test017<double>();
-  test018<double>();
-  test019<double>();
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
+  test(data016, toler016);
+  test(data017, toler017);
+  test(data018, toler018);
+  test(data019, toler019);
   return 0;
 }
index 2e402c6..5c31244 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  ellint_3
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for k=-0.90000000000000002, nu=0.0000000000000000.
-testcase_ellint_3<double> data001[] = {
-  { -0.0000000000000000, -0.90000000000000002, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17525427376115027, -0.90000000000000002, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.35492464591297446, -0.90000000000000002, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.54388221416157134, -0.90000000000000002, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.74797400423532523, -0.90000000000000002, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.97463898451966458, -0.90000000000000002, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.2334463254523440, -0.90000000000000002, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.5355247765594910, -0.90000000000000002, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.8882928567775124, -0.90000000000000002, 0.0000000000000000,
-          1.3962634015954636 },
-  { 2.2805491384227703, -0.90000000000000002, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.90000000000000002, nu=0.0000000000000000.
-template <typename Tp>
-void test001()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data001[i].k), Tp(data001[i].nu),
-                   Tp(data001[i].phi));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 5.7842011620951154e-16
+// mean(f - f_Boost): 5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
+const testcase_ellint_3<double>
+data001[10] =
+{
+  { 0.0000000000000000, -0.90000000000000002, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17525427376115027, -0.90000000000000002, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35492464591297446, -0.90000000000000002, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.54388221416157123, -0.90000000000000002, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.74797400423532512, -0.90000000000000002, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.97463898451966446, -0.90000000000000002, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2334463254523438, -0.90000000000000002, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5355247765594913, -0.90000000000000002, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.8882928567775126, -0.90000000000000002, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2805491384227703, -0.90000000000000002, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler001 = 2.5000000000000020e-13;
 
 // Test data for k=-0.90000000000000002, nu=0.10000000000000001.
-testcase_ellint_3<double> data002[] = {
-  { -0.0000000000000000, -0.90000000000000002, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17507714233254659, -0.90000000000000002, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.35350932904326521, -0.90000000000000002, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.53911129989870998, -0.90000000000000002, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.73666644254508429, -0.90000000000000002, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.95250736612100184, -0.90000000000000002, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.1950199550905594, -0.90000000000000002, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.4741687286340848, -0.90000000000000002, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.7968678183506059, -0.90000000000000002, 0.10000000000000001,
-          1.3962634015954636 },
-  { 2.1537868513875287, -0.90000000000000002, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.90000000000000002, nu=0.10000000000000001.
-template <typename Tp>
-void test002()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data002)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data002[i].k), Tp(data002[i].nu),
-                   Tp(data002[i].phi));
-      const Tp f0 = data002[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.1500594295134815e-16
+// mean(f - f_Boost): 1.0269562977782698e-16
+// variance(f - f_Boost): 1.4388836606733082e-32
+// stddev(f - f_Boost): 1.1995347684303728e-16
+const testcase_ellint_3<double>
+data002[10] =
+{
+  { 0.0000000000000000, -0.90000000000000002, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17543204932716244, -0.90000000000000002, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35636022898551184, -0.90000000000000002, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54880278898382584, -0.90000000000000002, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.75988834774529268, -0.90000000000000002, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.99853303003568117, -0.90000000000000002, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2759958823999022, -0.90000000000000002, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.6051187364639401, -0.90000000000000002, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.9941406879519472, -0.90000000000000002, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.4295011187834881, -0.90000000000000002, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler002 = 2.5000000000000020e-13;
 
 // Test data for k=-0.90000000000000002, nu=0.20000000000000001.
-testcase_ellint_3<double> data003[] = {
-  { -0.0000000000000000, -0.90000000000000002, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17490065089140930, -0.90000000000000002, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.35211377590661436, -0.90000000000000002, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.53448220334204122, -0.90000000000000002, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.72591368943179613, -0.90000000000000002, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.93192539780038763, -0.90000000000000002, 0.20000000000000001,
-          0.87266462599716477 },
-  { 1.1600809679692683, -0.90000000000000002, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.4195407225882508, -0.90000000000000002, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.7168966476424528, -0.90000000000000002, 0.20000000000000001,
-          1.3962634015954636 },
-  { 2.0443194576468890, -0.90000000000000002, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.90000000000000002, nu=0.20000000000000001.
-template <typename Tp>
-void test003()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data003)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data003[i].k), Tp(data003[i].nu),
-                   Tp(data003[i].phi));
-      const Tp f0 = data003[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.90000000000000002, nu=0.29999999999999999.
-testcase_ellint_3<double> data004[] = {
-  { -0.0000000000000000, -0.90000000000000002, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17472479532647534, -0.90000000000000002, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.35073750187374114, -0.90000000000000002, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.52998766129466979, -0.90000000000000002, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.71566993548699587, -0.90000000000000002, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.91271517762560195, -0.90000000000000002, 0.29999999999999999,
-          0.87266462599716477 },
-  { 1.1281241199843370, -0.90000000000000002, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.3704929576917448, -0.90000000000000002, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.6461981511487715, -0.90000000000000002, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.9486280260314426, -0.90000000000000002, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.90000000000000002, nu=0.29999999999999999.
-template <typename Tp>
-void test004()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data004)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data004[i].k), Tp(data004[i].nu),
-                   Tp(data004[i].phi));
-      const Tp f0 = data004[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 5.2711357908578066e-16
+// mean(f - f_Boost): 8.0491169285323847e-17
+// variance(f - f_Boost): 7.9985534974304465e-34
+// stddev(f - f_Boost): 2.8281714052423424e-17
+const testcase_ellint_3<double>
+data003[10] =
+{
+  { 0.0000000000000000, -0.90000000000000002, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17561047321968409, -0.90000000000000002, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35781659944356109, -0.90000000000000002, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.55388150905215283, -0.90000000000000002, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.77246874123251441, -0.90000000000000002, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 1.0244466254771925, -0.90000000000000002, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.3234824077640801, -0.90000000000000002, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.6849848968804237, -0.90000000000000002, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 2.1185749045502273, -0.90000000000000002, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.6076835743348412, -0.90000000000000002, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler003 = 2.5000000000000020e-13;
+
+// Test data for k=-0.90000000000000002, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.9955372494296814e-16
+// mean(f - f_Boost): 5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
+const testcase_ellint_3<double>
+data004[10] =
+{
+  { 0.0000000000000000, -0.90000000000000002, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17578954966746221, -0.90000000000000002, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35929429810867447, -0.90000000000000002, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.55912757154240811, -0.90000000000000002, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.78578314722025389, -0.90000000000000002, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.0526941001131365, -0.90000000000000002, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.3769682234538601, -0.90000000000000002, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.7779437432911238, -0.90000000000000002, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.2676509341813631, -0.90000000000000002, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 2.8256506968858512, -0.90000000000000002, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler004 = 2.5000000000000020e-13;
 
 // Test data for k=-0.90000000000000002, nu=0.40000000000000002.
-testcase_ellint_3<double> data005[] = {
-  { -0.0000000000000000, -0.90000000000000002, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17454957156468839, -0.90000000000000002, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34938003933330430, -0.90000000000000002, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.52562093533067455, -0.90000000000000002, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.70589461324915703, -0.90000000000000002, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.89472658511942849, -0.90000000000000002, 0.40000000000000002,
-          0.87266462599716477 },
-  { 1.0987419542323440, -0.90000000000000002, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.3261349565496301, -0.90000000000000002, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.5831293909853767, -0.90000000000000002, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.8641114227238349, -0.90000000000000002, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.90000000000000002, nu=0.40000000000000002.
-template <typename Tp>
-void test005()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data005)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data005[i].k), Tp(data005[i].nu),
-                   Tp(data005[i].phi));
-      const Tp f0 = data005[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.7042235432234642e-16
+// mean(f - f_Boost): 2.0261570199409106e-16
+// variance(f - f_Boost): 5.8024227149195491e-32
+// stddev(f - f_Boost): 2.4088218520512364e-16
+const testcase_ellint_3<double>
+data005[10] =
+{
+  { 0.0000000000000000, -0.90000000000000002, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17596928293938452, -0.90000000000000002, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36079388642472821, -0.90000000000000002, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.56455096667115612, -0.90000000000000002, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.79990996997869435, -0.90000000000000002, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0836647913872215, -0.90000000000000002, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.4378726836091849, -0.90000000000000002, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.8880446720682853, -0.90000000000000002, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 2.4505848932025227, -0.90000000000000002, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 3.1000689868578615, -0.90000000000000002, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler005 = 2.5000000000000020e-13;
 
 // Test data for k=-0.90000000000000002, nu=0.50000000000000000.
-testcase_ellint_3<double> data006[] = {
-  { -0.0000000000000000, -0.90000000000000002, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17437497557073336, -0.90000000000000002, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34804093691586013, -0.90000000000000002, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.52137576320372914, -0.90000000000000002, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.69655163996912284, -0.90000000000000002, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.87783188683054236, -0.90000000000000002, 0.50000000000000000,
-          0.87266462599716477 },
-  { 1.0716015959755185, -0.90000000000000002, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.2857636916026747, -0.90000000000000002, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.5264263913252365, -0.90000000000000002, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.7888013241937861, -0.90000000000000002, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.90000000000000002, nu=0.50000000000000000.
-template <typename Tp>
-void test006()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data006)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data006[i].k), Tp(data006[i].nu),
-                   Tp(data006[i].phi));
-      const Tp f0 = data006[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.90000000000000002, nu=0.59999999999999998.
-testcase_ellint_3<double> data007[] = {
-  { -0.0000000000000000, -0.90000000000000002, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17420100334657815, -0.90000000000000002, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34671975876122157, -0.90000000000000002, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.51724631570707968, -0.90000000000000002, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.68760879113743056, -0.90000000000000002, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.86192157779698364, -0.90000000000000002, 0.59999999999999998,
-          0.87266462599716477 },
-  { 1.0464279696166354, -0.90000000000000002, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.2488156247094004, -0.90000000000000002, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.4750988777188474, -0.90000000000000002, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.7211781128919523, -0.90000000000000002, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.90000000000000002, nu=0.59999999999999998.
-template <typename Tp>
-void test007()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data007)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data007[i].k), Tp(data007[i].nu),
-                   Tp(data007[i].phi));
-      const Tp f0 = data007[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.90000000000000002, nu=0.69999999999999996.
-testcase_ellint_3<double> data008[] = {
-  { -0.0000000000000000, -0.90000000000000002, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17402765093102210, -0.90000000000000002, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34541608382635131, -0.90000000000000002, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.51322715827061705, -0.90000000000000002, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.67903717872440306, -0.90000000000000002, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.84690113601682671, -0.90000000000000002, 0.69999999999999996,
-          0.87266462599716477 },
-  { 1.0229914311548418, -0.90000000000000002, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.2148329639709381, -0.90000000000000002, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.4283586501307806, -0.90000000000000002, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.6600480747670938, -0.90000000000000002, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.90000000000000002, nu=0.69999999999999996.
-template <typename Tp>
-void test008()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data008)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data008[i].k), Tp(data008[i].nu),
-                   Tp(data008[i].phi));
-      const Tp f0 = data008[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 3.8944086593755267e-16
+// mean(f - f_Boost): 6.9388939039072284e-17
+// variance(f - f_Boost): 1.7333369499485123e-32
+// stddev(f - f_Boost): 1.3165625507162629e-16
+const testcase_ellint_3<double>
+data006[10] =
+{
+  { 0.0000000000000000, -0.90000000000000002, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17614967734498183, -0.90000000000000002, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.36231594750319435, -0.90000000000000002, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.57016256984349567, -0.90000000000000002, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.81494025918293422, -0.90000000000000002, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.1178482279283477, -0.90000000000000002, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.5081455873012106, -0.90000000000000002, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 2.0213599730863998, -0.90000000000000002, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.6822467012926827, -0.90000000000000002, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 3.4591069002104677, -0.90000000000000002, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler006 = 2.5000000000000020e-13;
+
+// Test data for k=-0.90000000000000002, nu=0.60000000000000009.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.0602096790645418e-16
+// mean(f - f_Boost): 1.0269562977782698e-16
+// variance(f - f_Boost): 1.4388836606733082e-32
+// stddev(f - f_Boost): 1.1995347684303728e-16
+const testcase_ellint_3<double>
+data007[10] =
+{
+  { 0.0000000000000000, -0.90000000000000002, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17633073723493825, -0.90000000000000002, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.36386108723492810, -0.90000000000000002, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.57597424744716241, -0.90000000000000002, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.83098051948501150, -0.90000000000000002, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.1558706545698916, -0.90000000000000002, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.5905576379415669, -0.90000000000000002, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 2.1875186010215080, -0.90000000000000002, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.9885767771316849, -0.90000000000000002, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 3.9549939883570224, -0.90000000000000002, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler007 = 2.5000000000000020e-13;
+
+// Test data for k=-0.90000000000000002, nu=0.70000000000000007.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.1938610791060186e-16
+// mean(f - f_Boost): 3.0253577421035517e-16
+// variance(f - f_Boost): 4.2342877557562532e-32
+// stddev(f - f_Boost): 2.0577385051935665e-16
+const testcase_ellint_3<double>
+data008[10] =
+{
+  { 0.0000000000000000, -0.90000000000000002, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17651246700160939, -0.90000000000000002, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.36542993547358982, -0.90000000000000002, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.58199897877674867, -0.90000000000000002, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.84815633587352857, -0.90000000000000002, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.1985495623872375, -0.90000000000000002, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.6892158134027688, -0.90000000000000002, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 2.4029722191094236, -0.90000000000000002, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 3.4201084941340052, -0.90000000000000002, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 4.6985482312992435, -0.90000000000000002, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler008 = 2.5000000000000020e-13;
 
 // Test data for k=-0.90000000000000002, nu=0.80000000000000004.
-testcase_ellint_3<double> data009[] = {
-  { -0.0000000000000000, -0.90000000000000002, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17385491439925149, -0.90000000000000002, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.34412950523113928, -0.90000000000000002, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.50931321668729612, -0.90000000000000002, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.67081081392296349, -0.90000000000000002, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.83268846097293259, -0.90000000000000002, 0.80000000000000004,
-          0.87266462599716477 },
-  { 1.0010985015814027, -0.90000000000000002, 0.80000000000000004,
-          1.0471975511965976 },
-  { 1.1834394045489678, -0.90000000000000002, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.3855695891683188, -0.90000000000000002, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.6044591960982204, -0.90000000000000002, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.90000000000000002, nu=0.80000000000000004.
-template <typename Tp>
-void test009()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data009)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data009[i].k), Tp(data009[i].nu),
-                   Tp(data009[i].phi));
-      const Tp f0 = data009[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.6645352591003757e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 6.5091520146032660e-16
+// mean(f - f_Boost): 2.8310687127941490e-16
+// variance(f - f_Boost): 9.8950000698295322e-33
+// stddev(f - f_Boost): 9.9473614943006532e-17
+const testcase_ellint_3<double>
+data009[10] =
+{
+  { 0.0000000000000000, -0.90000000000000002, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17669487107954862, -0.90000000000000002, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36702314729628421, -0.90000000000000002, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.58825099711365492, -0.90000000000000002, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.86661711422209031, -0.90000000000000002, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.2469779109884802, -0.90000000000000002, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.8105469760531578, -0.90000000000000002, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.6989505165893752, -0.90000000000000002, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 4.0935213267757424, -0.90000000000000002, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 5.9820740813645710, -0.90000000000000002, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler009 = 2.5000000000000020e-13;
 
 // Test data for k=-0.90000000000000002, nu=0.90000000000000002.
-testcase_ellint_3<double> data010[] = {
-  { -0.0000000000000000, -0.90000000000000002, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17368278986240138, -0.90000000000000002, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.34285962963961397, -0.90000000000000002, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.50549974644993323, -0.90000000000000002, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.66290623857720898, -0.90000000000000002, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.81921183128847164, -0.90000000000000002, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.98058481956066390, -0.90000000000000002, 0.90000000000000002,
-          1.0471975511965976 },
-  { 1.1543223520473567, -0.90000000000000002, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.3462119782292938, -0.90000000000000002, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.5536420236310946, -0.90000000000000002, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.90000000000000002, nu=0.90000000000000002.
-template <typename Tp>
-void test010()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data010)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data010[i].k), Tp(data010[i].nu),
-                   Tp(data010[i].phi));
-      const Tp f0 = data010[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 8.2628580104449673e-16
+// mean(f - f_Boost): 8.5764728652293339e-16
+// variance(f - f_Boost): 8.9671393318321280e-31
+// stddev(f - f_Boost): 9.4694980499666013e-16
+const testcase_ellint_3<double>
+data010[10] =
+{
+  { 0.0000000000000000, -0.90000000000000002, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17687795394604169, -0.90000000000000002, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36864140434751286, -0.90000000000000002, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.59474595366817051, -0.90000000000000002, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.88654237226056665, -0.90000000000000002, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.3026595810616726, -0.90000000000000002, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.9653635459278078, -0.90000000000000002, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 3.1451407527189463, -0.90000000000000002, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 5.3745230680316114, -0.90000000000000002, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 8.9942562031858682, -0.90000000000000002, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler010 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004, nu=0.0000000000000000.
-testcase_ellint_3<double> data011[] = {
-  { -0.0000000000000000, -0.80000000000000004, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17510154241338902, -0.80000000000000004, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.35365068839779390, -0.80000000000000004, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.53926804409084561, -0.80000000000000004, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.73587926028070383, -0.80000000000000004, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.94770942970071170, -0.80000000000000004, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.1789022995388239, -0.80000000000000004, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.4323027881876009, -0.80000000000000004, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.7069629739121674, -0.80000000000000004, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.9953027776647296, -0.80000000000000004, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.80000000000000004, nu=0.0000000000000000.
-template <typename Tp>
-void test011()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data011)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data011[i].k), Tp(data011[i].nu),
-                   Tp(data011[i].phi));
-      const Tp f0 = data011[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.5543122344752192e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.7898565163847540e-16
+// mean(f - f_Boost): 2.3869795029440865e-16
+// variance(f - f_Boost): 2.1368406725192426e-31
+// stddev(f - f_Boost): 4.6225974002926564e-16
+const testcase_ellint_3<double>
+data011[10] =
+{
+  { 0.0000000000000000, -0.80000000000000004, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17510154241338899, -0.80000000000000004, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35365068839779396, -0.80000000000000004, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.53926804409084550, -0.80000000000000004, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.73587926028070372, -0.80000000000000004, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.94770942970071170, -0.80000000000000004, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.1789022995388236, -0.80000000000000004, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.4323027881876012, -0.80000000000000004, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.7069629739121677, -0.80000000000000004, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.9953027776647294, -0.80000000000000004, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler011 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004, nu=0.10000000000000001.
-testcase_ellint_3<double> data012[] = {
-  { -0.0000000000000000, -0.80000000000000004, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17492468824017166, -0.80000000000000004, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.35224443521476911, -0.80000000000000004, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.53456851853226961, -0.80000000000000004, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.72488875602364944, -0.80000000000000004, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.92661354274638952, -0.80000000000000004, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.1432651144499077, -0.80000000000000004, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.3774479927211429, -0.80000000000000004, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.6287092337196041, -0.80000000000000004, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.8910755418379521, -0.80000000000000004, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.80000000000000004, nu=0.10000000000000001.
-template <typename Tp>
-void test012()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data012)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data012[i].k), Tp(data012[i].nu),
-                   Tp(data012[i].phi));
-      const Tp f0 = data012[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 8.3898786942190374e-16
+// mean(f - f_Boost): 2.3869795029440865e-16
+// variance(f - f_Boost): 2.9190059990693968e-31
+// stddev(f - f_Boost): 5.4027826155319237e-16
+const testcase_ellint_3<double>
+data012[10] =
+{
+  { 0.0000000000000000, -0.80000000000000004, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17527903952342144, -0.80000000000000004, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35507705313548549, -0.80000000000000004, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54411455987643553, -0.80000000000000004, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.74745625666804383, -0.80000000000000004, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.97046953684238557, -0.80000000000000004, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2183080025184605, -0.80000000000000004, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4943711151994405, -0.80000000000000004, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.7972401309544201, -0.80000000000000004, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.1172616484005085, -0.80000000000000004, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler012 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004, nu=0.20000000000000001.
-testcase_ellint_3<double> data013[] = {
-  { -0.0000000000000000, -0.80000000000000004, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17474847286224943, -0.80000000000000004, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.35085779529084682, -0.80000000000000004, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.53000829263059157, -0.80000000000000004, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.71443466027453406, -0.80000000000000004, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.90698196872715420, -0.80000000000000004, 0.20000000000000001,
-          0.87266462599716477 },
-  { 1.1108198200558581, -0.80000000000000004, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.3284988909963957, -0.80000000000000004, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.5600369318140328, -0.80000000000000004, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.8007226661734588, -0.80000000000000004, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.80000000000000004, nu=0.20000000000000001.
-template <typename Tp>
-void test013()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data013)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data013[i].k), Tp(data013[i].nu),
-                   Tp(data013[i].phi));
-      const Tp f0 = data013[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.80000000000000004, nu=0.29999999999999999.
-testcase_ellint_3<double> data014[] = {
-  { -0.0000000000000000, -0.80000000000000004, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17457289217669891, -0.80000000000000004, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34949028801501258, -0.80000000000000004, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.52558024362769318, -0.80000000000000004, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.70447281740094914, -0.80000000000000004, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.88864745641528986, -0.80000000000000004, 0.29999999999999999,
-          0.87266462599716477 },
-  { 1.0811075819341465, -0.80000000000000004, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.2844589654082377, -0.80000000000000004, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.4991461361277849, -0.80000000000000004, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.7214611048717301, -0.80000000000000004, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.80000000000000004, nu=0.29999999999999999.
-template <typename Tp>
-void test014()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data014)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data014[i].k), Tp(data014[i].nu),
-                   Tp(data014[i].phi));
-      const Tp f0 = data014[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.8513740186068518e-16
+// mean(f - f_Boost): 2.8310687127941490e-16
+// variance(f - f_Boost): 2.7528339102381189e-31
+// stddev(f - f_Boost): 5.2467455724840699e-16
+const testcase_ellint_3<double>
+data013[10] =
+{
+  { 0.0000000000000000, -0.80000000000000004, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17545718375086419, -0.80000000000000004, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35652404627248163, -0.80000000000000004, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54911638512920913, -0.80000000000000004, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.75967684282131176, -0.80000000000000004, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.99513526893543769, -0.80000000000000004, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2622192109995993, -0.80000000000000004, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.5654106676347741, -0.80000000000000004, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.9029531718534984, -0.80000000000000004, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.2624789434186798, -0.80000000000000004, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler013 = 2.5000000000000020e-13;
+
+// Test data for k=-0.80000000000000004, nu=0.30000000000000004.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.2825261583337354e-16
+// mean(f - f_Boost): 2.6367796834847468e-16
+// variance(f - f_Boost): 2.8249350208968825e-31
+// stddev(f - f_Boost): 5.3150117788175054e-16
+const testcase_ellint_3<double>
+data014[10] =
+{
+  { 0.0000000000000000, -0.80000000000000004, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17563597931587369, -0.80000000000000004, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35799220412005128, -0.80000000000000004, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.55428253691111318, -0.80000000000000004, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.77260647376977365, -0.80000000000000004, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.0220015271210958, -0.80000000000000004, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.3115965312302671, -0.80000000000000004, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.6478518468813512, -0.80000000000000004, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.0290458414203481, -0.80000000000000004, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 2.4392042002725693, -0.80000000000000004, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler014 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004, nu=0.40000000000000002.
-testcase_ellint_3<double> data015[] = {
-  { -0.0000000000000000, -0.80000000000000004, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17439794211872178, -0.80000000000000004, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34814144964568972, -0.80000000000000004, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.52127776285273075, -0.80000000000000004, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.69496411438966599, -0.80000000000000004, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.87146878427509589, -0.80000000000000004, 0.40000000000000002,
-          0.87266462599716477 },
-  { 1.0537579024937762, -0.80000000000000004, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.2445534387922637, -0.80000000000000004, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.4446769766361993, -0.80000000000000004, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.6512267838651289, -0.80000000000000004, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.80000000000000004, nu=0.40000000000000002.
-template <typename Tp>
-void test015()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data015)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data015[i].k), Tp(data015[i].nu),
-                   Tp(data015[i].phi));
-      const Tp f0 = data015[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 8.3462748389836647e-16
+// mean(f - f_Boost): 3.3861802251067273e-16
+// variance(f - f_Boost): 4.3719465706454422e-31
+// stddev(f - f_Boost): 6.6120696991527871e-16
+const testcase_ellint_3<double>
+data015[10] =
+{
+  { 0.0000000000000000, -0.80000000000000004, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17581543047866136, -0.80000000000000004, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35948208343061633, -0.80000000000000004, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.55962280893702021, -0.80000000000000004, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.78632063889234116, -0.80000000000000004, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0514333069550323, -0.80000000000000004, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.3677213138838757, -0.80000000000000004, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.7451736773665165, -0.80000000000000004, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 2.1830100424586831, -0.80000000000000004, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.6604037035529724, -0.80000000000000004, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler015 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004, nu=0.50000000000000000.
-testcase_ellint_3<double> data016[] = {
-  { -0.0000000000000000, -0.80000000000000004, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17422361866118047, -0.80000000000000004, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34681083254170475, -0.80000000000000004, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.51709470815494440, -0.80000000000000004, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.68587375344080259, -0.80000000000000004, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.85532571852810624, -0.80000000000000004, 0.50000000000000000,
-          0.87266462599716477 },
-  { 1.0284677391874906, -0.80000000000000004, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.2081693942686225, -0.80000000000000004, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.3955803006426311, -0.80000000000000004, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.5884528947755532, -0.80000000000000004, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.80000000000000004, nu=0.50000000000000000.
-template <typename Tp>
-void test016()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data016)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data016[i].k), Tp(data016[i].nu),
-                   Tp(data016[i].phi));
-      const Tp f0 = data016[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.80000000000000004, nu=0.59999999999999998.
-testcase_ellint_3<double> data017[] = {
-  { -0.0000000000000000, -0.80000000000000004, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17404991781414092, -0.80000000000000004, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34549800443625167, -0.80000000000000004, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.51302536167001556, -0.80000000000000004, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.67717065003912258, -0.80000000000000004, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.84011512421134416, -0.80000000000000004, 0.59999999999999998,
-          0.87266462599716477 },
-  { 1.0049863847088742, -0.80000000000000004, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.1748145941898918, -0.80000000000000004, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.3510319699755071, -0.80000000000000004, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.5319262547427865, -0.80000000000000004, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.80000000000000004, nu=0.59999999999999998.
-template <typename Tp>
-void test017()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data017)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data017[i].k), Tp(data017[i].nu),
-                   Tp(data017[i].phi));
-      const Tp f0 = data017[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.80000000000000004, nu=0.69999999999999996.
-testcase_ellint_3<double> data018[] = {
-  { -0.0000000000000000, -0.80000000000000004, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17387683562442202, -0.80000000000000004, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34420254775101611, -0.80000000000000004, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.50906439222143685, -0.80000000000000004, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.66882693152688433, -0.80000000000000004, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.82574792844091316, -0.80000000000000004, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.98310431309490953, -0.80000000000000004, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.1440884535113258, -0.80000000000000004, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.3103743938952537, -0.80000000000000004, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.4806912324625332, -0.80000000000000004, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.80000000000000004, nu=0.69999999999999996.
-template <typename Tp>
-void test018()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data018)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data018[i].k), Tp(data018[i].nu),
-                   Tp(data018[i].phi));
-      const Tp f0 = data018[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.6645352591003757e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 9.0388243828581744e-16
+// mean(f - f_Boost): 3.8580250105724191e-16
+// variance(f - f_Boost): 6.4106456575047741e-31
+// stddev(f - f_Boost): 8.0066507713929764e-16
+const testcase_ellint_3<double>
+data016[10] =
+{
+  { 0.0000000000000000, -0.80000000000000004, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17599554153999472, -0.80000000000000004, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.36099426243351540, -0.80000000000000004, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.56514786174780673, -0.80000000000000004, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.80090697622371010, -0.80000000000000004, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0838891627679339, -0.80000000000000004, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.4323506654466280, -0.80000000000000004, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.8625761085390575, -0.80000000000000004, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.3768757305654766, -0.80000000000000004, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.9478781158239746, -0.80000000000000004, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler016 = 2.5000000000000020e-13;
+
+// Test data for k=-0.80000000000000004, nu=0.60000000000000009.
+// max(|f - f_Boost|): 3.5527136788005009e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.0631099169042069e-15
+// mean(f - f_Boost): 4.8294701571194306e-16
+// variance(f - f_Boost): 1.1633910328160319e-30
+// stddev(f - f_Boost): 1.0786060600682865e-15
+const testcase_ellint_3<double>
+data017[10] =
+{
+  { 0.0000000000000000, -0.80000000000000004, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17617631684170665, -0.80000000000000004, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.36252934193666231, -0.80000000000000004, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.57086932622945163, -0.80000000000000004, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.81646796740150973, -0.80000000000000004, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.1199552158519064, -0.80000000000000004, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.5079766673336394, -0.80000000000000004, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 2.0082747447038165, -0.80000000000000004, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.6315146066775523, -0.80000000000000004, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 3.3418121892288051, -0.80000000000000004, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler017 = 2.5000000000000020e-13;
+
+// Test data for k=-0.80000000000000004, nu=0.70000000000000007.
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.6544679145741375e-16
+// mean(f - f_Boost): 3.2751579226442120e-16
+// variance(f - f_Boost): 4.4236851331020672e-31
+// stddev(f - f_Boost): 6.6510789599147505e-16
+const testcase_ellint_3<double>
+data018[10] =
+{
+  { 0.0000000000000000, -0.80000000000000004, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17635776076721221, -0.80000000000000004, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.36408794649916976, -0.80000000000000004, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.57679992290624138, -0.80000000000000004, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.83312441418142813, -0.80000000000000004, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.1603958891464856, -0.80000000000000004, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.5982855143796213, -0.80000000000000004, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 2.1962484408371821, -0.80000000000000004, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.9873281786111869, -0.80000000000000004, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 3.9268876980046397, -0.80000000000000004, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler018 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004, nu=0.80000000000000004.
-testcase_ellint_3<double> data019[] = {
-  { -0.0000000000000000, -0.80000000000000004, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17370436817515206, -0.80000000000000004, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.34292405894783395, -0.80000000000000004, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.50520682176250087, -0.80000000000000004, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.66081751679736189, -0.80000000000000004, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.81214672249355102, -0.80000000000000004, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.96264481387685574, -0.80000000000000004, 0.80000000000000004,
-          1.0471975511965976 },
-  { 1.1156611352656258, -0.80000000000000004, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.2730756225143889, -0.80000000000000004, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.4339837018309474, -0.80000000000000004, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.80000000000000004, nu=0.80000000000000004.
-template <typename Tp>
-void test019()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data019)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data019[i].k), Tp(data019[i].nu),
-                   Tp(data019[i].phi));
-      const Tp f0 = data019[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 9.0176949165011079e-16
+// mean(f - f_Boost): 7.0499162063697436e-16
+// variance(f - f_Boost): 1.7230805408026989e-30
+// stddev(f - f_Boost): 1.3126616246400665e-15
+const testcase_ellint_3<double>
+data019[10] =
+{
+  { 0.0000000000000000, -0.80000000000000004, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17653987774203392, -0.80000000000000004, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36567072568046877, -0.80000000000000004, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.58295359996558616, -0.80000000000000004, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.85101998309176108, -0.80000000000000004, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.2062322059736537, -0.80000000000000004, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.7090321420917429, -0.80000000000000004, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.4529058049405066, -0.80000000000000004, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 3.5368893360106948, -0.80000000000000004, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 4.9246422058196062, -0.80000000000000004, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler019 = 2.5000000000000020e-13;
 
 // Test data for k=-0.80000000000000004, nu=0.90000000000000002.
-testcase_ellint_3<double> data020[] = {
-  { -0.0000000000000000, -0.80000000000000004, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17353251158533153, -0.80000000000000004, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.34166214791545768, -0.80000000000000004, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.50144799535130580, -0.80000000000000004, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.65311976193814447, -0.80000000000000004, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.79924384892320866, -0.80000000000000004, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.94345762353365625, -0.80000000000000004, 0.90000000000000002,
-          1.0471975511965976 },
-  { 1.0892582069219159, -0.80000000000000004, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.2387000876610268, -0.80000000000000004, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.3911845406776222, -0.80000000000000004, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.80000000000000004, nu=0.90000000000000002.
-template <typename Tp>
-void test020()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data020)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data020[i].k), Tp(data020[i].nu),
-                   Tp(data020[i].phi));
-      const Tp f0 = data020[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.7782721357365268e-16
+// mean(f - f_Boost): 8.9928064994637676e-16
+// variance(f - f_Boost): 1.5485199571025344e-30
+// stddev(f - f_Boost): 1.2443954183066307e-15
+const testcase_ellint_3<double>
+data020[10] =
+{
+  { 0.0000000000000000, -0.80000000000000004, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17672267223433513, -0.80000000000000004, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36727835537196063, -0.80000000000000004, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.58934569363716649, -0.80000000000000004, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.87032723471138851, -0.80000000000000004, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.2588676111323349, -0.80000000000000004, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.8498731900660019, -0.80000000000000004, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.8368381299300420, -0.80000000000000004, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 4.5674844191654058, -0.80000000000000004, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 7.2263259298637115, -0.80000000000000004, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler020 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996, nu=0.0000000000000000.
-testcase_ellint_3<double> data021[] = {
-  { -0.0000000000000000, -0.69999999999999996, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17496737466916720, -0.69999999999999996, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.35254687535677925, -0.69999999999999996, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.53536740275997130, -0.69999999999999996, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.72603797651684465, -0.69999999999999996, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.92698296348313458, -0.69999999999999996, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.1400447527693316, -0.69999999999999996, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.3657668117194071, -0.69999999999999996, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.6024686895959159, -0.69999999999999996, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.8456939983747236, -0.69999999999999996, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.69999999999999996, nu=0.0000000000000000.
-template <typename Tp>
-void test021()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data021)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data021[i].k), Tp(data021[i].nu),
-                   Tp(data021[i].phi));
-      const Tp f0 = data021[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.5425633303580569e-16
+// mean(f - f_Boost): 7.7715611723760953e-17
+// variance(f - f_Boost): 7.4564398834547797e-34
+// stddev(f - f_Boost): 2.7306482533374340e-17
+const testcase_ellint_3<double>
+data021[10] =
+{
+  { 0.0000000000000000, -0.69999999999999996, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17496737466916723, -0.69999999999999996, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35254687535677931, -0.69999999999999996, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.53536740275997130, -0.69999999999999996, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.72603797651684454, -0.69999999999999996, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.92698296348313447, -0.69999999999999996, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.1400447527693316, -0.69999999999999996, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.3657668117194071, -0.69999999999999996, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.6024686895959162, -0.69999999999999996, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.8456939983747234, -0.69999999999999996, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler021 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996, nu=0.10000000000000001.
-testcase_ellint_3<double> data022[] = {
-  { -0.0000000000000000, -0.69999999999999996, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17479076384884681, -0.69999999999999996, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.35114844900396364, -0.69999999999999996, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.53072776947527012, -0.69999999999999996, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.71530198262386246, -0.69999999999999996, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.90666760677828306, -0.69999999999999996, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.1063366517438080, -0.69999999999999996, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.3149477243092147, -0.69999999999999996, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.5314886725038925, -0.69999999999999996, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.7528050171757608, -0.69999999999999996, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.69999999999999996, nu=0.10000000000000001.
-template <typename Tp>
-void test022()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data022)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data022[i].k), Tp(data022[i].nu),
-                   Tp(data022[i].phi));
-      const Tp f0 = data022[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.2736371663370261e-16
+// mean(f - f_Boost): 8.8817841970012528e-17
+// variance(f - f_Boost): 9.7390235212470591e-34
+// stddev(f - f_Boost): 3.1207408609570677e-17
+const testcase_ellint_3<double>
+data022[10] =
+{
+  { 0.0000000000000000, -0.69999999999999996, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17514462737300920, -0.69999999999999996, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35396527997470451, -0.69999999999999996, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54015179589433981, -0.69999999999999996, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.73734430854477728, -0.69999999999999996, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.94888950796697047, -0.69999999999999996, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1772807959736322, -0.69999999999999996, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4231796401075831, -0.69999999999999996, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6841856799887469, -0.69999999999999996, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.9541347343119562, -0.69999999999999996, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler022 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996, nu=0.20000000000000001.
-testcase_ellint_3<double> data023[] = {
-  { -0.0000000000000000, -0.69999999999999996, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17461479077791472, -0.69999999999999996, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34976950621407538, -0.69999999999999996, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.52622533231350188, -0.69999999999999996, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.70508774017895226, -0.69999999999999996, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.88775302531730294, -0.69999999999999996, 0.20000000000000001,
-          0.87266462599716477 },
-  { 1.0756195476149006, -0.69999999999999996, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.2695349716654372, -0.69999999999999996, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.4690814617070540, -0.69999999999999996, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.6721098780092147, -0.69999999999999996, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.69999999999999996, nu=0.20000000000000001.
-template <typename Tp>
-void test023()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data023)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data023[i].k), Tp(data023[i].nu),
-                   Tp(data023[i].phi));
-      const Tp f0 = data023[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.69999999999999996, nu=0.29999999999999999.
-testcase_ellint_3<double> data024[] = {
-  { -0.0000000000000000, -0.69999999999999996, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17443945136076172, -0.69999999999999996, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34840956983535287, -0.69999999999999996, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.52185308551329179, -0.69999999999999996, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.69535240431168266, -0.69999999999999996, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.87007983473964923, -0.69999999999999996, 0.29999999999999999,
-          0.87266462599716477 },
-  { 1.0474657975577066, -0.69999999999999996, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.2286225419931889, -0.69999999999999996, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.4136490671013271, -0.69999999999999996, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.6011813647733213, -0.69999999999999996, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.69999999999999996, nu=0.29999999999999999.
-template <typename Tp>
-void test024()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data024)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data024[i].k), Tp(data024[i].nu),
-                   Tp(data024[i].phi));
-      const Tp f0 = data024[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.9907249355047774e-16
+// mean(f - f_Boost): 3.3306690738754695e-17
+// variance(f - f_Boost): 1.3695501826753678e-34
+// stddev(f - f_Boost): 1.1702778228589003e-17
+const testcase_ellint_3<double>
+data023[10] =
+{
+  { 0.0000000000000000, -0.69999999999999996, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17532252613350796, -0.69999999999999996, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35540417596807522, -0.69999999999999996, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54508913033361928, -0.69999999999999996, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.74927635777718415, -0.69999999999999996, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.97261706337936338, -0.69999999999999996, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2187303976209327, -0.69999999999999996, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4887796709222487, -0.69999999999999996, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.7796581281839212, -0.69999999999999996, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.0829290325820202, -0.69999999999999996, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler023 = 2.5000000000000020e-13;
+
+// Test data for k=-0.69999999999999996, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.6912897610535316e-16
+// mean(f - f_Boost): 1.6653345369377347e-17
+// variance(f - f_Boost): 2.6207864467918357e-32
+// stddev(f - f_Boost): 1.6188843216214787e-16
+const testcase_ellint_3<double>
+data024[10] =
+{
+  { 0.0000000000000000, -0.69999999999999996, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17550107516328570, -0.69999999999999996, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35686409576571959, -0.69999999999999996, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.55018827316513352, -0.69999999999999996, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.76189759494390275, -0.69999999999999996, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.99844623430885615, -0.69999999999999996, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.2652862989039833, -0.69999999999999996, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.5647666808691361, -0.69999999999999996, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.8932499694938163, -0.69999999999999996, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 2.2392290510988535, -0.69999999999999996, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler024 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996, nu=0.40000000000000002.
-testcase_ellint_3<double> data025[] = {
-  { -0.0000000000000000, -0.69999999999999996, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17426474153983226, -0.69999999999999996, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34706817945773732, -0.69999999999999996, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.51760452851738159, -0.69999999999999996, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.68605801534722766, -0.69999999999999996, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.85351339387296532, -0.69999999999999996, 0.40000000000000002,
-          0.87266462599716477 },
-  { 1.0215297967969537, -0.69999999999999996, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.1915051074460528, -0.69999999999999996, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.3639821911744707, -0.69999999999999996, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.5382162002954762, -0.69999999999999996, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.69999999999999996, nu=0.40000000000000002.
-template <typename Tp>
-void test025()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data025)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data025[i].k), Tp(data025[i].nu),
-                   Tp(data025[i].phi));
-      const Tp f0 = data025[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 6.5578567644745380e-16
+// mean(f - f_Boost): 1.4710455076283324e-16
+// variance(f - f_Boost): 2.6715739327327140e-33
+// stddev(f - f_Boost): 5.1687270509601433e-17
+const testcase_ellint_3<double>
+data025[10] =
+{
+  { 0.0000000000000000, -0.69999999999999996, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17568027871494424, -0.69999999999999996, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35834559208180261, -0.69999999999999996, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.55545885451190613, -0.69999999999999996, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.77528120402568101, -0.69999999999999996, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0267241287600319, -0.69999999999999996, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.3181380338980246, -0.69999999999999996, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.6542840785132085, -0.69999999999999996, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 2.0315595131131818, -0.69999999999999996, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.4342502915307875, -0.69999999999999996, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler025 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996, nu=0.50000000000000000.
-testcase_ellint_3<double> data026[] = {
-  { -0.0000000000000000, -0.69999999999999996, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17409065729516093, -0.69999999999999996, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34574489064986091, -0.69999999999999996, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.51347361925579793, -0.69999999999999996, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.67717079489579290, -0.69999999999999996, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.83793902055292280, -0.69999999999999996, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.99752863545289705, -0.69999999999999996, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.1576240080401499, -0.69999999999999996, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.3191464023923762, -0.69999999999999996, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.4818433192178544, -0.69999999999999996, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.69999999999999996, nu=0.50000000000000000.
-template <typename Tp>
-void test026()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data026)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data026[i].k), Tp(data026[i].nu),
-                   Tp(data026[i].phi));
-      const Tp f0 = data026[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.69999999999999996, nu=0.59999999999999998.
-testcase_ellint_3<double> data027[] = {
-  { -0.0000000000000000, -0.69999999999999996, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17391719464391611, -0.69999999999999996, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34443927423869031, -0.69999999999999996, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.50945473266486074, -0.69999999999999996, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.66866056326513823, -0.69999999999999996, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.82325830002337352, -0.69999999999999996, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.97522808245669357, -0.69999999999999996, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.1265300613705282, -0.69999999999999996, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.2784066076152003, -0.69999999999999996, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.4309994736080540, -0.69999999999999996, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.69999999999999996, nu=0.59999999999999998.
-template <typename Tp>
-void test027()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data027)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data027[i].k), Tp(data027[i].nu),
-                   Tp(data027[i].phi));
-      const Tp f0 = data027[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.69999999999999996, nu=0.69999999999999996.
-testcase_ellint_3<double> data028[] = {
-  { -0.0000000000000000, -0.69999999999999996, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17374434963995028, -0.69999999999999996, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34315091562900674, -0.69999999999999996, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.50554262375653358, -0.69999999999999996, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.66050025406305812, -0.69999999999999996, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.80938620118847404, -0.69999999999999996, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.95443223855852144, -0.69999999999999996, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.0978573207128302, -0.69999999999999996, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.2411754575007123, -0.69999999999999996, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.3848459188329196, -0.69999999999999996, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.69999999999999996, nu=0.69999999999999996.
-template <typename Tp>
-void test028()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data028)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data028[i].k), Tp(data028[i].nu),
-                   Tp(data028[i].phi));
-      const Tp f0 = data028[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 6.0416041815443256e-16
+// mean(f - f_Boost): 1.9151347174783951e-16
+// variance(f - f_Boost): 7.8758646268991113e-33
+// stddev(f - f_Boost): 8.8746068233466605e-17
+const testcase_ellint_3<double>
+data026[10] =
+{
+  { 0.0000000000000000, -0.69999999999999996, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17586014108156545, -0.69999999999999996, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35984923894341653, -0.69999999999999996, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.56091135606739995, -0.69999999999999996, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.78951212635197054, -0.69999999999999996, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0578865732938729, -0.69999999999999996, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.3789149005151722, -0.69999999999999996, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.7620212286086225, -0.69999999999999996, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.2051554347435585, -0.69999999999999996, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.6868019968236991, -0.69999999999999996, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler026 = 2.5000000000000020e-13;
+
+// Test data for k=-0.69999999999999996, nu=0.60000000000000009.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.6515644573247170e-16
+// mean(f - f_Boost): 9.9920072216264091e-17
+// variance(f - f_Boost): 1.2325951644078310e-33
+// stddev(f - f_Boost): 3.5108334685767011e-17
+const testcase_ellint_3<double>
+data027[10] =
+{
+  { 0.0000000000000000, -0.69999999999999996, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17604066659721918, -0.69999999999999996, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.36137563278353424, -0.69999999999999996, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.56655721272747606, -0.69999999999999996, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.80468966552978305, -0.69999999999999996, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0924902943683852, -0.69999999999999996, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.4499247992499797, -0.69999999999999996, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.8953714382113815, -0.69999999999999996, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.4323229949248670, -0.69999999999999996, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 3.0314573496746742, -0.69999999999999996, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler027 = 2.5000000000000020e-13;
+
+// Test data for k=-0.69999999999999996, nu=0.70000000000000007.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.8475278552871384e-16
+// mean(f - f_Boost): 9.9920072216264091e-17
+// variance(f - f_Boost): 1.2325951644078310e-33
+// stddev(f - f_Boost): 3.5108334685767011e-17
+const testcase_ellint_3<double>
+data028[10] =
+{
+  { 0.0000000000000000, -0.69999999999999996, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17622185963747933, -0.69999999999999996, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.36292539360435261, -0.69999999999999996, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.57240892970150015, -0.69999999999999996, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.82093084713182629, -0.69999999999999996, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.1312609022179871, -0.69999999999999996, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.5345768067715795, -0.69999999999999996, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 2.0668847445934420, -0.69999999999999996, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.7483444537551240, -0.69999999999999996, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 3.5408408771788560, -0.69999999999999996, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler028 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996, nu=0.80000000000000004.
-testcase_ellint_3<double> data029[] = {
-  { -0.0000000000000000, -0.69999999999999996, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17357211837335737, -0.69999999999999996, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.34187941416012108, -0.69999999999999996, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.50173239465478270, -0.69999999999999996, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.65266550725988315, -0.69999999999999996, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.79624879865249298, -0.69999999999999996, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.93497577043296920, -0.69999999999999996, 0.80000000000000004,
-          1.0471975511965976 },
-  { 1.0713041566930748, -0.69999999999999996, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.2069772023255652, -0.69999999999999996, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.3427110650397533, -0.69999999999999996, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.69999999999999996, nu=0.80000000000000004.
-template <typename Tp>
-void test029()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data029)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data029[i].k), Tp(data029[i].nu),
-                   Tp(data029[i].phi));
-      const Tp f0 = data029[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 6.8664526853112274e-16
+// mean(f - f_Boost): 1.6930901125533636e-16
+// variance(f - f_Boost): 3.5389557150937801e-33
+// stddev(f - f_Boost): 5.9489122661994095e-17
+const testcase_ellint_3<double>
+data029[10] =
+{
+  { 0.0000000000000000, -0.69999999999999996, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17640372461994805, -0.69999999999999996, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36449916621651091, -0.69999999999999996, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.57848021800372573, -0.69999999999999996, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.83837480968392586, -0.69999999999999996, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1751669030061143, -0.69999999999999996, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.6381851899173601, -0.69999999999999996, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.3002065924302197, -0.69999999999999996, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 3.2337600665337862, -0.69999999999999996, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 4.4042405729076961, -0.69999999999999996, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler029 = 2.5000000000000020e-13;
 
 // Test data for k=-0.69999999999999996, nu=0.90000000000000002.
-testcase_ellint_3<double> data030[] = {
-  { -0.0000000000000000, -0.69999999999999996, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17340049697003634, -0.69999999999999996, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.34062438249741556, -0.69999999999999996, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.49801946510076878, -0.69999999999999996, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.64513432604750487, -0.69999999999999996, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.78378145487573758, -0.69999999999999996, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.91671799500854634, -0.69999999999999996, 0.90000000000000002,
-          1.0471975511965976 },
-  { 1.0466193579463123, -0.69999999999999996, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.1754218079199146, -0.69999999999999996, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.3040500499695911, -0.69999999999999996, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.69999999999999996, nu=0.90000000000000002.
-template <typename Tp>
-void test030()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data030)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data030[i].k), Tp(data030[i].nu),
-                   Tp(data030[i].phi));
-      const Tp f0 = data030[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 3.5527136788005009e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 8.5869439826269878e-16
+// mean(f - f_Boost): 6.7723604502134545e-16
+// variance(f - f_Boost): 4.8757508225668289e-31
+// stddev(f - f_Boost): 6.9826576763914390e-16
+const testcase_ellint_3<double>
+data030[10] =
+{
+  { 0.0000000000000000, -0.69999999999999996, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17658626600478800, -0.69999999999999996, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36609762156017206, -0.69999999999999996, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.58478615187842409, -0.69999999999999996, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.85718862878291846, -0.69999999999999996, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.2255385617397643, -0.69999999999999996, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.7696521899992939, -0.69999999999999996, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.6476314987883502, -0.69999999999999996, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 4.1373434902898083, -0.69999999999999996, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 6.3796094177887746, -0.69999999999999996, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler030 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998, nu=0.0000000000000000.
-testcase_ellint_3<double> data031[] = {
-  { -0.0000000000000000, -0.59999999999999998, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17485154362988362, -0.59999999999999998, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.35160509865544326, -0.59999999999999998, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.53210652578446160, -0.59999999999999998, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.71805304664485670, -0.59999999999999998, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.91082759030195970, -0.59999999999999998, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.1112333229323361, -0.59999999999999998, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.3191461190365270, -0.59999999999999998, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.5332022105084773, -0.59999999999999998, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.7507538029157526, -0.59999999999999998, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.59999999999999998, nu=0.0000000000000000.
-template <typename Tp>
-void test031()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data031)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data031[i].k), Tp(data031[i].nu),
-                   Tp(data031[i].phi));
-      const Tp f0 = data031[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.3664899092028927e-16
+// mean(f - f_Boost): 5.2735593669694933e-17
+// variance(f - f_Boost): 3.4333862218458872e-34
+// stddev(f - f_Boost): 1.8529398861932589e-17
+const testcase_ellint_3<double>
+data031[10] =
+{
+  { 0.0000000000000000, -0.59999999999999998, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17485154362988359, -0.59999999999999998, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35160509865544320, -0.59999999999999998, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.53210652578446138, -0.59999999999999998, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.71805304664485659, -0.59999999999999998, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.91082759030195981, -0.59999999999999998, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.1112333229323361, -0.59999999999999998, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.3191461190365270, -0.59999999999999998, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.5332022105084779, -0.59999999999999998, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.7507538029157523, -0.59999999999999998, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler031 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998, nu=0.10000000000000001.
-testcase_ellint_3<double> data032[] = {
-  { -0.0000000000000000, -0.59999999999999998, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17467514275022014, -0.59999999999999998, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.35021333086258255, -0.59999999999999998, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.52751664092962713, -0.59999999999999998, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.70752126971957885, -0.59999999999999998, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.89111058756112871, -0.59999999999999998, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.0789241202877768, -0.59999999999999998, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.2710800210399946, -0.59999999999999998, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.4669060574440276, -0.59999999999999998, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.6648615773343014, -0.59999999999999998, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.59999999999999998, nu=0.10000000000000001.
-template <typename Tp>
-void test032()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data032)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data032[i].k), Tp(data032[i].nu),
-                   Tp(data032[i].phi));
-      const Tp f0 = data032[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.2335247010355137e-16
+// mean(f - f_Boost): 8.6042284408449634e-17
+// variance(f - f_Boost): 2.2835347143080263e-33
+// stddev(f - f_Boost): 4.7786344433405099e-17
+const testcase_ellint_3<double>
+data032[10] =
+{
+  { 0.0000000000000000, -0.59999999999999998, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17502858548476194, -0.59999999999999998, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35301673150537388, -0.59999999999999998, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53683932476326812, -0.59999999999999998, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72914228589586771, -0.59999999999999998, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.93208036718354692, -0.59999999999999998, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1468984688863377, -0.59999999999999998, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3733904977062528, -0.59999999999999998, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6094225663372157, -0.59999999999999998, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8508766487100685, -0.59999999999999998, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler032 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998, nu=0.20000000000000001.
-testcase_ellint_3<double> data033[] = {
-  { -0.0000000000000000, -0.59999999999999998, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17449937871800653, -0.59999999999999998, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34884093647346553, -0.59999999999999998, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.52306221119844110, -0.59999999999999998, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.69749955678982223, -0.59999999999999998, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.87274610682416853, -0.59999999999999998, 0.20000000000000001,
-          0.87266462599716477 },
-  { 1.0494620540750792, -0.59999999999999998, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.2280847305507339, -0.59999999999999998, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.4085436279696886, -0.59999999999999998, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.5901418016279374, -0.59999999999999998, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.59999999999999998, nu=0.20000000000000001.
-template <typename Tp>
-void test033()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data033)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data033[i].k), Tp(data033[i].nu),
-                   Tp(data033[i].phi));
-      const Tp f0 = data033[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.59999999999999998, nu=0.29999999999999999.
-testcase_ellint_3<double> data034[] = {
-  { -0.0000000000000000, -0.59999999999999998, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17432424744393935, -0.59999999999999998, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34748744127146447, -0.59999999999999998, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.51873632743924847, -0.59999999999999998, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.68794610396313127, -0.59999999999999998, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.85558070175468726, -0.59999999999999998, 0.29999999999999999,
-          0.87266462599716477 },
-  { 1.0224416343605653, -0.59999999999999998, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.1893144457936788, -0.59999999999999998, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.3566435377982575, -0.59999999999999998, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.5243814243493585, -0.59999999999999998, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.59999999999999998, nu=0.29999999999999999.
-template <typename Tp>
-void test034()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data034)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data034[i].k), Tp(data034[i].nu),
-                   Tp(data034[i].phi));
-      const Tp f0 = data034[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.0940560416437693e-16
+// mean(f - f_Boost): 4.1633363423443370e-17
+// variance(f - f_Boost): 8.5834655546147173e-33
+// stddev(f - f_Boost): 9.2646994309662939e-17
+const testcase_ellint_3<double>
+data033[10] =
+{
+  { 0.0000000000000000, -0.59999999999999998, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17520627248155893, -0.59999999999999998, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35444873935437748, -0.59999999999999998, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54172310557682524, -0.59999999999999998, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.74084300280734672, -0.59999999999999998, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.95509001527006121, -0.59999999999999998, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1865688084431796, -0.59999999999999998, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4352978868932598, -0.59999999999999998, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6983400371331816, -0.59999999999999998, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.9695980282802215, -0.59999999999999998, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler033 = 2.5000000000000020e-13;
+
+// Test data for k=-0.59999999999999998, nu=0.30000000000000004.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.9470074709717020e-16
+// mean(f - f_Boost): 7.4940054162198071e-17
+// variance(f - f_Boost): 1.6823592487044846e-32
+// stddev(f - f_Boost): 1.2970579203352812e-16
+const testcase_ellint_3<double>
+data034[10] =
+{
+  { 0.0000000000000000, -0.59999999999999998, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17538460882640122, -0.59999999999999998, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35590165133735557, -0.59999999999999998, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.54676661152254535, -0.59999999999999998, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.75321709418305305, -0.59999999999999998, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.98012637808992920, -0.59999999999999998, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.2310891277158875, -0.59999999999999998, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.5069157924585623, -0.59999999999999998, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.8039583598337940, -0.59999999999999998, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 2.1134154405060599, -0.59999999999999998, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler034 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998, nu=0.40000000000000002.
-testcase_ellint_3<double> data035[] = {
-  { -0.0000000000000000, -0.59999999999999998, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17414974487670720, -0.59999999999999998, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34615238767335027, -0.59999999999999998, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.51453257838108579, -0.59999999999999998, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.67882386787534410, -0.59999999999999998, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.83948470233173578, -0.59999999999999998, 0.40000000000000002,
-          0.87266462599716477 },
-  { 0.99753496200073977, -0.59999999999999998, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.1541101404388487, -0.59999999999999998, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.3100911323398814, -0.59999999999999998, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.4659345278069984, -0.59999999999999998, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.59999999999999998, nu=0.40000000000000002.
-template <typename Tp>
-void test035()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data035)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data035[i].k), Tp(data035[i].nu),
-                   Tp(data035[i].phi));
-      const Tp f0 = data035[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.7909659715991921e-16
+// mean(f - f_Boost): -2.7755575615628915e-18
+// variance(f - f_Boost): 2.4044165394594425e-32
+// stddev(f - f_Boost): 1.5506181152880429e-16
+const testcase_ellint_3<double>
+data035[10] =
+{
+  { 0.0000000000000000, -0.59999999999999998, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17556359876533037, -0.59999999999999998, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35737601674244679, -0.59999999999999998, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.55197933771320218, -0.59999999999999998, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.76633591620002894, -0.59999999999999998, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0075231136019616, -0.59999999999999998, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2815842073813450, -0.59999999999999998, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.5911666941449827, -0.59999999999999998, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.9323227566025762, -0.59999999999999998, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.2925036420985130, -0.59999999999999998, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler035 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998, nu=0.50000000000000000.
-testcase_ellint_3<double> data036[] = {
-  { -0.0000000000000000, -0.59999999999999998, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17397586700252810, -0.59999999999999998, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34483533397138516, -0.59999999999999998, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.51044500461706499, -0.59999999999999998, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.67009988034712675, -0.59999999999999998, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.82434762375735193, -0.59999999999999998, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.97447346702798998, -0.59999999999999998, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.1219494000522143, -0.59999999999999998, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.2680242605954486, -0.59999999999999998, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.4135484285693078, -0.59999999999999998, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.59999999999999998, nu=0.50000000000000000.
-template <typename Tp>
-void test036()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data036)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data036[i].k), Tp(data036[i].nu),
-                   Tp(data036[i].phi));
-      const Tp f0 = data036[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.59999999999999998, nu=0.59999999999999998.
-testcase_ellint_3<double> data037[] = {
-  { -0.0000000000000000, -0.59999999999999998, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17380260984469356, -0.59999999999999998, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34353585361777839, -0.59999999999999998, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.50646805774321402, -0.59999999999999998, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.66174468108625517, -0.59999999999999998, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.81007462280278408, -0.59999999999999998, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.95303466945718729, -0.59999999999999998, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.0924118588677503, -0.59999999999999998, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.2297640574847937, -0.59999999999999998, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.3662507535812816, -0.59999999999999998, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.59999999999999998, nu=0.59999999999999998.
-template <typename Tp>
-void test037()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data037)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data037[i].k), Tp(data037[i].nu),
-                   Tp(data037[i].phi));
-      const Tp f0 = data037[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.59999999999999998, nu=0.69999999999999996.
-testcase_ellint_3<double> data038[] = {
-  { -0.0000000000000000, -0.59999999999999998, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17362996946312009, -0.59999999999999998, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34225353454870588, -0.59999999999999998, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.50259656397799546, -0.59999999999999998, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.65373184496628944, -0.59999999999999998, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.79658372884056439, -0.59999999999999998, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.93303240100245421, -0.59999999999999998, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.0651547944716557, -0.59999999999999998, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.1947676204853441, -0.59999999999999998, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.3232737468822811, -0.59999999999999998, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.59999999999999998, nu=0.69999999999999996.
-template <typename Tp>
-void test038()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data038)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data038[i].k), Tp(data038[i].nu),
-                   Tp(data038[i].phi));
-      const Tp f0 = data038[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.6240126899196213e-16
+// mean(f - f_Boost): 9.1593399531575410e-17
+// variance(f - f_Boost): 1.0357223256482469e-33
+// stddev(f - f_Boost): 3.2182640128619758e-17
+const testcase_ellint_3<double>
+data036[10] =
+{
+  { 0.0000000000000000, -0.59999999999999998, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17574324658480217, -0.59999999999999998, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35887240603169313, -0.59999999999999998, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55737161826345261, -0.59999999999999998, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.78028227313077458, -0.59999999999999998, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0376989776486290, -0.59999999999999998, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.3395933991042925, -0.59999999999999998, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.6924049626591782, -0.59999999999999998, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.0931011856518920, -0.59999999999999998, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.5239007084492706, -0.59999999999999998, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler036 = 2.5000000000000020e-13;
+
+// Test data for k=-0.59999999999999998, nu=0.60000000000000009.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.6651378277398083e-16
+// mean(f - f_Boost): 1.1934897514720432e-16
+// variance(f - f_Boost): 1.7585404776158019e-33
+// stddev(f - f_Boost): 4.1934955319110598e-17
+const testcase_ellint_3<double>
+data037[10] =
+{
+  { 0.0000000000000000, -0.59999999999999998, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17592355661219386, -0.59999999999999998, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.36039141192661606, -0.59999999999999998, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.56295472636903854, -0.59999999999999998, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.79515295130165986, -0.59999999999999998, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0711886441942242, -0.59999999999999998, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.4072952835139891, -0.59999999999999998, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.8174863977376825, -0.59999999999999998, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.3029921578542232, -0.59999999999999998, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 2.8388723099514972, -0.59999999999999998, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler037 = 2.5000000000000020e-13;
+
+// Test data for k=-0.59999999999999998, nu=0.70000000000000007.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.2451074234797436e-16
+// mean(f - f_Boost): 5.2735593669694933e-17
+// variance(f - f_Boost): 3.4333862218458872e-34
+// stddev(f - f_Boost): 1.8529398861932589e-17
+const testcase_ellint_3<double>
+data038[10] =
+{
+  { 0.0000000000000000, -0.59999999999999998, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17610453321631936, -0.59999999999999998, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.36193365056369764, -0.59999999999999998, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.56874098962268527, -0.59999999999999998, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.81106198671477181, -0.59999999999999998, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.1086886419010082, -0.59999999999999998, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.4879048567239257, -0.59999999999999998, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 1.9780310073615923, -0.59999999999999998, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.5941545586772712, -0.59999999999999998, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 3.3029735898397155, -0.59999999999999998, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler038 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998, nu=0.80000000000000004.
-testcase_ellint_3<double> data039[] = {
-  { -0.0000000000000000, -0.59999999999999998, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17345794195390687, -0.59999999999999998, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.34098797854531027, -0.59999999999999998, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.49882569168826230, -0.59999999999999998, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.64603758566475511, -0.59999999999999998, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.78380365594769730, -0.59999999999999998, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.91430946255611190, -0.59999999999999998, 0.80000000000000004,
-          1.0471975511965976 },
-  { 1.0398955217270607, -0.59999999999999998, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.1625948314277676, -0.59999999999999998, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.2840021261752192, -0.59999999999999998, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.59999999999999998, nu=0.80000000000000004.
-template <typename Tp>
-void test039()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data039)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data039[i].k), Tp(data039[i].nu),
-                   Tp(data039[i].phi));
-      const Tp f0 = data039[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.3826960061025914e-16
+// mean(f - f_Boost): 2.7478019859472625e-16
+// variance(f - f_Boost): 4.6451528105588637e-32
+// stddev(f - f_Boost): 2.1552616570984749e-16
+const testcase_ellint_3<double>
+data039[10] =
+{
+  { 0.0000000000000000, -0.59999999999999998, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17628618080795252, -0.59999999999999998, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36349976272521012, -0.59999999999999998, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.57474392342151914, -0.59999999999999998, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.82814493499158159, -0.59999999999999998, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1511281795998280, -0.59999999999999998, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.5864286332503075, -0.59999999999999998, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.1958944866494527, -0.59999999999999998, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 3.0398358172574604, -0.59999999999999998, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 4.0867036409261832, -0.59999999999999998, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler039 = 2.5000000000000020e-13;
 
 // Test data for k=-0.59999999999999998, nu=0.90000000000000002.
-testcase_ellint_3<double> data040[] = {
-  { -0.0000000000000000, -0.59999999999999998, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17328652344890033, -0.59999999999999998, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.33973880062929018, -0.59999999999999998, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.49515092233122765, -0.59999999999999998, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.63864042139737043, -0.59999999999999998, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.77167205646538850, -0.59999999999999998, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.89673202848034383, -0.59999999999999998, 0.90000000000000002,
-          1.0471975511965976 },
-  { 1.0163984492661304, -0.59999999999999998, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.1328845785162431, -0.59999999999999998, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.2479362973851875, -0.59999999999999998, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.59999999999999998, nu=0.90000000000000002.
-template <typename Tp>
-void test040()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data040)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data040[i].k), Tp(data040[i].nu),
-                   Tp(data040[i].phi));
-      const Tp f0 = data040[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.7440178400898422e-16
+// mean(f - f_Boost): 5.0792703376600914e-16
+// variance(f - f_Boost): 1.9863137923719990e-31
+// stddev(f - f_Boost): 4.4568080420543122e-16
+const testcase_ellint_3<double>
+data040[10] =
+{
+  { 0.0000000000000000, -0.59999999999999998, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17646850384035848, -0.59999999999999998, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36509041515134105, -0.59999999999999998, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.58097838596260631, -0.59999999999999998, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.84656453396163722, -0.59999999999999998, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1997828426963724, -0.59999999999999998, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.7112436789225605, -0.59999999999999998, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.5193168553672312, -0.59999999999999998, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.8656670488606686, -0.59999999999999998, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.8709993116265595, -0.59999999999999998, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler040 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000, nu=0.0000000000000000.
-testcase_ellint_3<double> data041[] = {
-  { -0.0000000000000000, -0.50000000000000000, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17475385514035785, -0.50000000000000000, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.35081868470101585, -0.50000000000000000, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.52942862705190585, -0.50000000000000000, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.71164727562630326, -0.50000000000000000, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.89824523594227768, -0.50000000000000000, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.0895506700518851, -0.50000000000000000, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.2853005857432933, -0.50000000000000000, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.4845545520549484, -0.50000000000000000, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.6857503548125963, -0.50000000000000000, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.50000000000000000, nu=0.0000000000000000.
-template <typename Tp>
-void test041()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data041)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data041[i].k), Tp(data041[i].nu),
-                   Tp(data041[i].phi));
-      const Tp f0 = data041[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.4551389361831220e-16
+// mean(f - f_Boost): -1.3877787807814457e-17
+// variance(f - f_Boost): 2.5893058141206173e-32
+// stddev(f - f_Boost): 1.6091320064309879e-16
+const testcase_ellint_3<double>
+data041[10] =
+{
+  { 0.0000000000000000, -0.50000000000000000, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17475385514035785, -0.50000000000000000, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35081868470101579, -0.50000000000000000, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52942862705190574, -0.50000000000000000, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.71164727562630326, -0.50000000000000000, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.89824523594227768, -0.50000000000000000, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0895506700518853, -0.50000000000000000, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2853005857432933, -0.50000000000000000, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4845545520549488, -0.50000000000000000, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.6857503548125961, -0.50000000000000000, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler041 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000, nu=0.10000000000000001.
-testcase_ellint_3<double> data042[] = {
-  { -0.0000000000000000, -0.50000000000000000, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17457763120814676, -0.50000000000000000, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.34943246340849154, -0.50000000000000000, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.52487937869610801, -0.50000000000000000, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.70127785096388395, -0.50000000000000000, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.87898815988624479, -0.50000000000000000, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.0582764576094172, -0.50000000000000000, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.2391936844060207, -0.50000000000000000, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.4214793542995841, -0.50000000000000000, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.6045524936084892, -0.50000000000000000, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.50000000000000000, nu=0.10000000000000001.
-template <typename Tp>
-void test042()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data042)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data042[i].k), Tp(data042[i].nu),
-                   Tp(data042[i].phi));
-      const Tp f0 = data042[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.7416868347177582e-16
+// mean(f - f_Boost): 2.7755575615628915e-18
+// variance(f - f_Boost): 5.4326441655972001e-32
+// stddev(f - f_Boost): 2.3308033305273100e-16
+const testcase_ellint_3<double>
+data042[10] =
+{
+  { 0.0000000000000000, -0.50000000000000000, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17493071928248824, -0.50000000000000000, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35222467688034798, -0.50000000000000000, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53411928652008112, -0.50000000000000000, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72256398117177589, -0.50000000000000000, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.91899583232771009, -0.50000000000000000, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1240549163055360, -0.50000000000000000, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3372938086286021, -0.50000000000000000, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5570024469132429, -0.50000000000000000, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7803034946545480, -0.50000000000000000, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler042 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000, nu=0.20000000000000001.
-testcase_ellint_3<double> data043[] = {
-  { -0.0000000000000000, -0.50000000000000000, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17440204336345433, -0.50000000000000000, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34806552388338824, -0.50000000000000000, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.52046416757129821, -0.50000000000000000, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.69140924550993876, -0.50000000000000000, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.86104678636125520, -0.50000000000000000, 0.20000000000000001,
-          0.87266462599716477 },
-  { 1.0297439459053981, -0.50000000000000000, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.1979214112912036, -0.50000000000000000, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.3659033858648930, -0.50000000000000000, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.5338490483665983, -0.50000000000000000, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.50000000000000000, nu=0.20000000000000001.
-template <typename Tp>
-void test043()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data043)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data043[i].k), Tp(data043[i].nu),
-                   Tp(data043[i].phi));
-      const Tp f0 = data043[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.50000000000000000, nu=0.29999999999999999.
-testcase_ellint_3<double> data044[] = {
-  { -0.0000000000000000, -0.50000000000000000, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17422708752228896, -0.50000000000000000, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34671739434855858, -0.50000000000000000, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.51617616305641889, -0.50000000000000000, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.68200047612545178, -0.50000000000000000, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.84427217869498372, -0.50000000000000000, 0.29999999999999999,
-          0.87266462599716477 },
-  { 1.0035637821389782, -0.50000000000000000, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.1606800483933113, -0.50000000000000000, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.3164407134643459, -0.50000000000000000, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.4715681939859637, -0.50000000000000000, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.50000000000000000, nu=0.29999999999999999.
-template <typename Tp>
-void test044()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data044)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data044[i].k), Tp(data044[i].nu),
-                   Tp(data044[i].phi));
-      const Tp f0 = data044[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.1198767993730867e-16
+// mean(f - f_Boost): 2.7755575615628914e-17
+// variance(f - f_Boost): 5.0311947683004831e-32
+// stddev(f - f_Boost): 2.2430324938128922e-16
+const testcase_ellint_3<double>
+data043[10] =
+{
+  { 0.0000000000000000, -0.50000000000000000, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17510822779582402, -0.50000000000000000, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35365094725531487, -0.50000000000000000, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53895933237328697, -0.50000000000000000, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.73408090840070794, -0.50000000000000000, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.94145442818535396, -0.50000000000000000, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1624120186296487, -0.50000000000000000, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3965823372867114, -0.50000000000000000, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6414308440430099, -0.50000000000000000, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8922947612264018, -0.50000000000000000, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler043 = 2.5000000000000020e-13;
+
+// Test data for k=-0.50000000000000000, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3800262770228813e-16
+// mean(f - f_Boost): 5.8286708792820721e-17
+// variance(f - f_Boost): 8.5027191584278157e-32
+// stddev(f - f_Boost): 2.9159422419567599e-16
+const testcase_ellint_3<double>
+data044[10] =
+{
+  { 0.0000000000000000, -0.50000000000000000, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17528638488102041, -0.50000000000000000, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35509802222332720, -0.50000000000000000, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.54395740731866193, -0.50000000000000000, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.74625871438752667, -0.50000000000000000, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.96588271186092023, -0.50000000000000000, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.2054319584357329, -0.50000000000000000, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.4651077994832871, -0.50000000000000000, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.7416018368052644, -0.50000000000000000, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 2.0277924458111314, -0.50000000000000000, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler044 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000, nu=0.40000000000000002.
-testcase_ellint_3<double> data045[] = {
-  { -0.0000000000000000, -0.50000000000000000, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17405275963859917, -0.50000000000000000, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34538761957029329, -0.50000000000000000, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.51200902646603919, -0.50000000000000000, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.67301522212868792, -0.50000000000000000, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.82853844466313320, -0.50000000000000000, 0.40000000000000002,
-          0.87266462599716477 },
-  { 0.97942097862681488, -0.50000000000000000, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.1268429801220616, -0.50000000000000000, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.2720406704533922, -0.50000000000000000, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.4161679518465340, -0.50000000000000000, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.50000000000000000, nu=0.40000000000000002.
-template <typename Tp>
-void test045()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data045)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data045[i].k), Tp(data045[i].nu),
-                   Tp(data045[i].phi));
-      const Tp f0 = data045[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.0439932918341581e-16
+// mean(f - f_Boost): 3.0531133177191807e-17
+// variance(f - f_Boost): 9.0809736800018602e-32
+// stddev(f - f_Boost): 3.0134653938616686e-16
+const testcase_ellint_3<double>
+data045[10] =
+{
+  { 0.0000000000000000, -0.50000000000000000, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17546519477859268, -0.50000000000000000, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35656644822531680, -0.50000000000000000, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54912289677411319, -0.50000000000000000, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.75916731611690047, -0.50000000000000000, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.99260415631328214, -0.50000000000000000, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2541925856918670, -0.50000000000000000, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.5456393705347609, -0.50000000000000000, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.8631904972952076, -0.50000000000000000, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.1962905366178065, -0.50000000000000000, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler045 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000, nu=0.50000000000000000.
-testcase_ellint_3<double> data046[] = {
-  { -0.0000000000000000, -0.50000000000000000, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17387905570381157, -0.50000000000000000, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34407576010465207, -0.50000000000000000, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.50795686560160835, -0.50000000000000000, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.66442115453330175, -0.50000000000000000, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.81373829119355345, -0.50000000000000000, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.95705743313235825, -0.50000000000000000, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.0959131991362556, -0.50000000000000000, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.2318900529754597, -0.50000000000000000, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.3664739530045971, -0.50000000000000000, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.50000000000000000, nu=0.50000000000000000.
-template <typename Tp>
-void test046()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data046)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data046[i].k), Tp(data046[i].nu),
-                   Tp(data046[i].phi));
-      const Tp f0 = data046[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.50000000000000000, nu=0.59999999999999998.
-testcase_ellint_3<double> data047[] = {
-  { -0.0000000000000000, -0.50000000000000000, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17370597174637581, -0.50000000000000000, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34278139158591414, -0.50000000000000000, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.50401419439302719, -0.50000000000000000, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.65618938076167221, -0.50000000000000000, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.79977959248855424, -0.50000000000000000, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.93625925190753545, -0.50000000000000000, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.0674905658379710, -0.50000000000000000, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.1953481298023048, -0.50000000000000000, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.3215740290190876, -0.50000000000000000, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.50000000000000000, nu=0.59999999999999998.
-template <typename Tp>
-void test047()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data047)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data047[i].k), Tp(data047[i].nu),
-                   Tp(data047[i].phi));
-      const Tp f0 = data047[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.50000000000000000, nu=0.69999999999999996.
-testcase_ellint_3<double> data048[] = {
-  { -0.0000000000000000, -0.50000000000000000, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17353350383131641, -0.50000000000000000, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34150410405436771, -0.50000000000000000, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.50017589696443487, -0.50000000000000000, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.64829398188419962, -0.50000000000000000, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.78658270782402073, -0.50000000000000000, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.91684738336675053, -0.50000000000000000, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.0412486789555937, -0.50000000000000000, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.1619021847612001, -0.50000000000000000, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.2807475181182502, -0.50000000000000000, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.50000000000000000, nu=0.69999999999999996.
-template <typename Tp>
-void test048()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data048)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data048[i].k), Tp(data048[i].nu),
-                   Tp(data048[i].phi));
-      const Tp f0 = data048[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.6797816859260978e-16
+// mean(f - f_Boost): 9.4368957093138303e-17
+// variance(f - f_Boost): 7.7794254682023874e-32
+// stddev(f - f_Boost): 2.7891621444803792e-16
+const testcase_ellint_3<double>
+data046[10] =
+{
+  { 0.0000000000000000, -0.50000000000000000, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17564466176941509, -0.50000000000000000, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35805679276065394, -0.50000000000000000, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55446601496200032, -0.50000000000000000, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.77288783578259013, -0.50000000000000000, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0220246013918972, -0.50000000000000000, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.3101681612463965, -0.50000000000000000, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.6422994881851025, -0.50000000000000000, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.0152636030998816, -0.50000000000000000, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.4136715042011945, -0.50000000000000000, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler046 = 2.5000000000000020e-13;
+
+// Test data for k=-0.50000000000000000, nu=0.60000000000000009.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.9178421578645735e-16
+// mean(f - f_Boost): 1.3322676295501878e-16
+// variance(f - f_Boost): 1.7749370367472766e-31
+// stddev(f - f_Boost): 4.2130001622920411e-16
+const testcase_ellint_3<double>
+data047[10] =
+{
+  { 0.0000000000000000, -0.50000000000000000, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17582479017522740, -0.50000000000000000, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.35956964546660036, -0.50000000000000000, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.55999790372984193, -0.50000000000000000, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.78751507911209895, -0.50000000000000000, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0546620505035220, -0.50000000000000000, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.3754438357425935, -0.50000000000000000, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.7615727400820127, -0.50000000000000000, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.2134638067565242, -0.50000000000000000, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 2.7090491861753558, -0.50000000000000000, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler047 = 2.5000000000000020e-13;
+
+// Test data for k=-0.50000000000000000, nu=0.70000000000000007.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.0745105182189226e-16
+// mean(f - f_Boost): 4.1633363423443370e-17
+// variance(f - f_Boost): 1.9996383743576116e-32
+// stddev(f - f_Boost): 1.4140857026211713e-16
+const testcase_ellint_3<double>
+data048[10] =
+{
+  { 0.0000000000000000, -0.50000000000000000, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17600558435914915, -0.50000000000000000, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.36110561926726259, -0.50000000000000000, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.56573074641137111, -0.50000000000000000, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.80316073084237205, -0.50000000000000000, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.0911910688131461, -0.50000000000000000, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.4530946406380640, -0.50000000000000000, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 1.9144386536785372, -0.50000000000000000, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.4878788958234970, -0.50000000000000000, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 3.1433945297859225, -0.50000000000000000, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler048 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000, nu=0.80000000000000004.
-testcase_ellint_3<double> data049[] = {
-  { -0.0000000000000000, -0.50000000000000000, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17336164805979126, -0.50000000000000000, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.34024350132086773, -0.50000000000000000, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.49643719555734084, -0.50000000000000000, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.64071162456976150, -0.50000000000000000, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.77407836177211908, -0.50000000000000000, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.89867058251905652, -0.50000000000000000, 0.80000000000000004,
-          1.0471975511965976 },
-  { 1.0169181822134912, -0.50000000000000000, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.1311363312779448, -0.50000000000000000, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.2434165408189539, -0.50000000000000000, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.50000000000000000, nu=0.80000000000000004.
-template <typename Tp>
-void test049()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data049)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data049[i].k), Tp(data049[i].nu),
-                   Tp(data049[i].phi));
-      const Tp f0 = data049[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.4380477375534667e-16
+// mean(f - f_Boost): 2.3037127760972000e-16
+// variance(f - f_Boost): 1.4989821857033475e-31
+// stddev(f - f_Boost): 3.8716691306248618e-16
+const testcase_ellint_3<double>
+data049[10] =
+{
+  { 0.0000000000000000, -0.50000000000000000, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17618704872620228, -0.50000000000000000, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36266535159745827, -0.50000000000000000, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.57167789954529158, -0.50000000000000000, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.81995752984315018, -0.50000000000000000, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1325112162158122, -0.50000000000000000, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.5479055930718042, -0.50000000000000000, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.1215243941010486, -0.50000000000000000, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.9069405767650132, -0.50000000000000000, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.8750701888108066, -0.50000000000000000, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler049 = 2.5000000000000020e-13;
 
 // Test data for k=-0.50000000000000000, nu=0.90000000000000002.
-testcase_ellint_3<double> data050[] = {
-  { -0.0000000000000000, -0.50000000000000000, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17319040056865681, -0.50000000000000000, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.33899920036578557, -0.50000000000000000, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.49279362182695186, -0.50000000000000000, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.63342123379746151, -0.50000000000000000, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.76220595179550321, -0.50000000000000000, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.88160004743532294, -0.50000000000000000, 0.90000000000000002,
-          1.0471975511965976 },
-  { 0.99427448642310134, -0.50000000000000000, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.1027091512470093, -0.50000000000000000, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.2091116095504744, -0.50000000000000000, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.50000000000000000, nu=0.90000000000000002.
-template <typename Tp>
-void test050()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data050)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data050[i].k), Tp(data050[i].nu),
-                   Tp(data050[i].phi));
-      const Tp f0 = data050[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.40000000000000002, nu=0.0000000000000000.
-testcase_ellint_3<double> data051[] = {
-  { -0.0000000000000000, -0.40000000000000002, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17467414669441531, -0.40000000000000002, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.35018222772483443, -0.40000000000000002, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.52729015917508748, -0.40000000000000002, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.70662374407341255, -0.40000000000000002, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.88859210497602170, -0.40000000000000002, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.0733136290471379, -0.40000000000000002, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.2605612170157061, -0.40000000000000002, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.4497513956433437, -0.40000000000000002, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.6399998658645112, -0.40000000000000002, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.40000000000000002, nu=0.0000000000000000.
-template <typename Tp>
-void test051()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data051)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data051[i].k), Tp(data051[i].nu),
-                   Tp(data051[i].phi));
-      const Tp f0 = data051[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.40000000000000002, nu=0.10000000000000001.
-testcase_ellint_3<double> data052[] = {
-  { -0.0000000000000000, -0.40000000000000002, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17449806706684673, -0.40000000000000002, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.34880048623856075, -0.40000000000000002, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.52277322065757403, -0.40000000000000002, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.69638072056918376, -0.40000000000000002, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.86968426619831540, -0.40000000000000002, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.0428044206578095, -0.40000000000000002, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.2158651158274378, -0.40000000000000002, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.3889447129893322, -0.40000000000000002, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.5620566886683604, -0.40000000000000002, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.40000000000000002, nu=0.10000000000000001.
-template <typename Tp>
-void test052()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data052)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data052[i].k), Tp(data052[i].nu),
-                   Tp(data052[i].phi));
-      const Tp f0 = data052[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.40000000000000002, nu=0.20000000000000001.
-testcase_ellint_3<double> data053[] = {
-  { -0.0000000000000000, -0.40000000000000002, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17432262290723399, -0.40000000000000002, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34743795258968596, -0.40000000000000002, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.51838919472805123, -0.40000000000000002, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.68663134739057918, -0.40000000000000002, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.85206432981833979, -0.40000000000000002, 0.20000000000000001,
-          0.87266462599716477 },
-  { 1.0149595349004430, -0.40000000000000002, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.1758349405464676, -0.40000000000000002, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.3353337673882635, -0.40000000000000002, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.4941414344266770, -0.40000000000000002, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.40000000000000002, nu=0.20000000000000001.
-template <typename Tp>
-void test053()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data053)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data053[i].k), Tp(data053[i].nu),
-                   Tp(data053[i].phi));
-      const Tp f0 = data053[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.40000000000000002, nu=0.29999999999999999.
-testcase_ellint_3<double> data054[] = {
-  { -0.0000000000000000, -0.40000000000000002, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17414781013591543, -0.40000000000000002, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34609415696777285, -0.40000000000000002, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.51413131295862546, -0.40000000000000002, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.67733527622935630, -0.40000000000000002, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.83558675182733266, -0.40000000000000002, 0.29999999999999999,
-          0.87266462599716477 },
-  { 0.98940140808865906, -0.40000000000000002, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.1396968797728058, -0.40000000000000002, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.2875920037865087, -0.40000000000000002, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.4342789859950078, -0.40000000000000002, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.40000000000000002, nu=0.29999999999999999.
-template <typename Tp>
-void test054()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data054)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data054[i].k), Tp(data054[i].nu),
-                   Tp(data054[i].phi));
-      const Tp f0 = data054[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.40000000000000002, nu=0.40000000000000002.
-testcase_ellint_3<double> data055[] = {
-  { -0.0000000000000000, -0.40000000000000002, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17397362471112710, -0.40000000000000002, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34476864603333196, -0.40000000000000002, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.50999329415379357, -0.40000000000000002, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.66845674551396017, -0.40000000000000002, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.82012848346231748, -0.40000000000000002, 0.40000000000000002,
-          0.87266462599716477 },
-  { 0.96582449258349057, -0.40000000000000002, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.1068473749476286, -0.40000000000000002, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.2447132729159986, -0.40000000000000002, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.3809986210732901, -0.40000000000000002, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.40000000000000002, nu=0.40000000000000002.
-template <typename Tp>
-void test055()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data055)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data055[i].k), Tp(data055[i].nu),
-                   Tp(data055[i].phi));
-      const Tp f0 = data055[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.40000000000000002, nu=0.50000000000000000.
-testcase_ellint_3<double> data056[] = {
-  { -0.0000000000000000, -0.40000000000000002, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17380006262854139, -0.40000000000000002, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34346098216756610, -0.40000000000000002, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.50596929935059420, -0.40000000000000002, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.65996392089131262, -0.40000000000000002, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.80558463511364786, -0.40000000000000002, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.94397834522857704, -0.40000000000000002, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.0768075114108115, -0.40000000000000002, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.2059184624251329, -0.40000000000000002, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.3331797176377398, -0.40000000000000002, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.40000000000000002, nu=0.50000000000000000.
-template <typename Tp>
-void test056()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data056)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data056[i].k), Tp(data056[i].nu),
-                   Tp(data056[i].phi));
-      const Tp f0 = data056[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.40000000000000002, nu=0.59999999999999998.
-testcase_ellint_3<double> data057[] = {
-  { -0.0000000000000000, -0.40000000000000002, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17362711992081248, -0.40000000000000002, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34217074276403953, -0.40000000000000002, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.50205389185761617, -0.40000000000000002, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.65182834920372745, -0.40000000000000002, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.79186512820565136, -0.40000000000000002, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.92365535916287134, -0.40000000000000002, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.0491915663957907, -0.40000000000000002, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.1705934291745104, -0.40000000000000002, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.2899514672527024, -0.40000000000000002, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.40000000000000002, nu=0.59999999999999998.
-template <typename Tp>
-void test057()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data057)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data057[i].k), Tp(data057[i].nu),
-                   Tp(data057[i].phi));
-      const Tp f0 = data057[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.40000000000000002, nu=0.69999999999999996.
-testcase_ellint_3<double> data058[] = {
-  { -0.0000000000000000, -0.40000000000000002, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17345479265712871, -0.40000000000000002, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34089751955950354, -0.40000000000000002, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.49824200167361343, -0.40000000000000002, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.64402450341199413, -0.40000000000000002, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.77889207804122873, -0.40000000000000002, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.90468169720957992, -0.40000000000000002, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.0236847823692916, -0.40000000000000002, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.1382465247425164, -0.40000000000000002, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.2506255923253344, -0.40000000000000002, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.40000000000000002, nu=0.69999999999999996.
-template <typename Tp>
-void test058()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data058)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data058[i].k), Tp(data058[i].nu),
-                   Tp(data058[i].phi));
-      const Tp f0 = data058[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.40000000000000002, nu=0.80000000000000004.
-testcase_ellint_3<double> data059[] = {
-  { -0.0000000000000000, -0.40000000000000002, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17328307694277156, -0.40000000000000002, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.33964091800132007, -0.40000000000000002, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.49452889372467451, -0.40000000000000002, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.63652940095937327, -0.40000000000000002, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.76659772511159097, -0.40000000000000002, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.88691047977338111, -0.40000000000000002, 0.80000000000000004,
-          1.0471975511965976 },
-  { 1.0000273200611638, -0.40000000000000002, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.1084787902188007, -0.40000000000000002, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.2146499565727209, -0.40000000000000002, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.40000000000000002, nu=0.80000000000000004.
-template <typename Tp>
-void test059()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data059)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data059[i].k), Tp(data059[i].nu),
-                   Tp(data059[i].phi));
-      const Tp f0 = data059[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.40000000000000002, nu=0.90000000000000002.
-testcase_ellint_3<double> data060[] = {
-  { -0.0000000000000000, -0.40000000000000002, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17311196891868130, -0.40000000000000002, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.33840055664911906, -0.40000000000000002, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.49091013944075340, -0.40000000000000002, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.62932228186809591, -0.40000000000000002, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.75492278323019801, -0.40000000000000002, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.87021659043854294, -0.40000000000000002, 0.90000000000000002,
-          1.0471975511965976 },
-  { 0.97800245228239246, -0.40000000000000002, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.0809625773173694, -0.40000000000000002, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.1815758115929846, -0.40000000000000002, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.40000000000000002, nu=0.90000000000000002.
-template <typename Tp>
-void test060()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data060)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data060[i].k), Tp(data060[i].nu),
-                   Tp(data060[i].phi));
-      const Tp f0 = data060[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.30000000000000004, nu=0.0000000000000000.
-testcase_ellint_3<double> data061[] = {
-  { -0.0000000000000000, -0.30000000000000004, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17461228653000102, -0.30000000000000004, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.34969146102798415, -0.30000000000000004, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.52565822873726320, -0.30000000000000004, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.70284226512408532, -0.30000000000000004, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.88144139195111182, -0.30000000000000004, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.0614897067260523, -0.30000000000000004, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.2428416824174218, -0.30000000000000004, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.4251795877015925, -0.30000000000000004, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.6080486199305126, -0.30000000000000004, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.30000000000000004, nu=0.0000000000000000.
-template <typename Tp>
-void test061()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data061)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data061[i].k), Tp(data061[i].nu),
-                   Tp(data061[i].phi));
-      const Tp f0 = data061[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.30000000000000004, nu=0.10000000000000001.
-testcase_ellint_3<double> data062[] = {
-  { -0.0000000000000000, -0.30000000000000004, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17443631884814378, -0.30000000000000004, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.34831316835124926, -0.30000000000000004, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.52116586276523857, -0.30000000000000004, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.69269385837910036, -0.30000000000000004, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.86279023163070856, -0.30000000000000004, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.0315321461438265, -0.30000000000000004, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.1991449111869024, -0.30000000000000004, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.3659561780923211, -0.30000000000000004, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.5323534693557526, -0.30000000000000004, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.30000000000000004, nu=0.10000000000000001.
-template <typename Tp>
-void test062()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data062)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data062[i].k), Tp(data062[i].nu),
-                   Tp(data062[i].phi));
-      const Tp f0 = data062[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.30000000000000004, nu=0.20000000000000001.
-testcase_ellint_3<double> data063[] = {
-  { -0.0000000000000000, -0.30000000000000004, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17426098615372090, -0.30000000000000004, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34695402664689923, -0.30000000000000004, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.51680555567038933, -0.30000000000000004, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.68303375225260210, -0.30000000000000004, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.84540662891295026, -0.30000000000000004, 0.20000000000000001,
-          0.87266462599716477 },
-  { 1.0041834051646927, -0.30000000000000004, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.1599952702345711, -0.30000000000000004, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.3137179520499163, -0.30000000000000004, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.4663658145259875, -0.30000000000000004, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.30000000000000004, nu=0.20000000000000001.
-template <typename Tp>
-void test063()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data063)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data063[i].k), Tp(data063[i].nu),
-                   Tp(data063[i].phi));
-      const Tp f0 = data063[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.30000000000000004, nu=0.29999999999999999.
-testcase_ellint_3<double> data064[] = {
-  { -0.0000000000000000, -0.30000000000000004, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17408628437042845, -0.30000000000000004, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34561356761638401, -0.30000000000000004, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.51257058617875850, -0.30000000000000004, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.67382207124602866, -0.30000000000000004, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.82914751587825131, -0.30000000000000004, 0.29999999999999999,
-          0.87266462599716477 },
-  { 0.97907434814374950, -0.30000000000000004, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.1246399297351584, -0.30000000000000004, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.2671793970398146, -0.30000000000000004, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.4081767433479089, -0.30000000000000004, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.30000000000000004, nu=0.29999999999999999.
-template <typename Tp>
-void test064()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data064)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data064[i].k), Tp(data064[i].nu),
-                   Tp(data064[i].phi));
-      const Tp f0 = data064[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.30000000000000004, nu=0.40000000000000002.
-testcase_ellint_3<double> data065[] = {
-  { -0.0000000000000000, -0.30000000000000004, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17391220945982730, -0.30000000000000004, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34429133937639689, -0.30000000000000004, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.50845471668581632, -0.30000000000000004, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.66502347027873854, -0.30000000000000004, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.81389191978012254, -0.30000000000000004, 0.40000000000000002,
-          0.87266462599716477 },
-  { 0.95590618002140593, -0.30000000000000004, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.0924915195213121, -0.30000000000000004, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.2253651604038058, -0.30000000000000004, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.3563643538969761, -0.30000000000000004, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.30000000000000004, nu=0.40000000000000002.
-template <typename Tp>
-void test065()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data065)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data065[i].k), Tp(data065[i].nu),
-                   Tp(data065[i].phi));
-      const Tp f0 = data065[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.30000000000000004, nu=0.50000000000000000.
-testcase_ellint_3<double> data066[] = {
-  { -0.0000000000000000, -0.30000000000000004, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17373875742088235, -0.30000000000000004, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34298690571124157, -0.30000000000000004, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.50445214859646936, -0.30000000000000004, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.65660648352418516, -0.30000000000000004, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.79953670639287289, -0.30000000000000004, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.93443393926588558, -0.30000000000000004, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.0630838369016911, -0.30000000000000004, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.1875197325653026, -0.30000000000000004, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.3098448759814960, -0.30000000000000004, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.30000000000000004, nu=0.50000000000000000.
-template <typename Tp>
-void test066()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data066)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data066[i].k), Tp(data066[i].nu),
-                   Tp(data066[i].phi));
-      const Tp f0 = data066[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.30000000000000004, nu=0.59999999999999998.
-testcase_ellint_3<double> data067[] = {
-  { -0.0000000000000000, -0.30000000000000004, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17356592428950826, -0.30000000000000004, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34169984536697379, -0.30000000000000004, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.50055748266498457, -0.30000000000000004, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.64854298527106768, -0.30000000000000004, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.78599329284207431, -0.30000000000000004, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.91445452089128221, -0.30000000000000004, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.0360412952290587, -0.30000000000000004, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.1530473919778639, -0.30000000000000004, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.2677758800420666, -0.30000000000000004, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.30000000000000004, nu=0.59999999999999998.
-template <typename Tp>
-void test067()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data067)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data067[i].k), Tp(data067[i].nu),
-                   Tp(data067[i].phi));
-      const Tp f0 = data067[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.30000000000000004, nu=0.69999999999999996.
-testcase_ellint_3<double> data068[] = {
-  { -0.0000000000000000, -0.30000000000000004, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17339370613812227, -0.30000000000000004, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34042975138455933, -0.30000000000000004, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.49676568368075985, -0.30000000000000004, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.64080774055753720, -0.30000000000000004, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.77318507779667278, -0.30000000000000004, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.89579782346548631, -0.30000000000000004, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.0110573286052202, -0.30000000000000004, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.1214710972949633, -0.30000000000000004, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.2294913236274980, -0.30000000000000004, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.30000000000000004, nu=0.69999999999999996.
-template <typename Tp>
-void test068()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data068)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data068[i].k), Tp(data068[i].nu),
-                   Tp(data068[i].phi));
-      const Tp f0 = data068[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.30000000000000004, nu=0.80000000000000004.
-testcase_ellint_3<double> data069[] = {
-  { -0.0000000000000000, -0.30000000000000004, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17322209907520361, -0.30000000000000004, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.33917623046949996, -0.30000000000000004, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.49307204894329176, -0.30000000000000004, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.63337802830291723, -0.30000000000000004, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.76104540997689407, -0.30000000000000004, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.87832009635450736, -0.30000000000000004, 0.80000000000000004,
-          1.0471975511965976 },
-  { 0.98787879723171790, -0.30000000000000004, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.0924036340069336, -0.30000000000000004, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.1944567571590046, -0.30000000000000004, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.30000000000000004, nu=0.80000000000000004.
-template <typename Tp>
-void test069()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data069)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data069[i].k), Tp(data069[i].nu),
-                   Tp(data069[i].phi));
-      const Tp f0 = data069[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.30000000000000004, nu=0.90000000000000002.
-testcase_ellint_3<double> data070[] = {
-  { -0.0000000000000000, -0.30000000000000004, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17305109924485948, -0.30000000000000004, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.33793890239556984, -0.30000000000000004, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.48947218005089738, -0.30000000000000004, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.62623332340775151, -0.30000000000000004, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.74951596581511148, -0.30000000000000004, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.86189886597756005, -0.30000000000000004, 0.90000000000000002,
-          1.0471975511965976 },
-  { 0.96629451153092005, -0.30000000000000004, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.0655269133492680, -0.30000000000000004, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.1622376896064912, -0.30000000000000004, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.30000000000000004, nu=0.90000000000000002.
-template <typename Tp>
-void test070()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data070)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data070[i].k), Tp(data070[i].nu),
-                   Tp(data070[i].phi));
-      const Tp f0 = data070[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.6192315188521289e-16
+// mean(f - f_Boost): 3.5249581031848718e-16
+// variance(f - f_Boost): 2.5029385557256515e-31
+// stddev(f - f_Boost): 5.0029376927217987e-16
+const testcase_ellint_3<double>
+data050[10] =
+{
+  { 0.0000000000000000, -0.50000000000000000, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17636918772384180, -0.50000000000000000, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36424950570740700, -0.50000000000000000, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57785404590231426, -0.50000000000000000, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.83806480521716531, -0.50000000000000000, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1798568683069752, -0.50000000000000000, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.6678766243739607, -0.50000000000000000, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.4282976450693483, -0.50000000000000000, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.6810787666126656, -0.50000000000000000, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.5355132096026454, -0.50000000000000000, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler050 = 2.5000000000000020e-13;
+
+// Test data for k=-0.39999999999999991, nu=0.0000000000000000.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.1423314994346225e-16
+// mean(f - f_Boost): 1.9428902930940238e-17
+// variance(f - f_Boost): 2.2263750157116445e-32
+// stddev(f - f_Boost): 1.4921042241450980e-16
+const testcase_ellint_3<double>
+data051[10] =
+{
+  { 0.0000000000000000, -0.39999999999999991, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17467414669441528, -0.39999999999999991, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35018222772483443, -0.39999999999999991, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52729015917508748, -0.39999999999999991, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.70662374407341244, -0.39999999999999991, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.88859210497602159, -0.39999999999999991, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0733136290471381, -0.39999999999999991, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2605612170157066, -0.39999999999999991, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4497513956433439, -0.39999999999999991, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.6399998658645112, -0.39999999999999991, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler051 = 2.5000000000000020e-13;
+
+// Test data for k=-0.39999999999999991, nu=0.10000000000000001.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.8489340395463703e-16
+// mean(f - f_Boost): 6.3837823915946496e-17
+// variance(f - f_Boost): 4.4785242050000272e-32
+// stddev(f - f_Boost): 2.1162523963365114e-16
+const testcase_ellint_3<double>
+data052[10] =
+{
+  { 0.0000000000000000, -0.39999999999999991, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17485086590796767, -0.39999999999999991, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35158366412506992, -0.39999999999999991, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53194731675711726, -0.39999999999999991, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.71740615528010931, -0.39999999999999991, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.90896157773487030, -0.39999999999999991, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1069605483834348, -0.39999999999999991, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3109353428823001, -0.39999999999999991, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5195460789903448, -0.39999999999999991, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7306968836847187, -0.39999999999999991, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler052 = 2.5000000000000020e-13;
+
+// Test data for k=-0.39999999999999991, nu=0.20000000000000001.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.0467985583872730e-16
+// mean(f - f_Boost): 8.6042284408449634e-17
+// variance(f - f_Boost): 1.5826864298542218e-32
+// stddev(f - f_Boost): 1.2580486595733180e-16
+const testcase_ellint_3<double>
+data053[10] =
+{
+  { 0.0000000000000000, -0.39999999999999991, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17502822886437389, -0.39999999999999991, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35300530062530805, -0.39999999999999991, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53675259548210896, -0.39999999999999991, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72878006428676934, -0.39999999999999991, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.93100219010583563, -0.39999999999999991, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1443487271187609, -0.39999999999999991, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3683427764108813, -0.39999999999999991, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6008221459300933, -0.39999999999999991, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8380358826317627, -0.39999999999999991, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler053 = 2.5000000000000020e-13;
+
+// Test data for k=-0.39999999999999991, nu=0.30000000000000004.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 2.9973414591826100e-16
+// mean(f - f_Boost): 8.6042284408449634e-17
+// variance(f - f_Boost): 1.5826864298542218e-32
+// stddev(f - f_Boost): 1.2580486595733180e-16
+const testcase_ellint_3<double>
+data054[10] =
+{
+  { 0.0000000000000000, -0.39999999999999991, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17520623975982899, -0.39999999999999991, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35444766141612105, -0.39999999999999991, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.54171455841536009, -0.39999999999999991, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.74080517001084012, -0.39999999999999991, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.95496950509296563, -0.39999999999999991, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.1862627879844718, -0.39999999999999991, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.4346501803799458, -0.39999999999999991, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.6971744798077697, -0.39999999999999991, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 1.9677924132520139, -0.39999999999999991, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler054 = 2.5000000000000020e-13;
+
+// Test data for k=-0.39999999999999991, nu=0.40000000000000002.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.2577246923979600e-16
+// mean(f - f_Boost): 1.8596235662471373e-16
+// variance(f - f_Boost): 1.6222417021441306e-31
+// stddev(f - f_Boost): 4.0277061736727151e-16
+const testcase_ellint_3<double>
+data055[10] =
+{
+  { 0.0000000000000000, -0.39999999999999991, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17538490283034375, -0.39999999999999991, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35591129064319948, -0.39999999999999991, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54684250413264535, -0.39999999999999991, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.75355027742668290, -0.39999999999999991, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.98117935026780634, -0.39999999999999991, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2337464222030734, -0.39999999999999991, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.5125183419289221, -0.39999999999999991, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.8140224451130311, -0.39999999999999991, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.1289968719280026, -0.39999999999999991, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler055 = 2.5000000000000020e-13;
+
+// Test data for k=-0.39999999999999991, nu=0.50000000000000000.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.8009196014748294e-16
+// mean(f - f_Boost): 1.6375789613221060e-16
+// variance(f - f_Boost): 6.4788283329186610e-32
+// stddev(f - f_Boost): 2.5453542647181080e-16
+const testcase_ellint_3<double>
+data056[10] =
+{
+  { 0.0000000000000000, -0.39999999999999991, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17556422235224273, -0.39999999999999991, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35739675341763921, -0.39999999999999991, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55214655195037188, -0.39999999999999991, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.76709520942047438, -0.39999999999999991, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0100278761577499, -0.39999999999999991, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2882265661384342, -0.39999999999999991, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.6059059780051874, -0.39999999999999991, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.9600182740224081, -0.39999999999999991, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.3367461373176508, -0.39999999999999991, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler056 = 2.5000000000000020e-13;
+
+// Test data for k=-0.39999999999999991, nu=0.60000000000000009.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 2.8411408870840790e-16
+// mean(f - f_Boost): 9.7144514654701197e-17
+// variance(f - f_Boost): 1.4860570558543486e-32
+// stddev(f - f_Boost): 1.2190393988113545e-16
+const testcase_ellint_3<double>
+data057[10] =
+{
+  { 0.0000000000000000, -0.39999999999999991, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17574420264267029, -0.39999999999999991, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.35890463689046265, -0.39999999999999991, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.55763773975194486, -0.39999999999999991, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.78153324227761267, -0.39999999999999991, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0420205885765887, -0.39999999999999991, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.3517205230381770, -0.39999999999999991, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.7210360970313896, -0.39999999999999991, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.1500780510169242, -0.39999999999999991, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 2.6186940209850191, -0.39999999999999991, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler057 = 2.5000000000000020e-13;
+
+// Test data for k=-0.39999999999999991, nu=0.70000000000000007.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.1553900340611668e-16
+// mean(f - f_Boost): 1.1657341758564144e-16
+// variance(f - f_Boost): 1.3242789405258207e-32
+// stddev(f - f_Boost): 1.1507731924779187e-16
+const testcase_ellint_3<double>
+data058[10] =
+{
+  { 0.0000000000000000, -0.39999999999999991, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17592484806010436, -0.39999999999999991, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.36043555139631439, -0.39999999999999991, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.56332813669944881, -0.39999999999999991, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.79697424562157548, -0.39999999999999991, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.0778155987523672, -0.39999999999999991, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.4272018169896268, -0.39999999999999991, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 1.8684377907453380, -0.39999999999999991, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.4128677409207469, -0.39999999999999991, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 3.0327078743873241, -0.39999999999999991, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler058 = 2.5000000000000020e-13;
+
+// Test data for k=-0.39999999999999991, nu=0.80000000000000004.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.5727642219519274e-16
+// mean(f - f_Boost): 2.1926904736346843e-16
+// variance(f - f_Boost): 1.5293405480859847e-31
+// stddev(f - f_Boost): 3.9106783913868252e-16
+const testcase_ellint_3<double>
+data059[10] =
+{
+  { 0.0000000000000000, -0.39999999999999991, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17610616300487833, -0.39999999999999991, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36199013167171978, -0.39999999999999991, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56923097361842423, -0.39999999999999991, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.81354878456624347, -0.39999999999999991, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1182902719261825, -0.39999999999999991, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.5192950589409022, -0.39999999999999991, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.0678761710223981, -0.39999999999999991, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.8135222249879783, -0.39999999999999991, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.7289548002199902, -0.39999999999999991, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler059 = 2.5000000000000020e-13;
+
+// Test data for k=-0.39999999999999991, nu=0.90000000000000002.
+// max(|f - f_Boost|): 2.6645352591003757e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.0221626338023938e-16
+// mean(f - f_Boost): 4.1910919179599658e-16
+// variance(f - f_Boost): 6.2246150910247033e-31
+// stddev(f - f_Boost): 7.8896229891070860e-16
+const testcase_ellint_3<double>
+data060[10] =
+{
+  { 0.0000000000000000, -0.39999999999999991, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17628815191971123, -0.39999999999999991, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36356903815378772, -0.39999999999999991, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57536079447000310, -0.39999999999999991, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.83141355850172571, -0.39999999999999991, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1646481598721361, -0.39999999999999991, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.6357275034001995, -0.39999999999999991, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.3628787566572398, -0.39999999999999991, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.5521010369134958, -0.39999999999999991, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.3055535102872513, -0.39999999999999991, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler060 = 2.5000000000000020e-13;
+
+// Test data for k=-0.29999999999999993, nu=0.0000000000000000.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.2241249691539529e-16
+// mean(f - f_Boost): 4.9960036108132046e-17
+// variance(f - f_Boost): 4.6872855002064458e-32
+// stddev(f - f_Boost): 2.1650139722889657e-16
+const testcase_ellint_3<double>
+data061[10] =
+{
+  { 0.0000000000000000, -0.29999999999999993, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17461228653000099, -0.29999999999999993, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.34969146102798421, -0.29999999999999993, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52565822873726309, -0.29999999999999993, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.70284226512408543, -0.29999999999999993, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.88144139195111171, -0.29999999999999993, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0614897067260520, -0.29999999999999993, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2428416824174220, -0.29999999999999993, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4251795877015929, -0.29999999999999993, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.6080486199305126, -0.29999999999999993, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler061 = 2.5000000000000020e-13;
+
+// Test data for k=-0.29999999999999993, nu=0.10000000000000001.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.1872304407982844e-16
+// mean(f - f_Boost): 9.4368957093138303e-17
+// variance(f - f_Boost): 4.0359883022230488e-32
+// stddev(f - f_Boost): 2.0089769292411121e-16
+const testcase_ellint_3<double>
+data062[10] =
+{
+  { 0.0000000000000000, -0.29999999999999993, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17478889331392972, -0.29999999999999993, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35108939018329183, -0.29999999999999993, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53028990896115835, -0.29999999999999993, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.71352417052371409, -0.29999999999999993, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.90153086032405894, -0.29999999999999993, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.0945187977283313, -0.29999999999999993, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.2920699268385680, -0.29999999999999993, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.4931243665896394, -0.29999999999999993, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.6960848815118226, -0.29999999999999993, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler062 = 2.5000000000000020e-13;
+
+// Test data for k=-0.29999999999999993, nu=0.20000000000000001.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.2247497610332889e-16
+// mean(f - f_Boost): 1.1102230246251565e-16
+// variance(f - f_Boost): 3.8043060629871325e-32
+// stddev(f - f_Boost): 1.9504630380981672e-16
+const testcase_ellint_3<double>
+data063[10] =
+{
+  { 0.0000000000000000, -0.29999999999999993, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17496614335337535, -0.29999999999999993, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35250745937139372, -0.29999999999999993, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53506875002836884, -0.29999999999999993, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72479106622248191, -0.29999999999999993, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.92326451535891607, -0.29999999999999993, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1312092060698349, -0.29999999999999993, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3481473154592321, -0.29999999999999993, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5722049569662748, -0.29999999999999993, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8002173372290498, -0.29999999999999993, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler063 = 2.5000000000000020e-13;
+
+// Test data for k=-0.29999999999999993, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.1678685180047551e-16
+// mean(f - f_Boost): 1.0547118733938987e-16
+// variance(f - f_Boost): 7.5633408838247182e-32
+// stddev(f - f_Boost): 2.7501528837184157e-16
+const testcase_ellint_3<double>
+data064[10] =
+{
+  { 0.0000000000000000, -0.29999999999999993, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17514404084107435, -0.29999999999999993, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35394619108645647, -0.29999999999999993, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.54000325463372689, -0.29999999999999993, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.73670193794067651, -0.29999999999999993, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.94689345491722177, -0.29999999999999993, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.1723274608389140, -0.29999999999999993, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.4128880552936287, -0.29999999999999993, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.6659010047449661, -0.29999999999999993, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 1.9260216862473254, -0.29999999999999993, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler064 = 2.5000000000000020e-13;
+
+// Test data for k=-0.29999999999999993, nu=0.40000000000000002.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.3983279132797385e-16
+// mean(f - f_Boost): 1.1657341758564144e-16
+// variance(f - f_Boost): 1.8245832308692586e-31
+// stddev(f - f_Boost): 4.2715140534349863e-16
+const testcase_ellint_3<double>
+data065[10] =
+{
+  { 0.0000000000000000, -0.29999999999999993, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17532259000954434, -0.29999999999999993, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35540612770983693, -0.29999999999999993, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54510265552938919, -0.29999999999999993, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.74932476310965057, -0.29999999999999993, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.97272793583093109, -0.29999999999999993, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2188928987074241, -0.29999999999999993, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.4888771674085941, -0.29999999999999993, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.7794558498219191, -0.29999999999999993, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.0822121773175528, -0.29999999999999993, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler065 = 2.5000000000000020e-13;
+
+// Test data for k=-0.29999999999999993, nu=0.50000000000000000.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.0516138451673425e-16
+// mean(f - f_Boost): 4.7184478546569152e-17
+// variance(f - f_Boost): 1.9448563670505968e-32
+// stddev(f - f_Boost): 1.3945810722401896e-16
+const testcase_ellint_3<double>
+data066[10] =
+{
+  { 0.0000000000000000, -0.29999999999999993, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17550179513158179, -0.29999999999999993, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35688783251681200, -0.29999999999999993, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55037700010142798, -0.29999999999999993, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.76273839789895992, -0.29999999999999993, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0011570518830419, -0.29999999999999993, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2722987414055109, -0.29999999999999993, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5799590511080066, -0.29999999999999993, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.9212367220124293, -0.29999999999999993, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2833505881933971, -0.29999999999999993, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler066 = 2.5000000000000020e-13;
+
+// Test data for k=-0.29999999999999993, nu=0.60000000000000009.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.2121157428443725e-16
+// mean(f - f_Boost): 1.9428902930940239e-16
+// variance(f - f_Boost): 1.5987596229703424e-31
+// stddev(f - f_Boost): 3.9984492281012430e-16
+const testcase_ellint_3<double>
+data067[10] =
+{
+  { 0.0000000000000000, -0.29999999999999993, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17568166052076745, -0.29999999999999993, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.35839189074731181, -0.29999999999999993, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.55583724744367558, -0.29999999999999993, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.77703498090888223, -0.29999999999999993, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0326772113675962, -0.29999999999999993, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.3345139983717369, -0.29999999999999993, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.6921742922838403, -0.29999999999999993, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.1056608968472186, -0.29999999999999993, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 2.5560975528589061, -0.29999999999999993, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler067 = 2.5000000000000020e-13;
+
+// Test data for k=-0.29999999999999993, nu=0.70000000000000007.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.0088945789059381e-16
+// mean(f - f_Boost): 1.6653345369377348e-16
+// variance(f - f_Boost): 3.1994213989721786e-31
+// stddev(f - f_Boost): 5.6563428104846852e-16
+const testcase_ellint_3<double>
+data068[10] =
+{
+  { 0.0000000000000000, -0.29999999999999993, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17586219053197988, -0.29999999999999993, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.35991891074557669, -0.29999999999999993, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.56149538019961731, -0.29999999999999993, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.79232303189667685, -0.29999999999999993, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.0679345542878826, -0.29999999999999993, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.4084400085913955, -0.29999999999999993, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 1.8357382859296454, -0.29999999999999993, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.3604197996171519, -0.29999999999999993, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 2.9562123549913872, -0.29999999999999993, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler068 = 2.5000000000000020e-13;
+
+// Test data for k=-0.29999999999999993, nu=0.80000000000000004.
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.1197887707781618e-16
+// mean(f - f_Boost): 3.4416913763379854e-16
+// variance(f - f_Boost): 4.3461914185990199e-31
+// stddev(f - f_Boost): 6.5925650687718054e-16
+const testcase_ellint_3<double>
+data069[10] =
+{
+  { 0.0000000000000000, -0.29999999999999993, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17604338956191670, -0.29999999999999993, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36146952517410791, -0.29999999999999993, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56736453393774644, -0.29999999999999993, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.80873149979001091, -0.29999999999999993, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1077903069860620, -0.29999999999999993, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.4985874311132998, -0.29999999999999993, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.0298167266724954, -0.29999999999999993, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.7483929054985432, -0.29999999999999993, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.6283050484567170, -0.29999999999999993, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler069 = 2.5000000000000020e-13;
+
+// Test data for k=-0.29999999999999993, nu=0.90000000000000002.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.1301806687926828e-16
+// mean(f - f_Boost): 4.1633363423443370e-16
+// variance(f - f_Boost): 2.2835347143080263e-31
+// stddev(f - f_Boost): 4.7786344433405093e-16
+const testcase_ellint_3<double>
+data070[10] =
+{
+  { 0.0000000000000000, -0.29999999999999993, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17622526204962433, -0.29999999999999993, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36304439230777141, -0.29999999999999993, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57345914744719195, -0.29999999999999993, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.82641512928845162, -0.29999999999999993, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1534256210757743, -0.29999999999999993, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.6124900353411677, -0.29999999999999993, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.3165905514845089, -0.29999999999999993, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.4625619526539824, -0.29999999999999993, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.1479514944016787, -0.29999999999999993, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler070 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996, nu=0.0000000000000000.
-testcase_ellint_3<double> data071[] = {
-  { -0.0000000000000000, -0.19999999999999996, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17456817290292811, -0.19999999999999996, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.34934315932086801, -0.19999999999999996, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.52450880529443988, -0.19999999999999996, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.70020491009844910, -0.19999999999999996, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.87651006649967955, -0.19999999999999996, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.0534305870298994, -0.19999999999999996, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.2308975521670784, -0.19999999999999996, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.4087733584990738, -0.19999999999999996, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.5868678474541664, -0.19999999999999996, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.19999999999999996, nu=0.0000000000000000.
-template <typename Tp>
-void test071()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data071)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data071[i].k), Tp(data071[i].nu),
-                   Tp(data071[i].phi));
-      const Tp f0 = data071[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.2156475739151676e-16
+// mean(f - f_Boost): -5.2735593669694933e-17
+// variance(f - f_Boost): 3.0473442641042680e-32
+// stddev(f - f_Boost): 1.7456644190978597e-16
+const testcase_ellint_3<double>
+data071[10] =
+{
+  { 0.0000000000000000, -0.19999999999999996, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17456817290292806, -0.19999999999999996, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.34934315932086796, -0.19999999999999996, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52450880529443988, -0.19999999999999996, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.70020491009844887, -0.19999999999999996, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.87651006649967977, -0.19999999999999996, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0534305870298994, -0.19999999999999996, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2308975521670789, -0.19999999999999996, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4087733584990738, -0.19999999999999996, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.5868678474541662, -0.19999999999999996, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler071 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996, nu=0.10000000000000001.
-testcase_ellint_3<double> data072[] = {
-  { -0.0000000000000000, -0.19999999999999996, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17439228502691750, -0.19999999999999996, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.34796731137565740, -0.19999999999999996, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.52003370294544848, -0.19999999999999996, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.69012222258631495, -0.19999999999999996, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.85803491465566772, -0.19999999999999996, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.0238463961099364, -0.19999999999999996, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.1878691059202153, -0.19999999999999996, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.3505985031831940, -0.19999999999999996, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.5126513474261092, -0.19999999999999996, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.19999999999999996, nu=0.10000000000000001.
-template <typename Tp>
-void test072()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data072)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data072[i].k), Tp(data072[i].nu),
-                   Tp(data072[i].phi));
-      const Tp f0 = data072[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.0890622182605400e-16
+// mean(f - f_Boost): -3.8857805861880476e-17
+// variance(f - f_Boost): 2.8794792590749608e-32
+// stddev(f - f_Boost): 1.6969028431454054e-16
+const testcase_ellint_3<double>
+data072[10] =
+{
+  { 0.0000000000000000, -0.19999999999999996, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17474469953608965, -0.19999999999999996, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35073860234984255, -0.19999999999999996, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.52912258712951521, -0.19999999999999996, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.71081701558898069, -0.19999999999999996, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.89640758521169384, -0.19999999999999996, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.0860417038089853, -0.19999999999999996, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.2793599255528623, -0.19999999999999996, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.4754938544089076, -0.19999999999999996, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.6731552050562593, -0.19999999999999996, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler072 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996, nu=0.20000000000000001.
-testcase_ellint_3<double> data073[] = {
-  { -0.0000000000000000, -0.19999999999999996, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17421703179583750, -0.19999999999999996, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34661057411998791, -0.19999999999999996, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.51569006052647393, -0.19999999999999996, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.68052412821107278, -0.19999999999999996, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.84081341263313825, -0.19999999999999996, 0.20000000000000001,
-          0.87266462599716477 },
-  { 0.99683359988842890, -0.19999999999999996, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.1493086715118852, -0.19999999999999996, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.2992699693957541, -0.19999999999999996, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.4479323932249568, -0.19999999999999996, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.19999999999999996, nu=0.20000000000000001.
-template <typename Tp>
-void test073()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data073)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data073[i].k), Tp(data073[i].nu),
-                   Tp(data073[i].phi));
-      const Tp f0 = data073[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.19999999999999996, nu=0.29999999999999999.
-testcase_ellint_3<double> data074[] = {
-  { -0.0000000000000000, -0.19999999999999996, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17404240913577707, -0.19999999999999996, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34527248032587193, -0.19999999999999996, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.51147118981668416, -0.19999999999999996, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.67137107867777635, -0.19999999999999996, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.82470418188668893, -0.19999999999999996, 0.29999999999999999,
-          0.87266462599716477 },
-  { 0.97202873223594299, -0.19999999999999996, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.1144773569375266, -0.19999999999999996, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.2535292433701000, -0.19999999999999996, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.3908453514752481, -0.19999999999999996, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.19999999999999996, nu=0.29999999999999999.
-template <typename Tp>
-void test074()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data074)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data074[i].k), Tp(data074[i].nu),
-                   Tp(data074[i].phi));
-      const Tp f0 = data074[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 3.9570963716579749e-16
+// mean(f - f_Boost): -5.8286708792820721e-17
+// variance(f - f_Boost): 3.1158217732380362e-32
+// stddev(f - f_Boost): 1.7651690494788412e-16
+const testcase_ellint_3<double>
+data073[10] =
+{
+  { 0.0000000000000000, -0.19999999999999996, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17492186907740698, -0.19999999999999996, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35215414286134267, -0.19999999999999996, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53388285615182440, -0.19999999999999996, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72200960282688265, -0.19999999999999996, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.91793087614428526, -0.19999999999999996, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1222602841587976, -0.19999999999999996, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3345489407496247, -0.19999999999999996, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5531225705475502, -0.19999999999999996, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7751816279738935, -0.19999999999999996, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler073 = 2.5000000000000020e-13;
+
+// Test data for k=-0.19999999999999996, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.6785817924053817e-16
+// mean(f - f_Boost): -1.1102230246251566e-17
+// variance(f - f_Boost): 9.9840208317034302e-32
+// stddev(f - f_Boost): 3.1597501217190311e-16
+const testcase_ellint_3<double>
+data074[10] =
+{
+  { 0.0000000000000000, -0.19999999999999996, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17509968571715159, -0.19999999999999996, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35359030214835629, -0.19999999999999996, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.53879807274537084, -0.19999999999999996, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.73384116418059731, -0.19999999999999996, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.94132799329524031, -0.19999999999999996, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.1628407021801439, -0.19999999999999996, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.3982440216739438, -0.19999999999999996, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.6450634983653640, -0.19999999999999996, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 1.8983924169967099, -0.19999999999999996, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler074 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996, nu=0.40000000000000002.
-testcase_ellint_3<double> data075[] = {
-  { -0.0000000000000000, -0.19999999999999996, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17386841301066677, -0.19999999999999996, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34395257914113253, -0.19999999999999996, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.50737088376869466, -0.19999999999999996, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.66262801717277664, -0.19999999999999996, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.80958766645079094, -0.19999999999999996, 0.40000000000000002,
-          0.87266462599716477 },
-  { 0.94913754236162040, -0.19999999999999996, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.0827985514223000, -0.19999999999999996, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.2124212429050478, -0.19999999999999996, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.3400002519661010, -0.19999999999999996, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.19999999999999996, nu=0.40000000000000002.
-template <typename Tp>
-void test075()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data075)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data075[i].k), Tp(data075[i].nu),
-                   Tp(data075[i].phi));
-      const Tp f0 = data075[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3298410018355870e-16
+// mean(f - f_Boost): 1.3877787807814457e-17
+// variance(f - f_Boost): 9.4370567274974557e-32
+// stddev(f - f_Boost): 3.0719792850046133e-16
+const testcase_ellint_3<double>
+data075[10] =
+{
+  { 0.0000000000000000, -0.19999999999999996, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17527815368535152, -0.19999999999999996, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35504762134297801, -0.19999999999999996, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54387742353211344, -0.19999999999999996, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.74637910471804259, -0.19999999999999996, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.96690539714174639, -0.19999999999999996, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2087859420184757, -0.19999999999999996, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.4729799844168852, -0.19999999999999996, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.7564445064596661, -0.19999999999999996, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.0512956926676802, -0.19999999999999996, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler075 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996, nu=0.50000000000000000.
-testcase_ellint_3<double> data076[] = {
-  { -0.0000000000000000, -0.19999999999999996, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17369503942181802, -0.19999999999999996, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34265043534362660, -0.19999999999999996, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.50338337208655415, -0.19999999999999996, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.65426373297163642, -0.19999999999999996, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.79536193036145808, -0.19999999999999996, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.92791875910061605, -0.19999999999999996, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.0538145052725829, -0.19999999999999996, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.1752060022875899, -0.19999999999999996, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.2943374404397376, -0.19999999999999996, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.19999999999999996, nu=0.50000000000000000.
-template <typename Tp>
-void test076()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data076)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data076[i].k), Tp(data076[i].nu),
-                   Tp(data076[i].phi));
-      const Tp f0 = data076[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.19999999999999996, nu=0.59999999999999998.
-testcase_ellint_3<double> data077[] = {
-  { -0.0000000000000000, -0.19999999999999996, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17352228440746928, -0.19999999999999996, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34136562863713626, -0.19999999999999996, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.49950328177638481, -0.19999999999999996, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.64625032705690832, -0.19999999999999996, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.78193941198403094, -0.19999999999999996, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.90817230934317128, -0.19999999999999996, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.0271563751276462, -0.19999999999999996, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.1412999379040518, -0.19999999999999996, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.2530330675914561, -0.19999999999999996, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.19999999999999996, nu=0.59999999999999998.
-template <typename Tp>
-void test077()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data077)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data077[i].k), Tp(data077[i].nu),
-                   Tp(data077[i].phi));
-      const Tp f0 = data077[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.19999999999999996, nu=0.69999999999999996.
-testcase_ellint_3<double> data078[] = {
-  { -0.0000000000000000, -0.19999999999999996, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17335014404233898, -0.19999999999999996, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34009775298617811, -0.19999999999999996, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.49572560201923810, -0.19999999999999996, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.63856276669886525, -0.19999999999999996, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.76924438644867565, -0.19999999999999996, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.88973060843856466, -0.19999999999999996, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.0025230471636377, -0.19999999999999996, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.1102356376093103, -0.19999999999999996, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.2154356555075867, -0.19999999999999996, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.19999999999999996, nu=0.69999999999999996.
-template <typename Tp>
-void test078()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data078)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data078[i].k), Tp(data078[i].nu),
-                   Tp(data078[i].phi));
-      const Tp f0 = data078[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3841806057292116e-16
+// mean(f - f_Boost): 8.0491169285323847e-17
+// variance(f - f_Boost): 8.0538110429953348e-32
+// stddev(f - f_Boost): 2.8379237204328335e-16
+const testcase_ellint_3<double>
+data076[10] =
+{
+  { 0.0000000000000000, -0.19999999999999996, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17545727725228877, -0.19999999999999996, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35652666242062175, -0.19999999999999996, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.54913090549102406, -0.19999999999999996, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.75970161209211551, -0.19999999999999996, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.99504737401590326, -0.19999999999999996, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2614666007124373, -0.19999999999999996, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5625255355205496, -0.19999999999999996, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.8954460255613343, -0.19999999999999996, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2481046259421302, -0.19999999999999996, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler076 = 2.5000000000000020e-13;
+
+// Test data for k=-0.19999999999999996, nu=0.60000000000000009.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.5317584994994743e-16
+// mean(f - f_Boost): -1.3877787807814457e-17
+// variance(f - f_Boost): 1.0045745697575397e-31
+// stddev(f - f_Boost): 3.1695024369095219e-16
+const testcase_ellint_3<double>
+data077[10] =
+{
+  { 0.0000000000000000, -0.19999999999999996, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17563706072900442, -0.19999999999999996, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.35802800926807238, -0.19999999999999996, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.55456942250515051, -0.19999999999999996, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.77390003828438203, -0.19999999999999996, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0262441366366397, -0.19999999999999996, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.3228192988439669, -0.19999999999999996, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.6728005754680795, -0.19999999999999996, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.0761587107468511, -0.19999999999999996, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 2.5148333891629315, -0.19999999999999996, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler077 = 2.5000000000000020e-13;
+
+// Test data for k=-0.19999999999999996, nu=0.70000000000000007.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.1818454249546518e-16
+// mean(f - f_Boost): 3.6082248300317589e-17
+// variance(f - f_Boost): 8.9638010532618564e-32
+// stddev(f - f_Boost): 2.9939607634806868e-16
+const testcase_ellint_3<double>
+data078[10] =
+{
+  { 0.0000000000000000, -0.19999999999999996, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17581750846781172, -0.19999999999999996, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.35955226882028513, -0.19999999999999996, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.56020489659466499, -0.19999999999999996, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.78908196988531487, -0.19999999999999996, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.0611336754143517, -0.19999999999999996, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.3956969951058884, -0.19999999999999996, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 1.8138131612209609, -0.19999999999999996, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.3256365528879561, -0.19999999999999996, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 2.9058704854500963, -0.19999999999999996, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler078 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996, nu=0.80000000000000004.
-testcase_ellint_3<double> data079[] = {
-  { -0.0000000000000000, -0.19999999999999996, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17317861443718541, -0.19999999999999996, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.33884641598718701, -0.19999999999999996, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.49204565281259494, -0.19999999999999996, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.63117851188220353, -0.19999999999999996, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.75721095949544170, -0.19999999999999996, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.87245201443919118, -0.19999999999999996, 0.80000000000000004,
-          1.0471975511965976 },
-  { 0.97966584238831089, -0.19999999999999996, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.0816336325174360, -0.19999999999999996, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.1810223448909913, -0.19999999999999996, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.19999999999999996, nu=0.80000000000000004.
-template <typename Tp>
-void test079()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data079)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data079[i].k), Tp(data079[i].nu),
-                   Tp(data079[i].phi));
-      const Tp f0 = data079[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.9866614515542431e-16
+// mean(f - f_Boost): 1.8318679906315082e-16
+// variance(f - f_Boost): 3.1335688610218711e-31
+// stddev(f - f_Boost): 5.5978289193417400e-16
+const testcase_ellint_3<double>
+data079[10] =
+{
+  { 0.0000000000000000, -0.19999999999999996, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17599862486281712, -0.19999999999999996, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36110007227128776, -0.19999999999999996, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56605039658567224, -0.19999999999999996, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.80537523874517691, -0.19999999999999996, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1005662342414086, -0.19999999999999996, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.4845340298105778, -0.19999999999999996, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.0043332244969392, -0.19999999999999996, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.7052856676744761, -0.19999999999999996, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.5622166386422629, -0.19999999999999996, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler079 = 2.5000000000000020e-13;
 
 // Test data for k=-0.19999999999999996, nu=0.90000000000000002.
-testcase_ellint_3<double> data080[] = {
-  { -0.0000000000000000, -0.19999999999999996, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17300769173837280, -0.19999999999999996, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.33761123827372508, -0.19999999999999996, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.48845905690769426, -0.19999999999999996, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.62407720017324986, -0.19999999999999996, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.74578146525124289, -0.19999999999999996, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.85621583540073076, -0.19999999999999996, 0.90000000000000002,
-          1.0471975511965976 },
-  { 0.95837725988001199, -0.19999999999999996, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.0551821412633928, -0.19999999999999996, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.1493679916141863, -0.19999999999999996, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.19999999999999996, nu=0.90000000000000002.
-template <typename Tp>
-void test080()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data080)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data080[i].k), Tp(data080[i].nu),
-                   Tp(data080[i].phi));
-      const Tp f0 = data080[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.6645352591003757e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.2817178727913890e-16
+// mean(f - f_Boost): 3.4694469519536142e-16
+// variance(f - f_Boost): 6.6311432369155086e-31
+// stddev(f - f_Boost): 8.1431831840598485e-16
+const testcase_ellint_3<double>
+data080[10] =
+{
+  { 0.0000000000000000, -0.19999999999999996, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17618041435044951, -0.19999999999999996, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36267207636502929, -0.19999999999999996, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57212028758237743, -0.19999999999999996, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.82293323876704483, -0.19999999999999996, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1457077279880385, -0.19999999999999996, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.5967346899325681, -0.19999999999999996, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.2856537353421724, -0.19999999999999996, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.4034714304613902, -0.19999999999999996, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.0448269356200361, -0.19999999999999996, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler080 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978, nu=0.0000000000000000.
-testcase_ellint_3<double> data081[] = {
-  { -0.0000000000000000, -0.099999999999999978, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17454173353063665, -0.099999999999999978, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.34913506721468085, -0.099999999999999978, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.52382550016538953, -0.099999999999999978, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.69864700854177031, -0.099999999999999978, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.87361792586964870, -0.099999999999999978, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.0487386319621685, -0.099999999999999978, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.2239913752078757, -0.099999999999999978, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.3993423113684049, -0.099999999999999978, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.5747455615173562, -0.099999999999999978, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.099999999999999978, nu=0.0000000000000000.
-template <typename Tp>
-void test081()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data081)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data081[i].k), Tp(data081[i].nu),
-                   Tp(data081[i].phi));
-      const Tp f0 = data081[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.1735566504509645e-16
+// mean(f - f_Boost): -3.6082248300317589e-17
+// variance(f - f_Boost): 8.2258607846939269e-33
+// stddev(f - f_Boost): 9.0696531271564778e-17
+const testcase_ellint_3<double>
+data081[10] =
+{
+  { 0.0000000000000000, -0.099999999999999978, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17454173353063662, -0.099999999999999978, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.34913506721468096, -0.099999999999999978, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52382550016538953, -0.099999999999999978, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.69864700854177020, -0.099999999999999978, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.87361792586964859, -0.099999999999999978, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0487386319621685, -0.099999999999999978, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2239913752078759, -0.099999999999999978, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.3993423113684051, -0.099999999999999978, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.5747455615173558, -0.099999999999999978, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler081 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978, nu=0.10000000000000001.
-testcase_ellint_3<double> data082[] = {
-  { -0.0000000000000000, -0.099999999999999978, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17436589347616618, -0.099999999999999978, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.34776067871237354, -0.099999999999999978, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.51936064354727807, -0.099999999999999978, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.68860303749364360, -0.099999999999999978, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.85524561882332051, -0.099999999999999978, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.0193708301908337, -0.099999999999999978, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.1813474067123044, -0.099999999999999978, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.3417670770424983, -0.099999999999999978, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.5013711111199950, -0.099999999999999978, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.099999999999999978, nu=0.10000000000000001.
-template <typename Tp>
-void test082()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data082)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data082[i].k), Tp(data082[i].nu),
-                   Tp(data082[i].phi));
-      const Tp f0 = data082[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.0305747373482148e-16
+// mean(f - f_Boost): -3.0531133177191807e-17
+// variance(f - f_Boost): 1.1508025840536076e-34
+// stddev(f - f_Boost): 1.0727546709539920e-17
+const testcase_ellint_3<double>
+data082[10] =
+{
+  { 0.0000000000000000, -0.099999999999999978, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17471821213559732, -0.099999999999999978, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35052902610011138, -0.099999999999999978, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.52842865990255727, -0.099999999999999978, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.70921799731166713, -0.099999999999999978, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.89340330535868662, -0.099999999999999978, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.0811075784236857, -0.099999999999999978, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.2720133232666426, -0.099999999999999978, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.4653630031861395, -0.099999999999999978, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.6600374067558428, -0.099999999999999978, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler082 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978, nu=0.20000000000000001.
-testcase_ellint_3<double> data083[] = {
-  { -0.0000000000000000, -0.099999999999999978, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17419068786141345, -0.099999999999999978, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34640537686230127, -0.099999999999999978, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.51502689171753957, -0.099999999999999978, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.67904147863672726, -0.099999999999999978, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.83811885126105179, -0.099999999999999978, 0.20000000000000001,
-          0.87266462599716477 },
-  { 0.99255278555742810, -0.099999999999999978, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.1431260546194930, -0.099999999999999978, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.2909589656532101, -0.099999999999999978, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.4373749386463430, -0.099999999999999978, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.099999999999999978, nu=0.20000000000000001.
-template <typename Tp>
-void test083()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data083)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data083[i].k), Tp(data083[i].nu),
-                   Tp(data083[i].phi));
-      const Tp f0 = data083[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.099999999999999978, nu=0.29999999999999999.
-testcase_ellint_3<double> data084[] = {
-  { -0.0000000000000000, -0.099999999999999978, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17401611261390110, -0.099999999999999978, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34506869507511767, -0.099999999999999978, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.51081757604259870, -0.099999999999999978, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.66992297597712303, -0.099999999999999978, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.82209722856174228, -0.099999999999999978, 0.29999999999999999,
-          0.87266462599716477 },
-  { 0.96792430487669612, -0.099999999999999978, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.1085964108954092, -0.099999999999999978, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.2456748370836999, -0.099999999999999978, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.3809159606704959, -0.099999999999999978, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.099999999999999978, nu=0.29999999999999999.
-template <typename Tp>
-void test084()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data084)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data084[i].k), Tp(data084[i].nu),
-                   Tp(data084[i].phi));
-      const Tp f0 = data084[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 1.6736714959992433e-16
+// mean(f - f_Boost): 5.5511151231257830e-18
+// variance(f - f_Boost): 3.8043060629871325e-36
+// stddev(f - f_Boost): 1.9504630380981673e-18
+const testcase_ellint_3<double>
+data083[10] =
+{
+  { 0.0000000000000000, -0.099999999999999978, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17489533344059083, -0.099999999999999978, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35194305707815038, -0.099999999999999978, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53317790741512527, -0.099999999999999978, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72036681615081222, -0.099999999999999978, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.91480372268244303, -0.099999999999999978, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1170528708071514, -0.099999999999999978, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3266916802718358, -0.099999999999999978, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5421622241831547, -0.099999999999999978, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7608656115083421, -0.099999999999999978, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler083 = 2.5000000000000020e-13;
+
+// Test data for k=-0.099999999999999978, nu=0.30000000000000004.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 1.9186071760326645e-16
+// mean(f - f_Boost): -1.6653345369377347e-17
+// variance(f - f_Boost): 3.4238754566884194e-35
+// stddev(f - f_Boost): 5.8513891142945016e-18
+const testcase_ellint_3<double>
+data084[10] =
+{
+  { 0.0000000000000000, -0.099999999999999978, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17507310163441189, -0.099999999999999978, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35337768072524217, -0.099999999999999978, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.53808167801629170, -0.099999999999999978, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.73215166755955019, -0.099999999999999978, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.93806546000201219, -0.099999999999999978, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.1573218723395986, -0.099999999999999978, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.3897859679542097, -0.099999999999999978, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.6331009404328622, -0.099999999999999978, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 1.8826015946315438, -0.099999999999999978, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler084 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978, nu=0.40000000000000002.
-testcase_ellint_3<double> data085[] = {
-  { -0.0000000000000000, -0.099999999999999978, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17384216369897937, -0.099999999999999978, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34375018311376782, -0.099999999999999978, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.50672650758380455, -0.099999999999999978, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.66121264213337616, -0.099999999999999978, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.80706202005774441, -0.099999999999999978, 0.40000000000000002,
-          0.87266462599716477 },
-  { 0.94519376138245892, -0.099999999999999978, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.0771880300759584, -0.099999999999999978, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.2049711557188272, -0.099999999999999978, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.3306223265207477, -0.099999999999999978, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.099999999999999978, nu=0.40000000000000002.
-template <typename Tp>
-void test085()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data085)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data085[i].k), Tp(data085[i].nu),
-                   Tp(data085[i].phi));
-      const Tp f0 = data085[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.0338059536914377e-16
+// mean(f - f_Boost): 2.7755575615628914e-17
+// variance(f - f_Boost): 9.5107651574678308e-35
+// stddev(f - f_Boost): 9.7523151904908362e-18
+const testcase_ellint_3<double>
+data085[10] =
+{
+  { 0.0000000000000000, -0.099999999999999978, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17525152094559704, -0.099999999999999978, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35483343742825979, -0.099999999999999978, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54314913099505446, -0.099999999999999978, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.74463962034766862, -0.099999999999999978, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.96349276837570441, -0.099999999999999978, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2029081382746343, -0.099999999999999978, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.4638022887050806, -0.099999999999999978, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.7432413830105224, -0.099999999999999978, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.0336367403076760, -0.099999999999999978, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler085 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978, nu=0.50000000000000000.
-testcase_ellint_3<double> data086[] = {
-  { -0.0000000000000000, -0.099999999999999978, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17366883711936554, -0.099999999999999978, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34244940634881876, -0.099999999999999978, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.50274793281634378, -0.099999999999999978, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.65287941633275093, -0.099999999999999978, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.79291198790315398, -0.099999999999999978, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.92412201537880345, -0.099999999999999978, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.0484480076799370, -0.099999999999999978, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.1681168130475206, -0.099999999999999978, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.2854480708580160, -0.099999999999999978, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.099999999999999978, nu=0.50000000000000000.
-template <typename Tp>
-void test086()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data086)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data086[i].k), Tp(data086[i].nu),
-                   Tp(data086[i].phi));
-      const Tp f0 = data086[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.099999999999999978, nu=0.59999999999999998.
-testcase_ellint_3<double> data087[] = {
-  { -0.0000000000000000, -0.099999999999999978, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17349612891469018, -0.099999999999999978, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34116594505539438, -0.099999999999999978, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.49887649430466685, -0.099999999999999978, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.64489553282165157, -0.099999999999999978, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.77956016553782437, -0.099999999999999978, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.90451074530096309, -0.099999999999999978, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.0220113666961632, -0.099999999999999978, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.1345351441065563, -0.099999999999999978, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.2445798942989255, -0.099999999999999978, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.099999999999999978, nu=0.59999999999999998.
-template <typename Tp>
-void test087()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data087)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data087[i].k), Tp(data087[i].nu),
-                   Tp(data087[i].phi));
-      const Tp f0 = data087[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=-0.099999999999999978, nu=0.69999999999999996.
-testcase_ellint_3<double> data088[] = {
-  { -0.0000000000000000, -0.099999999999999978, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17332403516105052, -0.099999999999999978, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.33989939374896877, -0.099999999999999978, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.49510719568614081, -0.099999999999999978, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.63723607776354974, -0.099999999999999978, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.76693133887935327, -0.099999999999999978, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.88619382078823827, -0.099999999999999978, 0.69999999999999996,
-          1.0471975511965976 },
-  { 0.99758012018676490, -0.099999999999999978, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.1037642270814410, -0.099999999999999978, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.2073745911083187, -0.099999999999999978, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.099999999999999978, nu=0.69999999999999996.
-template <typename Tp>
-void test088()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data088)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data088[i].k), Tp(data088[i].nu),
-                   Tp(data088[i].phi));
-      const Tp f0 = data088[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.9864616042835278e-16
+// mean(f - f_Boost): 1.0547118733938987e-16
+// variance(f - f_Boost): 7.5633408838247182e-32
+// stddev(f - f_Boost): 2.7501528837184157e-16
+const testcase_ellint_3<double>
+data086[10] =
+{
+  { 0.0000000000000000, -0.099999999999999978, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17543059564292182, -0.099999999999999978, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35631088838721664, -0.099999999999999978, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.54839023346436444, -0.099999999999999978, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.75790846946088830, -0.099999999999999978, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.99146713686720678, -0.099999999999999978, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2551692247937198, -0.099999999999999978, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5524660788146873, -0.099999999999999978, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.8806578570830670, -0.099999999999999978, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2279868912966849, -0.099999999999999978, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler086 = 2.5000000000000020e-13;
+
+// Test data for k=-0.099999999999999978, nu=0.60000000000000009.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.6726146516228014e-16
+// mean(f - f_Boost): -3.6082248300317589e-17
+// variance(f - f_Boost): 1.6073193116120635e-34
+// stddev(f - f_Boost): 1.2678009747638087e-17
+const testcase_ellint_3<double>
+data087[10] =
+{
+  { 0.0000000000000000, -0.099999999999999978, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17561033003590576, -0.099999999999999978, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.35781061668171932, -0.099999999999999978, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.55381585659629196, -0.099999999999999978, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.77204910484575640, -0.099999999999999978, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0224751740393108, -0.099999999999999978, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.3160230906351114, -0.099999999999999978, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.6616282844233206, -0.099999999999999978, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.0592555664850392, -0.099999999999999978, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 2.4913004919173822, -0.099999999999999978, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler087 = 2.5000000000000020e-13;
+
+// Test data for k=-0.099999999999999978, nu=0.70000000000000007.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 5
+// max(|f - f_Boost| / |f_Boost|): 2.1004074871280821e-16
+// mean(f - f_Boost): 3.3306690738754695e-17
+// variance(f - f_Boost): 1.3695501826753678e-34
+// stddev(f - f_Boost): 1.1702778228589003e-17
+const testcase_ellint_3<double>
+data088[10] =
+{
+  { 0.0000000000000000, -0.099999999999999978, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17579072847532518, -0.099999999999999978, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.35933322840606297, -0.099999999999999978, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.55943788649460324, -0.099999999999999978, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.78716856504031707, -0.099999999999999978, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.0571501305617423, -0.099999999999999978, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.3882948301743525, -0.099999999999999978, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 1.8011785680114223, -0.099999999999999978, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.3057268183616464, -0.099999999999999978, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 2.8771910188009739, -0.099999999999999978, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler088 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978, nu=0.80000000000000004.
-testcase_ellint_3<double> data089[] = {
-  { -0.0000000000000000, -0.099999999999999978, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17315255197057020, -0.099999999999999978, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.33864936055747985, -0.099999999999999978, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.49143537041117619, -0.099999999999999978, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.62987861760047492, -0.099999999999999978, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.75496005490917517, -0.099999999999999978, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.86903081862701903, -0.099999999999999978, 0.80000000000000004,
-          1.0471975511965976 },
-  { 0.97490814820725591, -0.099999999999999978, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.0754290107171083, -0.099999999999999978, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.1733158866987732, -0.099999999999999978, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.099999999999999978, nu=0.80000000000000004.
-template <typename Tp>
-void test089()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data089)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data089[i].k), Tp(data089[i].nu),
-                   Tp(data089[i].phi));
-      const Tp f0 = data089[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.3133043868392355e-16
+// mean(f - f_Boost): 1.8041124150158794e-16
+// variance(f - f_Boost): 6.1843750436434569e-32
+// stddev(f - f_Boost): 2.4868403735751633e-16
+const testcase_ellint_3<double>
+data089[10] =
+{
+  { 0.0000000000000000, -0.099999999999999978, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17597179535373417, -0.099999999999999978, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36087935387831499, -0.099999999999999978, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56526935244526444, -0.099999999999999978, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.80339402590612397, -0.099999999999999978, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.0963358646374459, -0.099999999999999978, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.4763748483246868, -0.099999999999999978, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.9896610222794102, -0.099999999999999978, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.6806423920122024, -0.099999999999999978, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.5246199613295612, -0.099999999999999978, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler089 = 2.5000000000000020e-13;
 
 // Test data for k=-0.099999999999999978, nu=0.90000000000000002.
-testcase_ellint_3<double> data090[] = {
-  { -0.0000000000000000, -0.099999999999999978, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17298167549096569, -0.099999999999999978, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.33741546662741584, -0.099999999999999978, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.48785665376856879, -0.099999999999999978, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.62280288554518959, -0.099999999999999978, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.74358903115455199, -0.099999999999999978, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.85290207679298358, -0.099999999999999978, 0.90000000000000002,
-          1.0471975511965976 },
-  { 0.95379006645397379, -0.099999999999999978, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.0492213119872327, -0.099999999999999978, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.1419839485283374, -0.099999999999999978, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=-0.099999999999999978, nu=0.90000000000000002.
-template <typename Tp>
-void test090()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data090)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data090[i].k), Tp(data090[i].nu),
-                   Tp(data090[i].phi));
-      const Tp f0 = data090[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.5624826890976725e-16
+// mean(f - f_Boost): 2.3314683517128288e-16
+// variance(f - f_Boost): 2.9401198977189756e-31
+// stddev(f - f_Boost): 5.4222872459129045e-16
+const testcase_ellint_3<double>
+data090[10] =
+{
+  { 0.0000000000000000, -0.099999999999999978, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17615353510599349, -0.099999999999999978, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36244964892922371, -0.099999999999999978, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57132457590110530, -0.099999999999999978, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.82087808820385000, -0.099999999999999978, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1411894342144451, -0.099999999999999978, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.5875929286844597, -0.099999999999999978, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.2678622986596659, -0.099999999999999978, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.3697528941897903, -0.099999999999999978, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 4.9862890417305499, -0.099999999999999978, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler090 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000, nu=0.0000000000000000.
-testcase_ellint_3<double> data091[] = {
-  { -0.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17453292519943295, 0.0000000000000000, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.34906585039886584, 0.0000000000000000, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.52359877559829882, 0.0000000000000000, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.69813170079773179, 0.0000000000000000, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.87266462599716477, 0.0000000000000000, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.0471975511965976, 0.0000000000000000, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.2217304763960304, 0.0000000000000000, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.3962634015954631, 0.0000000000000000, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.5707963267948966, 0.0000000000000000, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.0000000000000000, nu=0.0000000000000000.
-template <typename Tp>
-void test091()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data091)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data091[i].k), Tp(data091[i].nu),
-                   Tp(data091[i].phi));
-      const Tp f0 = data091[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.1203697876423447e-16
+// mean(f - f_Boost): -1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
+const testcase_ellint_3<double>
+data091[10] =
+{
+  { 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17453292519943295, 0.0000000000000000, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.34906585039886590, 0.0000000000000000, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52359877559829882, 0.0000000000000000, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.69813170079773179, 0.0000000000000000, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.87266462599716477, 0.0000000000000000, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0471975511965976, 0.0000000000000000, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2217304763960306, 0.0000000000000000, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.3962634015954636, 0.0000000000000000, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.5707963267948966, 0.0000000000000000, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler091 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000, nu=0.10000000000000001.
-testcase_ellint_3<double> data092[] = {
-  { -0.0000000000000000, 0.0000000000000000, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17435710107516608, 0.0000000000000000, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.34769194715329604, 0.0000000000000000, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.51913731575866118, 0.0000000000000000, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.68810051897078461, 0.0000000000000000, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.85432615661706823, 0.0000000000000000, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.0179006647340796, 0.0000000000000000, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.1792120640746322, 0.0000000000000000, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.3388834245070498, 0.0000000000000000, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.4976955329233277, 0.0000000000000000, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.0000000000000000, nu=0.10000000000000001.
-template <typename Tp>
-void test092()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data092)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data092[i].k), Tp(data092[i].nu),
-                   Tp(data092[i].phi));
-      const Tp f0 = data092[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.1019052604815601e-16
+// mean(f - f_Boost): 2.7755575615628915e-18
+// variance(f - f_Boost): 9.5107651574678312e-37
+// stddev(f - f_Boost): 9.7523151904908366e-19
+const testcase_ellint_3<double>
+data092[10] =
+{
+  { 0.0000000000000000, 0.0000000000000000, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17470938780535167, 0.0000000000000000, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35045931581655582, 0.0000000000000000, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.52819841383849875, 0.0000000000000000, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.70868910807992958, 0.0000000000000000, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.89241311307249638, 0.0000000000000000, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.0794871444666669, 0.0000000000000000, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.2696086247356864, 0.0000000000000000, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.4620562617494721, 0.0000000000000000, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.6557647109660167, 0.0000000000000000, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler092 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000, nu=0.20000000000000001.
-testcase_ellint_3<double> data093[] = {
-  { -0.0000000000000000, 0.0000000000000000, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17418191132226077, 0.0000000000000000, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34633712256943405, 0.0000000000000000, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.51480684302043711, 0.0000000000000000, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.67855102942481949, 0.0000000000000000, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.83723056090326253, 0.0000000000000000, 0.20000000000000001,
-          0.87266462599716477 },
-  { 0.99114645269578183, 0.0000000000000000, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.1411014627915537, 0.0000000000000000, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.2882448138013969, 0.0000000000000000, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.4339343023863691, 0.0000000000000000, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.0000000000000000, nu=0.20000000000000001.
-template <typename Tp>
-void test093()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data093)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data093[i].k), Tp(data093[i].nu),
-                   Tp(data093[i].phi));
-      const Tp f0 = data093[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.0000000000000000, nu=0.29999999999999999.
-testcase_ellint_3<double> data094[] = {
-  { -0.0000000000000000, 0.0000000000000000, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17400735186871727, 0.0000000000000000, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34500091027020219, 0.0000000000000000, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.51060069523901541, 0.0000000000000000, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.66944393961375459, 0.0000000000000000, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.82123776744538157, 0.0000000000000000, 0.29999999999999999,
-          0.87266462599716477 },
-  { 0.96657579245516523, 0.0000000000000000, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.1066703663542414, 0.0000000000000000, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.2431094251944901, 0.0000000000000000, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.3776795151134889, 0.0000000000000000, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.0000000000000000, nu=0.29999999999999999.
-template <typename Tp>
-void test094()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data094)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data094[i].k), Tp(data094[i].nu),
-                   Tp(data094[i].phi));
-      const Tp f0 = data094[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.0831888697465320e-16
+// mean(f - f_Boost): -1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
+const testcase_ellint_3<double>
+data093[10] =
+{
+  { 0.0000000000000000, 0.0000000000000000, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17488649304197776, 0.0000000000000000, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35187284488675424, 0.0000000000000000, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53294400750146131, 0.0000000000000000, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.71982347021822823, 0.0000000000000000, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.91377311030258745, 0.0000000000000000, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1153429007215137, 0.0000000000000000, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3241202847784086, 0.0000000000000000, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5385854914338242, 0.0000000000000000, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7562036827601815, 0.0000000000000000, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler093 = 2.5000000000000020e-13;
+
+// Test data for k=0.0000000000000000, nu=0.30000000000000004.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.0642101770923591e-16
+// mean(f - f_Boost): -1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
+const testcase_ellint_3<double>
+data094[10] =
+{
+  { 0.0000000000000000, 0.0000000000000000, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17506424509761404, 0.0000000000000000, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35330695794774630, 0.0000000000000000, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.53784398359522367, 0.0000000000000000, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.73159289408687844, 0.0000000000000000, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.93699031797084975, 0.0000000000000000, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.1555098909390267, 0.0000000000000000, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.3870184960144325, 0.0000000000000000, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.6291980835772994, 0.0000000000000000, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 1.8774607092226381, 0.0000000000000000, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler094 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000, nu=0.40000000000000002.
-testcase_ellint_3<double> data095[] = {
-  { -0.0000000000000000, 0.0000000000000000, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17383341868035865, 0.0000000000000000, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34368286022299821, 0.0000000000000000, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.50651268947499406, 0.0000000000000000, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.66074441806097550, 0.0000000000000000, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.80622931670113485, 0.0000000000000000, 0.40000000000000002,
-          0.87266462599716477 },
-  { 0.94389791565435233, 0.0000000000000000, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.0753503387899728, 0.0000000000000000, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.2025374759127518, 0.0000000000000000, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.3275651989026322, 0.0000000000000000, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.0000000000000000, nu=0.40000000000000002.
-template <typename Tp>
-void test095()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data095)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data095[i].k), Tp(data095[i].nu),
-                   Tp(data095[i].phi));
-      const Tp f0 = data095[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.0449580089795878e-16
+// mean(f - f_Boost): -1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
+const testcase_ellint_3<double>
+data095[10] =
+{
+  { 0.0000000000000000, 0.0000000000000000, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17524264820030025, 0.0000000000000000, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35476219513871499, 0.0000000000000000, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54290749235440094, 0.0000000000000000, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.74406433757109913, 0.0000000000000000, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.96236826162553313, 0.0000000000000000, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2009785880262487, 0.0000000000000000, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.4608000106167567, 0.0000000000000000, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.7389349574753439, 0.0000000000000000, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.0278893379868057, 0.0000000000000000, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler095 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000, nu=0.50000000000000000.
-testcase_ellint_3<double> data096[] = {
-  { -0.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17366010776037047, 0.0000000000000000, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34238253799539309, 0.0000000000000000, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.50253707775976408, 0.0000000000000000, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.65242145347295766, 0.0000000000000000, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.79210420018698058, 0.0000000000000000, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.92287437995632193, 0.0000000000000000, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.0466900550798661, 0.0000000000000000, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.1658007366618623, 0.0000000000000000, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.2825498301618641, 0.0000000000000000, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.0000000000000000, nu=0.50000000000000000.
-template <typename Tp>
-void test096()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data096)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data096[i].k), Tp(data096[i].nu),
-                   Tp(data096[i].phi));
-      const Tp f0 = data096[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.0000000000000000, nu=0.59999999999999998.
-testcase_ellint_3<double> data097[] = {
-  { -0.0000000000000000, 0.0000000000000000, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17348741514884702, 0.0000000000000000, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34109952405241289, 0.0000000000000000, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.49866850781226296, 0.0000000000000000, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.64444732407062510, 0.0000000000000000, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.77877564686544720, 0.0000000000000000, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.90330743691883497, 0.0000000000000000, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.0203257987604104, 0.0000000000000000, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.1323247918768631, 0.0000000000000000, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.2418235332245127, 0.0000000000000000, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.0000000000000000, nu=0.59999999999999998.
-template <typename Tp>
-void test097()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data097)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data097[i].k), Tp(data097[i].nu),
-                   Tp(data097[i].phi));
-      const Tp f0 = data097[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.0000000000000000, nu=0.69999999999999996.
-testcase_ellint_3<double> data098[] = {
-  { -0.0000000000000000, 0.0000000000000000, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17331533692234477, 0.0000000000000000, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.33983341309265941, 0.0000000000000000, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.49490198805931990, 0.0000000000000000, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.63679715525145308, 0.0000000000000000, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.76616861049481944, 0.0000000000000000, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.88503143209004220, 0.0000000000000000, 0.69999999999999996,
-          1.0471975511965976 },
-  { 0.99596060249112173, 0.0000000000000000, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.1016495050260424, 0.0000000000000000, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.2047457872617382, 0.0000000000000000, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.0000000000000000, nu=0.69999999999999996.
-template <typename Tp>
-void test098()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data098)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data098[i].k), Tp(data098[i].nu),
-                   Tp(data098[i].phi));
-      const Tp f0 = data098[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.0254203825026289e-16
+// mean(f - f_Boost): -1.9428902930940238e-17
+// variance(f - f_Boost): 4.6602749271592373e-35
+// stddev(f - f_Boost): 6.8266206333435850e-18
+const testcase_ellint_3<double>
+data096[10] =
+{
+  { 0.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17542170661831016, 0.0000000000000000, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35623911740195419, 0.0000000000000000, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.54814449099863127, 0.0000000000000000, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.75731546607718081, 0.0000000000000000, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.99028751188233310, 0.0000000000000000, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2531022857760581, 0.0000000000000000, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5491761777615785, 0.0000000000000000, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.8758359693666533, 0.0000000000000000, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2214414690791831, 0.0000000000000000, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler096 = 2.5000000000000020e-13;
+
+// Test data for k=0.0000000000000000, nu=0.60000000000000009.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 2.1742785192400269e-16
+// mean(f - f_Boost): 1.3877787807814457e-17
+// variance(f - f_Boost): 2.3776912893669577e-35
+// stddev(f - f_Boost): 4.8761575952454181e-18
+const testcase_ellint_3<double>
+data097[10] =
+{
+  { 0.0000000000000000, 0.0000000000000000, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17560142466065651, 0.0000000000000000, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.35773830754879005, 0.0000000000000000, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.55356583986445973, 0.0000000000000000, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.77143701715151514, 0.0000000000000000, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0212334940541210, 0.0000000000000000, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.3137928444460387, 0.0000000000000000, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.6579755004159076, 0.0000000000000000, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.0537461418295506, 0.0000000000000000, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 2.4836470664490253, 0.0000000000000000, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler097 = 2.5000000000000020e-13;
+
+// Test data for k=0.0000000000000000, nu=0.70000000000000007.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 4
+// max(|f - f_Boost| / |f_Boost|): 3.0903019454022601e-16
+// mean(f - f_Boost): -6.9388939039072284e-17
+// variance(f - f_Boost): 5.9442282234173945e-34
+// stddev(f - f_Boost): 2.4380787976227090e-17
+const testcase_ellint_3<double>
+data098[10] =
+{
+  { 0.0000000000000000, 0.0000000000000000, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17578180667760368, 0.0000000000000000, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.35926037139410999, 0.0000000000000000, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.55918341315855080, 0.0000000000000000, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.78653584856932546, 0.0000000000000000, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.0558379029273324, 0.0000000000000000, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.3858662544850615, 0.0000000000000000, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 1.7970491170359040, 0.0000000000000000, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.2992404490153917, 0.0000000000000000, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 2.8678686047727382, 0.0000000000000000, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler098 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000, nu=0.80000000000000004.
-testcase_ellint_3<double> data099[] = {
-  { -0.0000000000000000, 0.0000000000000000, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17314386919344213, 0.0000000000000000, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.33858381342073240, 0.0000000000000000, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.49123285640844738, 0.0000000000000000, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.62944854858904520, 0.0000000000000000, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.75421778305499343, 0.0000000000000000, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.86790634112156639, 0.0000000000000000, 0.80000000000000004,
-          1.0471975511965976 },
-  { 0.97334918087427558, 0.0000000000000000, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.0734012615283985, 0.0000000000000000, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.1708024551734544, 0.0000000000000000, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.0000000000000000, nu=0.80000000000000004.
-template <typename Tp>
-void test099()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data099)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data099[i].k), Tp(data099[i].nu),
-                   Tp(data099[i].phi));
-      const Tp f0 = data099[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.2373744057922657e-16
+// mean(f - f_Boost): 1.0269562977782698e-16
+// variance(f - f_Boost): 1.4388836606733082e-32
+// stddev(f - f_Boost): 1.1995347684303728e-16
+const testcase_ellint_3<double>
+data099[10] =
+{
+  { 0.0000000000000000, 0.0000000000000000, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17596285706118869, 0.0000000000000000, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36080593896484231, 0.0000000000000000, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56501022706967863, 0.0000000000000000, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.80273891984116930, 0.0000000000000000, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.0949425007763358, 0.0000000000000000, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.4736985692253419, 0.0000000000000000, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.9848676587180696, 0.0000000000000000, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.6726187823193546, 0.0000000000000000, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.5124073655203634, 0.0000000000000000, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler099 = 2.5000000000000020e-13;
 
 // Test data for k=0.0000000000000000, nu=0.90000000000000002.
-testcase_ellint_3<double> data100[] = {
-  { -0.0000000000000000, 0.0000000000000000, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17297300811030600, 0.0000000000000000, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.33735034635360817, 0.0000000000000000, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.48765675230233141, 0.0000000000000000, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.62238126886123568, 0.0000000000000000, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.74286600807269243, 0.0000000000000000, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.85181283909264971, 0.0000000000000000, 0.90000000000000002,
-          1.0471975511965976 },
-  { 0.95228683995371122, 0.0000000000000000, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.0472730487412552, 0.0000000000000000, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.1395754288497419, 0.0000000000000000, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.0000000000000000, nu=0.90000000000000002.
-template <typename Tp>
-void test100()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data100)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data100[i].k), Tp(data100[i].nu),
-                   Tp(data100[i].phi));
-      const Tp f0 = data100[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 6.6108624815885066e-16
+// mean(f - f_Boost): 2.1371793224034264e-16
+// variance(f - f_Boost): 5.6389326618626776e-33
+// stddev(f - f_Boost): 7.5092826966779442e-17
+const testcase_ellint_3<double>
+data100[10] =
+{
+  { 0.0000000000000000, 0.0000000000000000, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17614458024574997, 0.0000000000000000, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36237566578821978, 0.0000000000000000, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57106058859196640, 0.0000000000000000, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.82019857015755915, 0.0000000000000000, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1397014388908147, 0.0000000000000000, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.5845952415154960, 0.0000000000000000, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.2620531413370775, 0.0000000000000000, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.3587842061975066, 0.0000000000000000, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 4.9672941328980507, 0.0000000000000000, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler100 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009, nu=0.0000000000000000.
-testcase_ellint_3<double> data101[] = {
-  { -0.0000000000000000, 0.10000000000000009, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17454173353063665, 0.10000000000000009, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.34913506721468085, 0.10000000000000009, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.52382550016538953, 0.10000000000000009, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.69864700854177031, 0.10000000000000009, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.87361792586964870, 0.10000000000000009, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.0487386319621685, 0.10000000000000009, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.2239913752078757, 0.10000000000000009, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.3993423113684049, 0.10000000000000009, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.5747455615173562, 0.10000000000000009, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.10000000000000009, nu=0.0000000000000000.
-template <typename Tp>
-void test101()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data101)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data101[i].k), Tp(data101[i].nu),
-                   Tp(data101[i].phi));
-      const Tp f0 = data101[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.1735566504509645e-16
+// mean(f - f_Boost): -5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
+const testcase_ellint_3<double>
+data101[10] =
+{
+  { 0.0000000000000000, 0.10000000000000009, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17454173353063662, 0.10000000000000009, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.34913506721468096, 0.10000000000000009, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52382550016538953, 0.10000000000000009, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.69864700854177020, 0.10000000000000009, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.87361792586964859, 0.10000000000000009, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0487386319621685, 0.10000000000000009, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2239913752078759, 0.10000000000000009, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.3993423113684051, 0.10000000000000009, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.5747455615173560, 0.10000000000000009, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler101 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009, nu=0.10000000000000001.
-testcase_ellint_3<double> data102[] = {
-  { -0.0000000000000000, 0.10000000000000009, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17436589347616618, 0.10000000000000009, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.34776067871237354, 0.10000000000000009, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.51936064354727807, 0.10000000000000009, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.68860303749364360, 0.10000000000000009, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.85524561882332051, 0.10000000000000009, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.0193708301908337, 0.10000000000000009, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.1813474067123044, 0.10000000000000009, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.3417670770424983, 0.10000000000000009, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.5013711111199950, 0.10000000000000009, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.10000000000000009, nu=0.10000000000000001.
-template <typename Tp>
-void test102()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data102)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data102[i].k), Tp(data102[i].nu),
-                   Tp(data102[i].phi));
-      const Tp f0 = data102[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.0305747373482148e-16
+// mean(f - f_Boost): -3.0531133177191807e-17
+// variance(f - f_Boost): 1.1508025840536076e-34
+// stddev(f - f_Boost): 1.0727546709539920e-17
+const testcase_ellint_3<double>
+data102[10] =
+{
+  { 0.0000000000000000, 0.10000000000000009, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17471821213559732, 0.10000000000000009, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35052902610011138, 0.10000000000000009, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.52842865990255727, 0.10000000000000009, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.70921799731166713, 0.10000000000000009, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.89340330535868662, 0.10000000000000009, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.0811075784236857, 0.10000000000000009, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.2720133232666426, 0.10000000000000009, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.4653630031861395, 0.10000000000000009, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.6600374067558428, 0.10000000000000009, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler102 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009, nu=0.20000000000000001.
-testcase_ellint_3<double> data103[] = {
-  { -0.0000000000000000, 0.10000000000000009, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17419068786141345, 0.10000000000000009, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34640537686230127, 0.10000000000000009, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.51502689171753957, 0.10000000000000009, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.67904147863672726, 0.10000000000000009, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.83811885126105179, 0.10000000000000009, 0.20000000000000001,
-          0.87266462599716477 },
-  { 0.99255278555742810, 0.10000000000000009, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.1431260546194930, 0.10000000000000009, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.2909589656532101, 0.10000000000000009, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.4373749386463430, 0.10000000000000009, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.10000000000000009, nu=0.20000000000000001.
-template <typename Tp>
-void test103()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data103)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data103[i].k), Tp(data103[i].nu),
-                   Tp(data103[i].phi));
-      const Tp f0 = data103[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.10000000000000009, nu=0.29999999999999999.
-testcase_ellint_3<double> data104[] = {
-  { -0.0000000000000000, 0.10000000000000009, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17401611261390110, 0.10000000000000009, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34506869507511767, 0.10000000000000009, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.51081757604259870, 0.10000000000000009, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.66992297597712303, 0.10000000000000009, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.82209722856174228, 0.10000000000000009, 0.29999999999999999,
-          0.87266462599716477 },
-  { 0.96792430487669612, 0.10000000000000009, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.1085964108954092, 0.10000000000000009, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.2456748370836999, 0.10000000000000009, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.3809159606704959, 0.10000000000000009, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.10000000000000009, nu=0.29999999999999999.
-template <typename Tp>
-void test104()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data104)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data104[i].k), Tp(data104[i].nu),
-                   Tp(data104[i].phi));
-      const Tp f0 = data104[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 1.6736714959992433e-16
+// mean(f - f_Boost): 5.5511151231257830e-18
+// variance(f - f_Boost): 3.8043060629871325e-36
+// stddev(f - f_Boost): 1.9504630380981673e-18
+const testcase_ellint_3<double>
+data103[10] =
+{
+  { 0.0000000000000000, 0.10000000000000009, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17489533344059083, 0.10000000000000009, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35194305707815038, 0.10000000000000009, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53317790741512527, 0.10000000000000009, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72036681615081222, 0.10000000000000009, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.91480372268244303, 0.10000000000000009, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1170528708071514, 0.10000000000000009, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3266916802718358, 0.10000000000000009, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5421622241831547, 0.10000000000000009, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7608656115083421, 0.10000000000000009, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler103 = 2.5000000000000020e-13;
+
+// Test data for k=0.10000000000000009, nu=0.30000000000000004.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 1.9186071760326645e-16
+// mean(f - f_Boost): -1.6653345369377347e-17
+// variance(f - f_Boost): 3.4238754566884194e-35
+// stddev(f - f_Boost): 5.8513891142945016e-18
+const testcase_ellint_3<double>
+data104[10] =
+{
+  { 0.0000000000000000, 0.10000000000000009, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17507310163441189, 0.10000000000000009, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35337768072524217, 0.10000000000000009, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.53808167801629170, 0.10000000000000009, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.73215166755955019, 0.10000000000000009, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.93806546000201219, 0.10000000000000009, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.1573218723395986, 0.10000000000000009, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.3897859679542097, 0.10000000000000009, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.6331009404328622, 0.10000000000000009, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 1.8826015946315438, 0.10000000000000009, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler104 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009, nu=0.40000000000000002.
-testcase_ellint_3<double> data105[] = {
-  { -0.0000000000000000, 0.10000000000000009, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17384216369897937, 0.10000000000000009, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34375018311376782, 0.10000000000000009, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.50672650758380455, 0.10000000000000009, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.66121264213337616, 0.10000000000000009, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.80706202005774441, 0.10000000000000009, 0.40000000000000002,
-          0.87266462599716477 },
-  { 0.94519376138245892, 0.10000000000000009, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.0771880300759584, 0.10000000000000009, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.2049711557188272, 0.10000000000000009, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.3306223265207477, 0.10000000000000009, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.10000000000000009, nu=0.40000000000000002.
-template <typename Tp>
-void test105()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data105)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data105[i].k), Tp(data105[i].nu),
-                   Tp(data105[i].phi));
-      const Tp f0 = data105[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.0338059536914377e-16
+// mean(f - f_Boost): 2.7755575615628914e-17
+// variance(f - f_Boost): 9.5107651574678308e-35
+// stddev(f - f_Boost): 9.7523151904908362e-18
+const testcase_ellint_3<double>
+data105[10] =
+{
+  { 0.0000000000000000, 0.10000000000000009, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17525152094559704, 0.10000000000000009, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35483343742825979, 0.10000000000000009, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54314913099505446, 0.10000000000000009, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.74463962034766862, 0.10000000000000009, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.96349276837570441, 0.10000000000000009, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2029081382746343, 0.10000000000000009, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.4638022887050806, 0.10000000000000009, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.7432413830105224, 0.10000000000000009, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.0336367403076760, 0.10000000000000009, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler105 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009, nu=0.50000000000000000.
-testcase_ellint_3<double> data106[] = {
-  { -0.0000000000000000, 0.10000000000000009, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17366883711936554, 0.10000000000000009, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34244940634881876, 0.10000000000000009, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.50274793281634378, 0.10000000000000009, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.65287941633275093, 0.10000000000000009, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.79291198790315398, 0.10000000000000009, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.92412201537880345, 0.10000000000000009, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.0484480076799370, 0.10000000000000009, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.1681168130475206, 0.10000000000000009, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.2854480708580160, 0.10000000000000009, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.10000000000000009, nu=0.50000000000000000.
-template <typename Tp>
-void test106()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data106)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data106[i].k), Tp(data106[i].nu),
-                   Tp(data106[i].phi));
-      const Tp f0 = data106[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.10000000000000009, nu=0.59999999999999998.
-testcase_ellint_3<double> data107[] = {
-  { -0.0000000000000000, 0.10000000000000009, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17349612891469018, 0.10000000000000009, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34116594505539438, 0.10000000000000009, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.49887649430466685, 0.10000000000000009, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.64489553282165157, 0.10000000000000009, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.77956016553782437, 0.10000000000000009, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.90451074530096309, 0.10000000000000009, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.0220113666961632, 0.10000000000000009, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.1345351441065563, 0.10000000000000009, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.2445798942989255, 0.10000000000000009, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.10000000000000009, nu=0.59999999999999998.
-template <typename Tp>
-void test107()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data107)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data107[i].k), Tp(data107[i].nu),
-                   Tp(data107[i].phi));
-      const Tp f0 = data107[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.10000000000000009, nu=0.69999999999999996.
-testcase_ellint_3<double> data108[] = {
-  { -0.0000000000000000, 0.10000000000000009, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17332403516105052, 0.10000000000000009, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.33989939374896877, 0.10000000000000009, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.49510719568614081, 0.10000000000000009, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.63723607776354974, 0.10000000000000009, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.76693133887935327, 0.10000000000000009, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.88619382078823827, 0.10000000000000009, 0.69999999999999996,
-          1.0471975511965976 },
-  { 0.99758012018676490, 0.10000000000000009, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.1037642270814410, 0.10000000000000009, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.2073745911083187, 0.10000000000000009, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.10000000000000009, nu=0.69999999999999996.
-template <typename Tp>
-void test108()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data108)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data108[i].k), Tp(data108[i].nu),
-                   Tp(data108[i].phi));
-      const Tp f0 = data108[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.9864616042835278e-16
+// mean(f - f_Boost): 9.4368957093138303e-17
+// variance(f - f_Boost): 7.7794254682023874e-32
+// stddev(f - f_Boost): 2.7891621444803792e-16
+const testcase_ellint_3<double>
+data106[10] =
+{
+  { 0.0000000000000000, 0.10000000000000009, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17543059564292182, 0.10000000000000009, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35631088838721664, 0.10000000000000009, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.54839023346436455, 0.10000000000000009, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.75790846946088830, 0.10000000000000009, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.99146713686720678, 0.10000000000000009, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2551692247937198, 0.10000000000000009, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5524660788146873, 0.10000000000000009, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.8806578570830670, 0.10000000000000009, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2279868912966849, 0.10000000000000009, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler106 = 2.5000000000000020e-13;
+
+// Test data for k=0.10000000000000009, nu=0.60000000000000009.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.6726146516228014e-16
+// mean(f - f_Boost): -3.6082248300317589e-17
+// variance(f - f_Boost): 1.6073193116120635e-34
+// stddev(f - f_Boost): 1.2678009747638087e-17
+const testcase_ellint_3<double>
+data107[10] =
+{
+  { 0.0000000000000000, 0.10000000000000009, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17561033003590576, 0.10000000000000009, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.35781061668171932, 0.10000000000000009, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.55381585659629196, 0.10000000000000009, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.77204910484575640, 0.10000000000000009, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0224751740393108, 0.10000000000000009, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.3160230906351114, 0.10000000000000009, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.6616282844233206, 0.10000000000000009, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.0592555664850392, 0.10000000000000009, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 2.4913004919173822, 0.10000000000000009, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler107 = 2.5000000000000020e-13;
+
+// Test data for k=0.10000000000000009, nu=0.70000000000000007.
+// max(|f - f_Boost|): 2.2204460492503131e-16 at index 5
+// max(|f - f_Boost| / |f_Boost|): 2.1004074871280821e-16
+// mean(f - f_Boost): 3.3306690738754695e-17
+// variance(f - f_Boost): 1.3695501826753678e-34
+// stddev(f - f_Boost): 1.1702778228589003e-17
+const testcase_ellint_3<double>
+data108[10] =
+{
+  { 0.0000000000000000, 0.10000000000000009, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17579072847532518, 0.10000000000000009, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.35933322840606297, 0.10000000000000009, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.55943788649460324, 0.10000000000000009, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.78716856504031707, 0.10000000000000009, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.0571501305617423, 0.10000000000000009, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.3882948301743525, 0.10000000000000009, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 1.8011785680114223, 0.10000000000000009, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.3057268183616464, 0.10000000000000009, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 2.8771910188009739, 0.10000000000000009, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler108 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009, nu=0.80000000000000004.
-testcase_ellint_3<double> data109[] = {
-  { -0.0000000000000000, 0.10000000000000009, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17315255197057020, 0.10000000000000009, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.33864936055747985, 0.10000000000000009, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.49143537041117619, 0.10000000000000009, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.62987861760047492, 0.10000000000000009, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.75496005490917517, 0.10000000000000009, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.86903081862701903, 0.10000000000000009, 0.80000000000000004,
-          1.0471975511965976 },
-  { 0.97490814820725591, 0.10000000000000009, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.0754290107171083, 0.10000000000000009, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.1733158866987732, 0.10000000000000009, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.10000000000000009, nu=0.80000000000000004.
-template <typename Tp>
-void test109()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data109)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data109[i].k), Tp(data109[i].nu),
-                   Tp(data109[i].phi));
-      const Tp f0 = data109[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.3133043868392355e-16
+// mean(f - f_Boost): 1.8041124150158794e-16
+// variance(f - f_Boost): 6.1843750436434569e-32
+// stddev(f - f_Boost): 2.4868403735751633e-16
+const testcase_ellint_3<double>
+data109[10] =
+{
+  { 0.0000000000000000, 0.10000000000000009, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17597179535373417, 0.10000000000000009, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36087935387831499, 0.10000000000000009, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56526935244526444, 0.10000000000000009, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.80339402590612397, 0.10000000000000009, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.0963358646374459, 0.10000000000000009, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.4763748483246868, 0.10000000000000009, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.9896610222794102, 0.10000000000000009, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.6806423920122024, 0.10000000000000009, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.5246199613295612, 0.10000000000000009, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler109 = 2.5000000000000020e-13;
 
 // Test data for k=0.10000000000000009, nu=0.90000000000000002.
-testcase_ellint_3<double> data110[] = {
-  { -0.0000000000000000, 0.10000000000000009, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17298167549096569, 0.10000000000000009, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.33741546662741584, 0.10000000000000009, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.48785665376856879, 0.10000000000000009, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.62280288554518959, 0.10000000000000009, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.74358903115455199, 0.10000000000000009, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.85290207679298358, 0.10000000000000009, 0.90000000000000002,
-          1.0471975511965976 },
-  { 0.95379006645397379, 0.10000000000000009, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.0492213119872327, 0.10000000000000009, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.1419839485283374, 0.10000000000000009, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.10000000000000009, nu=0.90000000000000002.
-template <typename Tp>
-void test110()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data110)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data110[i].k), Tp(data110[i].nu),
-                   Tp(data110[i].phi));
-      const Tp f0 = data110[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.19999999999999996, nu=0.0000000000000000.
-testcase_ellint_3<double> data111[] = {
-  { -0.0000000000000000, 0.19999999999999996, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17456817290292811, 0.19999999999999996, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.34934315932086801, 0.19999999999999996, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.52450880529443988, 0.19999999999999996, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.70020491009844910, 0.19999999999999996, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.87651006649967955, 0.19999999999999996, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.0534305870298994, 0.19999999999999996, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.2308975521670784, 0.19999999999999996, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.4087733584990738, 0.19999999999999996, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.5868678474541664, 0.19999999999999996, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.19999999999999996, nu=0.0000000000000000.
-template <typename Tp>
-void test111()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data111)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data111[i].k), Tp(data111[i].nu),
-                   Tp(data111[i].phi));
-      const Tp f0 = data111[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.19999999999999996, nu=0.10000000000000001.
-testcase_ellint_3<double> data112[] = {
-  { -0.0000000000000000, 0.19999999999999996, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17439228502691750, 0.19999999999999996, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.34796731137565740, 0.19999999999999996, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.52003370294544848, 0.19999999999999996, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.69012222258631495, 0.19999999999999996, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.85803491465566772, 0.19999999999999996, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.0238463961099364, 0.19999999999999996, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.1878691059202153, 0.19999999999999996, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.3505985031831940, 0.19999999999999996, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.5126513474261092, 0.19999999999999996, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.19999999999999996, nu=0.10000000000000001.
-template <typename Tp>
-void test112()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data112)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data112[i].k), Tp(data112[i].nu),
-                   Tp(data112[i].phi));
-      const Tp f0 = data112[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.19999999999999996, nu=0.20000000000000001.
-testcase_ellint_3<double> data113[] = {
-  { -0.0000000000000000, 0.19999999999999996, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17421703179583750, 0.19999999999999996, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34661057411998791, 0.19999999999999996, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.51569006052647393, 0.19999999999999996, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.68052412821107278, 0.19999999999999996, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.84081341263313825, 0.19999999999999996, 0.20000000000000001,
-          0.87266462599716477 },
-  { 0.99683359988842890, 0.19999999999999996, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.1493086715118852, 0.19999999999999996, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.2992699693957541, 0.19999999999999996, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.4479323932249568, 0.19999999999999996, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.19999999999999996, nu=0.20000000000000001.
-template <typename Tp>
-void test113()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data113)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data113[i].k), Tp(data113[i].nu),
-                   Tp(data113[i].phi));
-      const Tp f0 = data113[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.19999999999999996, nu=0.29999999999999999.
-testcase_ellint_3<double> data114[] = {
-  { -0.0000000000000000, 0.19999999999999996, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17404240913577707, 0.19999999999999996, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34527248032587193, 0.19999999999999996, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.51147118981668416, 0.19999999999999996, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.67137107867777635, 0.19999999999999996, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.82470418188668893, 0.19999999999999996, 0.29999999999999999,
-          0.87266462599716477 },
-  { 0.97202873223594299, 0.19999999999999996, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.1144773569375266, 0.19999999999999996, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.2535292433701000, 0.19999999999999996, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.3908453514752481, 0.19999999999999996, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.19999999999999996, nu=0.29999999999999999.
-template <typename Tp>
-void test114()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data114)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data114[i].k), Tp(data114[i].nu),
-                   Tp(data114[i].phi));
-      const Tp f0 = data114[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.19999999999999996, nu=0.40000000000000002.
-testcase_ellint_3<double> data115[] = {
-  { -0.0000000000000000, 0.19999999999999996, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17386841301066677, 0.19999999999999996, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34395257914113253, 0.19999999999999996, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.50737088376869466, 0.19999999999999996, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.66262801717277664, 0.19999999999999996, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.80958766645079094, 0.19999999999999996, 0.40000000000000002,
-          0.87266462599716477 },
-  { 0.94913754236162040, 0.19999999999999996, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.0827985514223000, 0.19999999999999996, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.2124212429050478, 0.19999999999999996, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.3400002519661010, 0.19999999999999996, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.19999999999999996, nu=0.40000000000000002.
-template <typename Tp>
-void test115()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data115)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data115[i].k), Tp(data115[i].nu),
-                   Tp(data115[i].phi));
-      const Tp f0 = data115[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.19999999999999996, nu=0.50000000000000000.
-testcase_ellint_3<double> data116[] = {
-  { -0.0000000000000000, 0.19999999999999996, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17369503942181802, 0.19999999999999996, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34265043534362660, 0.19999999999999996, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.50338337208655415, 0.19999999999999996, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.65426373297163642, 0.19999999999999996, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.79536193036145808, 0.19999999999999996, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.92791875910061605, 0.19999999999999996, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.0538145052725829, 0.19999999999999996, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.1752060022875899, 0.19999999999999996, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.2943374404397376, 0.19999999999999996, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.19999999999999996, nu=0.50000000000000000.
-template <typename Tp>
-void test116()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data116)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data116[i].k), Tp(data116[i].nu),
-                   Tp(data116[i].phi));
-      const Tp f0 = data116[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.19999999999999996, nu=0.59999999999999998.
-testcase_ellint_3<double> data117[] = {
-  { -0.0000000000000000, 0.19999999999999996, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17352228440746928, 0.19999999999999996, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34136562863713626, 0.19999999999999996, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.49950328177638481, 0.19999999999999996, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.64625032705690832, 0.19999999999999996, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.78193941198403094, 0.19999999999999996, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.90817230934317128, 0.19999999999999996, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.0271563751276462, 0.19999999999999996, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.1412999379040518, 0.19999999999999996, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.2530330675914561, 0.19999999999999996, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.19999999999999996, nu=0.59999999999999998.
-template <typename Tp>
-void test117()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data117)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data117[i].k), Tp(data117[i].nu),
-                   Tp(data117[i].phi));
-      const Tp f0 = data117[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.19999999999999996, nu=0.69999999999999996.
-testcase_ellint_3<double> data118[] = {
-  { -0.0000000000000000, 0.19999999999999996, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17335014404233898, 0.19999999999999996, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34009775298617811, 0.19999999999999996, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.49572560201923810, 0.19999999999999996, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.63856276669886525, 0.19999999999999996, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.76924438644867565, 0.19999999999999996, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.88973060843856466, 0.19999999999999996, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.0025230471636377, 0.19999999999999996, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.1102356376093103, 0.19999999999999996, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.2154356555075867, 0.19999999999999996, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.19999999999999996, nu=0.69999999999999996.
-template <typename Tp>
-void test118()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data118)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data118[i].k), Tp(data118[i].nu),
-                   Tp(data118[i].phi));
-      const Tp f0 = data118[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.19999999999999996, nu=0.80000000000000004.
-testcase_ellint_3<double> data119[] = {
-  { -0.0000000000000000, 0.19999999999999996, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17317861443718541, 0.19999999999999996, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.33884641598718701, 0.19999999999999996, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.49204565281259494, 0.19999999999999996, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.63117851188220353, 0.19999999999999996, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.75721095949544170, 0.19999999999999996, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.87245201443919118, 0.19999999999999996, 0.80000000000000004,
-          1.0471975511965976 },
-  { 0.97966584238831089, 0.19999999999999996, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.0816336325174360, 0.19999999999999996, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.1810223448909913, 0.19999999999999996, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.19999999999999996, nu=0.80000000000000004.
-template <typename Tp>
-void test119()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data119)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data119[i].k), Tp(data119[i].nu),
-                   Tp(data119[i].phi));
-      const Tp f0 = data119[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.19999999999999996, nu=0.90000000000000002.
-testcase_ellint_3<double> data120[] = {
-  { -0.0000000000000000, 0.19999999999999996, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17300769173837280, 0.19999999999999996, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.33761123827372508, 0.19999999999999996, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.48845905690769426, 0.19999999999999996, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.62407720017324986, 0.19999999999999996, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.74578146525124289, 0.19999999999999996, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.85621583540073076, 0.19999999999999996, 0.90000000000000002,
-          1.0471975511965976 },
-  { 0.95837725988001199, 0.19999999999999996, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.0551821412633928, 0.19999999999999996, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.1493679916141863, 0.19999999999999996, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.19999999999999996, nu=0.90000000000000002.
-template <typename Tp>
-void test120()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data120)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data120[i].k), Tp(data120[i].nu),
-                   Tp(data120[i].phi));
-      const Tp f0 = data120[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.5624826890976725e-16
+// mean(f - f_Boost): 2.3314683517128288e-16
+// variance(f - f_Boost): 2.9401198977189756e-31
+// stddev(f - f_Boost): 5.4222872459129045e-16
+const testcase_ellint_3<double>
+data110[10] =
+{
+  { 0.0000000000000000, 0.10000000000000009, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17615353510599349, 0.10000000000000009, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36244964892922371, 0.10000000000000009, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57132457590110530, 0.10000000000000009, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.82087808820385000, 0.10000000000000009, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1411894342144451, 0.10000000000000009, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.5875929286844597, 0.10000000000000009, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.2678622986596659, 0.10000000000000009, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.3697528941897903, 0.10000000000000009, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 4.9862890417305499, 0.10000000000000009, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler110 = 2.5000000000000020e-13;
+
+// Test data for k=0.20000000000000018, nu=0.0000000000000000.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.2156475739151676e-16
+// mean(f - f_Boost): -5.2735593669694933e-17
+// variance(f - f_Boost): 3.0473442641042680e-32
+// stddev(f - f_Boost): 1.7456644190978597e-16
+const testcase_ellint_3<double>
+data111[10] =
+{
+  { 0.0000000000000000, 0.20000000000000018, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17456817290292806, 0.20000000000000018, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.34934315932086796, 0.20000000000000018, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52450880529443988, 0.20000000000000018, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.70020491009844887, 0.20000000000000018, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.87651006649967977, 0.20000000000000018, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0534305870298994, 0.20000000000000018, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2308975521670789, 0.20000000000000018, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4087733584990738, 0.20000000000000018, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.5868678474541662, 0.20000000000000018, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler111 = 2.5000000000000020e-13;
+
+// Test data for k=0.20000000000000018, nu=0.10000000000000001.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 4.0890622182605400e-16
+// mean(f - f_Boost): -3.8857805861880476e-17
+// variance(f - f_Boost): 2.8794792590749608e-32
+// stddev(f - f_Boost): 1.6969028431454054e-16
+const testcase_ellint_3<double>
+data112[10] =
+{
+  { 0.0000000000000000, 0.20000000000000018, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17474469953608965, 0.20000000000000018, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35073860234984255, 0.20000000000000018, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.52912258712951521, 0.20000000000000018, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.71081701558898069, 0.20000000000000018, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.89640758521169384, 0.20000000000000018, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.0860417038089853, 0.20000000000000018, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.2793599255528623, 0.20000000000000018, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.4754938544089076, 0.20000000000000018, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.6731552050562593, 0.20000000000000018, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler112 = 2.5000000000000020e-13;
+
+// Test data for k=0.20000000000000018, nu=0.20000000000000001.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 3.9570963716579749e-16
+// mean(f - f_Boost): -5.8286708792820721e-17
+// variance(f - f_Boost): 3.1158217732380362e-32
+// stddev(f - f_Boost): 1.7651690494788412e-16
+const testcase_ellint_3<double>
+data113[10] =
+{
+  { 0.0000000000000000, 0.20000000000000018, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17492186907740698, 0.20000000000000018, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35215414286134267, 0.20000000000000018, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53388285615182440, 0.20000000000000018, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72200960282688265, 0.20000000000000018, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.91793087614428526, 0.20000000000000018, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1222602841587976, 0.20000000000000018, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3345489407496247, 0.20000000000000018, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5531225705475502, 0.20000000000000018, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7751816279738935, 0.20000000000000018, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler113 = 2.5000000000000020e-13;
+
+// Test data for k=0.20000000000000018, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.6785817924053817e-16
+// mean(f - f_Boost): -1.1102230246251566e-17
+// variance(f - f_Boost): 9.9840208317034302e-32
+// stddev(f - f_Boost): 3.1597501217190311e-16
+const testcase_ellint_3<double>
+data114[10] =
+{
+  { 0.0000000000000000, 0.20000000000000018, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17509968571715159, 0.20000000000000018, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35359030214835629, 0.20000000000000018, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.53879807274537084, 0.20000000000000018, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.73384116418059731, 0.20000000000000018, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.94132799329524031, 0.20000000000000018, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.1628407021801439, 0.20000000000000018, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.3982440216739438, 0.20000000000000018, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.6450634983653640, 0.20000000000000018, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 1.8983924169967099, 0.20000000000000018, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler114 = 2.5000000000000020e-13;
+
+// Test data for k=0.20000000000000018, nu=0.40000000000000002.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 6
+// max(|f - f_Boost| / |f_Boost|): 3.6738449250038925e-16
+// mean(f - f_Boost): -3.0531133177191807e-17
+// variance(f - f_Boost): 2.7810428396951687e-32
+// stddev(f - f_Boost): 1.6676458975739331e-16
+const testcase_ellint_3<double>
+data115[10] =
+{
+  { 0.0000000000000000, 0.20000000000000018, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17527815368535152, 0.20000000000000018, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35504762134297801, 0.20000000000000018, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54387742353211344, 0.20000000000000018, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.74637910471804259, 0.20000000000000018, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.96690539714174639, 0.20000000000000018, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2087859420184757, 0.20000000000000018, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.4729799844168852, 0.20000000000000018, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.7564445064596661, 0.20000000000000018, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.0512956926676806, 0.20000000000000018, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler115 = 2.5000000000000020e-13;
+
+// Test data for k=0.20000000000000018, nu=0.50000000000000000.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3841806057292116e-16
+// mean(f - f_Boost): 3.6082248300317589e-17
+// variance(f - f_Boost): 8.9638010532618564e-32
+// stddev(f - f_Boost): 2.9939607634806868e-16
+const testcase_ellint_3<double>
+data116[10] =
+{
+  { 0.0000000000000000, 0.20000000000000018, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17545727725228877, 0.20000000000000018, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35652666242062175, 0.20000000000000018, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.54913090549102406, 0.20000000000000018, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.75970161209211551, 0.20000000000000018, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.99504737401590326, 0.20000000000000018, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2614666007124373, 0.20000000000000018, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5625255355205498, 0.20000000000000018, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.8954460255613346, 0.20000000000000018, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2481046259421302, 0.20000000000000018, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler116 = 2.5000000000000020e-13;
+
+// Test data for k=0.20000000000000018, nu=0.60000000000000009.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.5317584994994743e-16
+// mean(f - f_Boost): -1.3877787807814457e-17
+// variance(f - f_Boost): 1.0045745697575397e-31
+// stddev(f - f_Boost): 3.1695024369095219e-16
+const testcase_ellint_3<double>
+data117[10] =
+{
+  { 0.0000000000000000, 0.20000000000000018, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17563706072900442, 0.20000000000000018, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.35802800926807238, 0.20000000000000018, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.55456942250515051, 0.20000000000000018, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.77390003828438203, 0.20000000000000018, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0262441366366397, 0.20000000000000018, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.3228192988439669, 0.20000000000000018, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.6728005754680795, 0.20000000000000018, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.0761587107468511, 0.20000000000000018, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 2.5148333891629315, 0.20000000000000018, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler117 = 2.5000000000000020e-13;
+
+// Test data for k=0.20000000000000018, nu=0.70000000000000007.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.2209418045118284e-16
+// mean(f - f_Boost): 2.4980018054066023e-17
+// variance(f - f_Boost): 9.1989071679544611e-32
+// stddev(f - f_Boost): 3.0329700242426498e-16
+const testcase_ellint_3<double>
+data118[10] =
+{
+  { 0.0000000000000000, 0.20000000000000018, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17581750846781172, 0.20000000000000018, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.35955226882028513, 0.20000000000000018, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.56020489659466499, 0.20000000000000018, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.78908196988531498, 0.20000000000000018, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.0611336754143517, 0.20000000000000018, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.3956969951058884, 0.20000000000000018, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 1.8138131612209609, 0.20000000000000018, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.3256365528879561, 0.20000000000000018, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 2.9058704854500963, 0.20000000000000018, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler118 = 2.5000000000000020e-13;
+
+// Test data for k=0.20000000000000018, nu=0.80000000000000004.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.7399960886656824e-16
+// mean(f - f_Boost): 1.3877787807814457e-16
+// variance(f - f_Boost): 1.7585404776158019e-31
+// stddev(f - f_Boost): 4.1934955319110593e-16
+const testcase_ellint_3<double>
+data119[10] =
+{
+  { 0.0000000000000000, 0.20000000000000018, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17599862486281712, 0.20000000000000018, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36110007227128776, 0.20000000000000018, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56605039658567224, 0.20000000000000018, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.80537523874517691, 0.20000000000000018, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1005662342414086, 0.20000000000000018, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.4845340298105778, 0.20000000000000018, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.0043332244969392, 0.20000000000000018, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.7052856676744761, 0.20000000000000018, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.5622166386422633, 0.20000000000000018, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler119 = 2.5000000000000020e-13;
+
+// Test data for k=0.20000000000000018, nu=0.90000000000000002.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.1718503329017390e-16
+// mean(f - f_Boost): 2.3592239273284576e-16
+// variance(f - f_Boost): 2.9295534376290287e-31
+// stddev(f - f_Boost): 5.4125349307224141e-16
+const testcase_ellint_3<double>
+data120[10] =
+{
+  { 0.0000000000000000, 0.20000000000000018, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17618041435044951, 0.20000000000000018, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36267207636502929, 0.20000000000000018, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57212028758237743, 0.20000000000000018, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.82293323876704483, 0.20000000000000018, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1457077279880388, 0.20000000000000018, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.5967346899325681, 0.20000000000000018, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.2856537353421724, 0.20000000000000018, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.4034714304613902, 0.20000000000000018, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.0448269356200370, 0.20000000000000018, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler120 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004, nu=0.0000000000000000.
-testcase_ellint_3<double> data121[] = {
-  { -0.0000000000000000, 0.30000000000000004, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17461228653000102, 0.30000000000000004, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.34969146102798415, 0.30000000000000004, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.52565822873726320, 0.30000000000000004, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.70284226512408532, 0.30000000000000004, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.88144139195111182, 0.30000000000000004, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.0614897067260523, 0.30000000000000004, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.2428416824174218, 0.30000000000000004, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.4251795877015925, 0.30000000000000004, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.6080486199305126, 0.30000000000000004, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.30000000000000004, nu=0.0000000000000000.
-template <typename Tp>
-void test121()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data121)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data121[i].k), Tp(data121[i].nu),
-                   Tp(data121[i].phi));
-      const Tp f0 = data121[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.2241249691539529e-16
+// mean(f - f_Boost): 2.7755575615628914e-17
+// variance(f - f_Boost): 2.1399221604302621e-32
+// stddev(f - f_Boost): 1.4628472785736254e-16
+const testcase_ellint_3<double>
+data121[10] =
+{
+  { 0.0000000000000000, 0.30000000000000004, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17461228653000099, 0.30000000000000004, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.34969146102798421, 0.30000000000000004, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52565822873726309, 0.30000000000000004, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.70284226512408543, 0.30000000000000004, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.88144139195111171, 0.30000000000000004, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0614897067260520, 0.30000000000000004, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2428416824174220, 0.30000000000000004, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4251795877015929, 0.30000000000000004, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.6080486199305128, 0.30000000000000004, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler121 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004, nu=0.10000000000000001.
-testcase_ellint_3<double> data122[] = {
-  { -0.0000000000000000, 0.30000000000000004, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17443631884814378, 0.30000000000000004, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.34831316835124926, 0.30000000000000004, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.52116586276523857, 0.30000000000000004, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.69269385837910036, 0.30000000000000004, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.86279023163070856, 0.30000000000000004, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.0315321461438265, 0.30000000000000004, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.1991449111869024, 0.30000000000000004, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.3659561780923211, 0.30000000000000004, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.5323534693557526, 0.30000000000000004, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.30000000000000004, nu=0.10000000000000001.
-template <typename Tp>
-void test122()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data122)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data122[i].k), Tp(data122[i].nu),
-                   Tp(data122[i].phi));
-      const Tp f0 = data122[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.1872304407982844e-16
+// mean(f - f_Boost): 7.2164496600635178e-17
+// variance(f - f_Boost): 4.3555500115139682e-32
+// stddev(f - f_Boost): 2.0869954507650391e-16
+const testcase_ellint_3<double>
+data122[10] =
+{
+  { 0.0000000000000000, 0.30000000000000004, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17478889331392972, 0.30000000000000004, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35108939018329183, 0.30000000000000004, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53028990896115835, 0.30000000000000004, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.71352417052371409, 0.30000000000000004, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.90153086032405894, 0.30000000000000004, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.0945187977283313, 0.30000000000000004, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.2920699268385683, 0.30000000000000004, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.4931243665896394, 0.30000000000000004, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.6960848815118226, 0.30000000000000004, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler122 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004, nu=0.20000000000000001.
-testcase_ellint_3<double> data123[] = {
-  { -0.0000000000000000, 0.30000000000000004, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17426098615372090, 0.30000000000000004, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34695402664689923, 0.30000000000000004, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.51680555567038933, 0.30000000000000004, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.68303375225260210, 0.30000000000000004, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.84540662891295026, 0.30000000000000004, 0.20000000000000001,
-          0.87266462599716477 },
-  { 1.0041834051646927, 0.30000000000000004, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.1599952702345711, 0.30000000000000004, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.3137179520499163, 0.30000000000000004, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.4663658145259875, 0.30000000000000004, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.30000000000000004, nu=0.20000000000000001.
-template <typename Tp>
-void test123()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data123)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data123[i].k), Tp(data123[i].nu),
-                   Tp(data123[i].phi));
-      const Tp f0 = data123[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.30000000000000004, nu=0.29999999999999999.
-testcase_ellint_3<double> data124[] = {
-  { -0.0000000000000000, 0.30000000000000004, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17408628437042845, 0.30000000000000004, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34561356761638401, 0.30000000000000004, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.51257058617875850, 0.30000000000000004, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.67382207124602866, 0.30000000000000004, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.82914751587825131, 0.30000000000000004, 0.29999999999999999,
-          0.87266462599716477 },
-  { 0.97907434814374950, 0.30000000000000004, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.1246399297351584, 0.30000000000000004, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.2671793970398146, 0.30000000000000004, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.4081767433479089, 0.30000000000000004, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.30000000000000004, nu=0.29999999999999999.
-template <typename Tp>
-void test124()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data124)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data124[i].k), Tp(data124[i].nu),
-                   Tp(data124[i].phi));
-      const Tp f0 = data124[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.2247497610332889e-16
+// mean(f - f_Boost): 6.6613381477509390e-17
+// variance(f - f_Boost): 1.7591111235252501e-32
+// stddev(f - f_Boost): 1.3263148659067538e-16
+const testcase_ellint_3<double>
+data123[10] =
+{
+  { 0.0000000000000000, 0.30000000000000004, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17496614335337535, 0.30000000000000004, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35250745937139372, 0.30000000000000004, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53506875002836884, 0.30000000000000004, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72479106622248191, 0.30000000000000004, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.92326451535891607, 0.30000000000000004, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1312092060698349, 0.30000000000000004, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3481473154592321, 0.30000000000000004, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5722049569662750, 0.30000000000000004, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8002173372290500, 0.30000000000000004, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler123 = 2.5000000000000020e-13;
+
+// Test data for k=0.30000000000000004, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.1678685180047551e-16
+// mean(f - f_Boost): 1.0547118733938987e-16
+// variance(f - f_Boost): 7.5633408838247182e-32
+// stddev(f - f_Boost): 2.7501528837184157e-16
+const testcase_ellint_3<double>
+data124[10] =
+{
+  { 0.0000000000000000, 0.30000000000000004, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17514404084107435, 0.30000000000000004, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35394619108645647, 0.30000000000000004, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.54000325463372689, 0.30000000000000004, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.73670193794067651, 0.30000000000000004, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.94689345491722177, 0.30000000000000004, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.1723274608389140, 0.30000000000000004, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.4128880552936287, 0.30000000000000004, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.6659010047449661, 0.30000000000000004, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 1.9260216862473254, 0.30000000000000004, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler124 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004, nu=0.40000000000000002.
-testcase_ellint_3<double> data125[] = {
-  { -0.0000000000000000, 0.30000000000000004, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17391220945982730, 0.30000000000000004, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34429133937639689, 0.30000000000000004, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.50845471668581632, 0.30000000000000004, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.66502347027873854, 0.30000000000000004, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.81389191978012254, 0.30000000000000004, 0.40000000000000002,
-          0.87266462599716477 },
-  { 0.95590618002140593, 0.30000000000000004, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.0924915195213121, 0.30000000000000004, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.2253651604038058, 0.30000000000000004, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.3563643538969761, 0.30000000000000004, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.30000000000000004, nu=0.40000000000000002.
-template <typename Tp>
-void test125()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data125)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data125[i].k), Tp(data125[i].nu),
-                   Tp(data125[i].phi));
-      const Tp f0 = data125[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.3983279132797385e-16
+// mean(f - f_Boost): 1.1657341758564144e-16
+// variance(f - f_Boost): 1.8245832308692586e-31
+// stddev(f - f_Boost): 4.2715140534349863e-16
+const testcase_ellint_3<double>
+data125[10] =
+{
+  { 0.0000000000000000, 0.30000000000000004, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17532259000954434, 0.30000000000000004, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35540612770983693, 0.30000000000000004, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54510265552938919, 0.30000000000000004, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.74932476310965057, 0.30000000000000004, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.97272793583093109, 0.30000000000000004, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2188928987074241, 0.30000000000000004, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.4888771674085941, 0.30000000000000004, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.7794558498219191, 0.30000000000000004, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.0822121773175528, 0.30000000000000004, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler125 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004, nu=0.50000000000000000.
-testcase_ellint_3<double> data126[] = {
-  { -0.0000000000000000, 0.30000000000000004, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17373875742088235, 0.30000000000000004, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34298690571124157, 0.30000000000000004, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.50445214859646936, 0.30000000000000004, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.65660648352418516, 0.30000000000000004, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.79953670639287289, 0.30000000000000004, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.93443393926588558, 0.30000000000000004, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.0630838369016911, 0.30000000000000004, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.1875197325653026, 0.30000000000000004, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.3098448759814960, 0.30000000000000004, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.30000000000000004, nu=0.50000000000000000.
-template <typename Tp>
-void test126()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data126)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data126[i].k), Tp(data126[i].nu),
-                   Tp(data126[i].phi));
-      const Tp f0 = data126[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.30000000000000004, nu=0.59999999999999998.
-testcase_ellint_3<double> data127[] = {
-  { -0.0000000000000000, 0.30000000000000004, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17356592428950826, 0.30000000000000004, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34169984536697379, 0.30000000000000004, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.50055748266498457, 0.30000000000000004, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.64854298527106768, 0.30000000000000004, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.78599329284207431, 0.30000000000000004, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.91445452089128221, 0.30000000000000004, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.0360412952290587, 0.30000000000000004, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.1530473919778639, 0.30000000000000004, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.2677758800420666, 0.30000000000000004, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.30000000000000004, nu=0.59999999999999998.
-template <typename Tp>
-void test127()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data127)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data127[i].k), Tp(data127[i].nu),
-                   Tp(data127[i].phi));
-      const Tp f0 = data127[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.30000000000000004, nu=0.69999999999999996.
-testcase_ellint_3<double> data128[] = {
-  { -0.0000000000000000, 0.30000000000000004, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17339370613812227, 0.30000000000000004, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34042975138455933, 0.30000000000000004, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.49676568368075985, 0.30000000000000004, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.64080774055753720, 0.30000000000000004, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.77318507779667278, 0.30000000000000004, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.89579782346548631, 0.30000000000000004, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.0110573286052202, 0.30000000000000004, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.1214710972949633, 0.30000000000000004, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.2294913236274980, 0.30000000000000004, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.30000000000000004, nu=0.69999999999999996.
-template <typename Tp>
-void test128()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data128)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data128[i].k), Tp(data128[i].nu),
-                   Tp(data128[i].phi));
-      const Tp f0 = data128[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.0516138451673425e-16
+// mean(f - f_Boost): 4.7184478546569152e-17
+// variance(f - f_Boost): 1.9448563670505968e-32
+// stddev(f - f_Boost): 1.3945810722401896e-16
+const testcase_ellint_3<double>
+data126[10] =
+{
+  { 0.0000000000000000, 0.30000000000000004, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17550179513158179, 0.30000000000000004, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35688783251681200, 0.30000000000000004, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55037700010142798, 0.30000000000000004, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.76273839789895992, 0.30000000000000004, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0011570518830419, 0.30000000000000004, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2722987414055109, 0.30000000000000004, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5799590511080066, 0.30000000000000004, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.9212367220124293, 0.30000000000000004, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2833505881933971, 0.30000000000000004, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler126 = 2.5000000000000020e-13;
+
+// Test data for k=0.30000000000000004, nu=0.60000000000000009.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.2121157428443725e-16
+// mean(f - f_Boost): 1.9428902930940239e-16
+// variance(f - f_Boost): 1.5987596229703424e-31
+// stddev(f - f_Boost): 3.9984492281012430e-16
+const testcase_ellint_3<double>
+data127[10] =
+{
+  { 0.0000000000000000, 0.30000000000000004, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17568166052076745, 0.30000000000000004, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.35839189074731181, 0.30000000000000004, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.55583724744367558, 0.30000000000000004, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.77703498090888223, 0.30000000000000004, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0326772113675962, 0.30000000000000004, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.3345139983717369, 0.30000000000000004, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.6921742922838403, 0.30000000000000004, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.1056608968472186, 0.30000000000000004, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 2.5560975528589061, 0.30000000000000004, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler127 = 2.5000000000000020e-13;
+
+// Test data for k=0.30000000000000004, nu=0.70000000000000007.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.0088945789059381e-16
+// mean(f - f_Boost): 2.1094237467877973e-16
+// variance(f - f_Boost): 3.0253363535298873e-31
+// stddev(f - f_Boost): 5.5003057674368314e-16
+const testcase_ellint_3<double>
+data128[10] =
+{
+  { 0.0000000000000000, 0.30000000000000004, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17586219053197988, 0.30000000000000004, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.35991891074557669, 0.30000000000000004, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.56149538019961731, 0.30000000000000004, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.79232303189667685, 0.30000000000000004, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.0679345542878826, 0.30000000000000004, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.4084400085913955, 0.30000000000000004, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 1.8357382859296454, 0.30000000000000004, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.3604197996171519, 0.30000000000000004, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 2.9562123549913872, 0.30000000000000004, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler128 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004, nu=0.80000000000000004.
-testcase_ellint_3<double> data129[] = {
-  { -0.0000000000000000, 0.30000000000000004, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17322209907520361, 0.30000000000000004, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.33917623046949996, 0.30000000000000004, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.49307204894329176, 0.30000000000000004, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.63337802830291723, 0.30000000000000004, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.76104540997689407, 0.30000000000000004, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.87832009635450736, 0.30000000000000004, 0.80000000000000004,
-          1.0471975511965976 },
-  { 0.98787879723171790, 0.30000000000000004, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.0924036340069336, 0.30000000000000004, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.1944567571590046, 0.30000000000000004, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.30000000000000004, nu=0.80000000000000004.
-template <typename Tp>
-void test129()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data129)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data129[i].k), Tp(data129[i].nu),
-                   Tp(data129[i].phi));
-      const Tp f0 = data129[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 6.1197887707781618e-16
+// mean(f - f_Boost): 3.4416913763379854e-16
+// variance(f - f_Boost): 4.3461914185990199e-31
+// stddev(f - f_Boost): 6.5925650687718054e-16
+const testcase_ellint_3<double>
+data129[10] =
+{
+  { 0.0000000000000000, 0.30000000000000004, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17604338956191670, 0.30000000000000004, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36146952517410791, 0.30000000000000004, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56736453393774644, 0.30000000000000004, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.80873149979001091, 0.30000000000000004, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1077903069860620, 0.30000000000000004, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.4985874311132998, 0.30000000000000004, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.0298167266724954, 0.30000000000000004, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.7483929054985432, 0.30000000000000004, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.6283050484567170, 0.30000000000000004, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler129 = 2.5000000000000020e-13;
 
 // Test data for k=0.30000000000000004, nu=0.90000000000000002.
-testcase_ellint_3<double> data130[] = {
-  { -0.0000000000000000, 0.30000000000000004, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17305109924485948, 0.30000000000000004, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.33793890239556984, 0.30000000000000004, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.48947218005089738, 0.30000000000000004, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.62623332340775151, 0.30000000000000004, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.74951596581511148, 0.30000000000000004, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.86189886597756005, 0.30000000000000004, 0.90000000000000002,
-          1.0471975511965976 },
-  { 0.96629451153092005, 0.30000000000000004, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.0655269133492680, 0.30000000000000004, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.1622376896064912, 0.30000000000000004, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.30000000000000004, nu=0.90000000000000002.
-template <typename Tp>
-void test130()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data130)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data130[i].k), Tp(data130[i].nu),
-                   Tp(data130[i].phi));
-      const Tp f0 = data130[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.39999999999999991, nu=0.0000000000000000.
-testcase_ellint_3<double> data131[] = {
-  { -0.0000000000000000, 0.39999999999999991, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17467414669441531, 0.39999999999999991, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.35018222772483443, 0.39999999999999991, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.52729015917508748, 0.39999999999999991, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.70662374407341255, 0.39999999999999991, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.88859210497602170, 0.39999999999999991, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.0733136290471379, 0.39999999999999991, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.2605612170157061, 0.39999999999999991, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.4497513956433437, 0.39999999999999991, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.6399998658645112, 0.39999999999999991, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.39999999999999991, nu=0.0000000000000000.
-template <typename Tp>
-void test131()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data131)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data131[i].k), Tp(data131[i].nu),
-                   Tp(data131[i].phi));
-      const Tp f0 = data131[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.39999999999999991, nu=0.10000000000000001.
-testcase_ellint_3<double> data132[] = {
-  { -0.0000000000000000, 0.39999999999999991, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17449806706684673, 0.39999999999999991, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.34880048623856075, 0.39999999999999991, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.52277322065757403, 0.39999999999999991, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.69638072056918376, 0.39999999999999991, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.86968426619831540, 0.39999999999999991, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.0428044206578095, 0.39999999999999991, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.2158651158274378, 0.39999999999999991, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.3889447129893322, 0.39999999999999991, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.5620566886683604, 0.39999999999999991, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.39999999999999991, nu=0.10000000000000001.
-template <typename Tp>
-void test132()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data132)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data132[i].k), Tp(data132[i].nu),
-                   Tp(data132[i].phi));
-      const Tp f0 = data132[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.39999999999999991, nu=0.20000000000000001.
-testcase_ellint_3<double> data133[] = {
-  { -0.0000000000000000, 0.39999999999999991, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17432262290723399, 0.39999999999999991, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34743795258968596, 0.39999999999999991, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.51838919472805123, 0.39999999999999991, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.68663134739057918, 0.39999999999999991, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.85206432981833979, 0.39999999999999991, 0.20000000000000001,
-          0.87266462599716477 },
-  { 1.0149595349004430, 0.39999999999999991, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.1758349405464676, 0.39999999999999991, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.3353337673882635, 0.39999999999999991, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.4941414344266770, 0.39999999999999991, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.39999999999999991, nu=0.20000000000000001.
-template <typename Tp>
-void test133()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data133)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data133[i].k), Tp(data133[i].nu),
-                   Tp(data133[i].phi));
-      const Tp f0 = data133[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.39999999999999991, nu=0.29999999999999999.
-testcase_ellint_3<double> data134[] = {
-  { -0.0000000000000000, 0.39999999999999991, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17414781013591543, 0.39999999999999991, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34609415696777285, 0.39999999999999991, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.51413131295862546, 0.39999999999999991, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.67733527622935630, 0.39999999999999991, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.83558675182733266, 0.39999999999999991, 0.29999999999999999,
-          0.87266462599716477 },
-  { 0.98940140808865906, 0.39999999999999991, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.1396968797728058, 0.39999999999999991, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.2875920037865087, 0.39999999999999991, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.4342789859950078, 0.39999999999999991, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.39999999999999991, nu=0.29999999999999999.
-template <typename Tp>
-void test134()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data134)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data134[i].k), Tp(data134[i].nu),
-                   Tp(data134[i].phi));
-      const Tp f0 = data134[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.39999999999999991, nu=0.40000000000000002.
-testcase_ellint_3<double> data135[] = {
-  { -0.0000000000000000, 0.39999999999999991, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17397362471112710, 0.39999999999999991, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34476864603333196, 0.39999999999999991, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.50999329415379357, 0.39999999999999991, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.66845674551396017, 0.39999999999999991, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.82012848346231748, 0.39999999999999991, 0.40000000000000002,
-          0.87266462599716477 },
-  { 0.96582449258349057, 0.39999999999999991, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.1068473749476286, 0.39999999999999991, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.2447132729159986, 0.39999999999999991, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.3809986210732901, 0.39999999999999991, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.39999999999999991, nu=0.40000000000000002.
-template <typename Tp>
-void test135()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data135)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data135[i].k), Tp(data135[i].nu),
-                   Tp(data135[i].phi));
-      const Tp f0 = data135[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.39999999999999991, nu=0.50000000000000000.
-testcase_ellint_3<double> data136[] = {
-  { -0.0000000000000000, 0.39999999999999991, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17380006262854139, 0.39999999999999991, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34346098216756610, 0.39999999999999991, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.50596929935059420, 0.39999999999999991, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.65996392089131262, 0.39999999999999991, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.80558463511364786, 0.39999999999999991, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.94397834522857704, 0.39999999999999991, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.0768075114108115, 0.39999999999999991, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.2059184624251329, 0.39999999999999991, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.3331797176377398, 0.39999999999999991, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.39999999999999991, nu=0.50000000000000000.
-template <typename Tp>
-void test136()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data136)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data136[i].k), Tp(data136[i].nu),
-                   Tp(data136[i].phi));
-      const Tp f0 = data136[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.39999999999999991, nu=0.59999999999999998.
-testcase_ellint_3<double> data137[] = {
-  { -0.0000000000000000, 0.39999999999999991, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17362711992081248, 0.39999999999999991, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34217074276403953, 0.39999999999999991, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.50205389185761617, 0.39999999999999991, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.65182834920372745, 0.39999999999999991, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.79186512820565136, 0.39999999999999991, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.92365535916287134, 0.39999999999999991, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.0491915663957907, 0.39999999999999991, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.1705934291745104, 0.39999999999999991, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.2899514672527024, 0.39999999999999991, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.39999999999999991, nu=0.59999999999999998.
-template <typename Tp>
-void test137()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data137)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data137[i].k), Tp(data137[i].nu),
-                   Tp(data137[i].phi));
-      const Tp f0 = data137[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.39999999999999991, nu=0.69999999999999996.
-testcase_ellint_3<double> data138[] = {
-  { -0.0000000000000000, 0.39999999999999991, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17345479265712871, 0.39999999999999991, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34089751955950354, 0.39999999999999991, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.49824200167361343, 0.39999999999999991, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.64402450341199413, 0.39999999999999991, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.77889207804122873, 0.39999999999999991, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.90468169720957992, 0.39999999999999991, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.0236847823692916, 0.39999999999999991, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.1382465247425164, 0.39999999999999991, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.2506255923253344, 0.39999999999999991, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.39999999999999991, nu=0.69999999999999996.
-template <typename Tp>
-void test138()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data138)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data138[i].k), Tp(data138[i].nu),
-                   Tp(data138[i].phi));
-      const Tp f0 = data138[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.39999999999999991, nu=0.80000000000000004.
-testcase_ellint_3<double> data139[] = {
-  { -0.0000000000000000, 0.39999999999999991, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17328307694277156, 0.39999999999999991, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.33964091800132007, 0.39999999999999991, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.49452889372467451, 0.39999999999999991, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.63652940095937327, 0.39999999999999991, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.76659772511159097, 0.39999999999999991, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.88691047977338111, 0.39999999999999991, 0.80000000000000004,
-          1.0471975511965976 },
-  { 1.0000273200611640, 0.39999999999999991, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.1084787902188007, 0.39999999999999991, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.2146499565727209, 0.39999999999999991, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.39999999999999991, nu=0.80000000000000004.
-template <typename Tp>
-void test139()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data139)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data139[i].k), Tp(data139[i].nu),
-                   Tp(data139[i].phi));
-      const Tp f0 = data139[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.39999999999999991, nu=0.90000000000000002.
-testcase_ellint_3<double> data140[] = {
-  { -0.0000000000000000, 0.39999999999999991, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17311196891868130, 0.39999999999999991, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.33840055664911906, 0.39999999999999991, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.49091013944075340, 0.39999999999999991, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.62932228186809591, 0.39999999999999991, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.75492278323019801, 0.39999999999999991, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.87021659043854294, 0.39999999999999991, 0.90000000000000002,
-          1.0471975511965976 },
-  { 0.97800245228239246, 0.39999999999999991, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.0809625773173694, 0.39999999999999991, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.1815758115929846, 0.39999999999999991, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.39999999999999991, nu=0.90000000000000002.
-template <typename Tp>
-void test140()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data140)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data140[i].k), Tp(data140[i].nu),
-                   Tp(data140[i].phi));
-      const Tp f0 = data140[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 5.1301806687926828e-16
+// mean(f - f_Boost): 4.1633363423443370e-16
+// variance(f - f_Boost): 2.2835347143080263e-31
+// stddev(f - f_Boost): 4.7786344433405093e-16
+const testcase_ellint_3<double>
+data130[10] =
+{
+  { 0.0000000000000000, 0.30000000000000004, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17622526204962433, 0.30000000000000004, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36304439230777141, 0.30000000000000004, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57345914744719195, 0.30000000000000004, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.82641512928845162, 0.30000000000000004, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1534256210757743, 0.30000000000000004, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.6124900353411677, 0.30000000000000004, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.3165905514845089, 0.30000000000000004, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.4625619526539824, 0.30000000000000004, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.1479514944016787, 0.30000000000000004, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler130 = 2.5000000000000020e-13;
+
+// Test data for k=0.40000000000000013, nu=0.0000000000000000.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.0831445028587608e-15
+// mean(f - f_Boost): 1.7486012637846215e-16
+// variance(f - f_Boost): 3.1664095331106078e-31
+// stddev(f - f_Boost): 5.6270858649132121e-16
+const testcase_ellint_3<double>
+data131[10] =
+{
+  { 0.0000000000000000, 0.40000000000000013, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17467414669441528, 0.40000000000000013, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35018222772483443, 0.40000000000000013, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52729015917508748, 0.40000000000000013, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.70662374407341244, 0.40000000000000013, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.88859210497602159, 0.40000000000000013, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0733136290471381, 0.40000000000000013, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2605612170157066, 0.40000000000000013, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4497513956433439, 0.40000000000000013, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.6399998658645112, 0.40000000000000013, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler131 = 2.5000000000000020e-13;
+
+// Test data for k=0.40000000000000013, nu=0.10000000000000001.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.0263824105456986e-15
+// mean(f - f_Boost): 1.7486012637846215e-16
+// variance(f - f_Boost): 3.1664095331106078e-31
+// stddev(f - f_Boost): 5.6270858649132121e-16
+const testcase_ellint_3<double>
+data132[10] =
+{
+  { 0.0000000000000000, 0.40000000000000013, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17485086590796767, 0.40000000000000013, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35158366412506992, 0.40000000000000013, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53194731675711726, 0.40000000000000013, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.71740615528010931, 0.40000000000000013, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.90896157773487030, 0.40000000000000013, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1069605483834348, 0.40000000000000013, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3109353428823001, 0.40000000000000013, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5195460789903450, 0.40000000000000013, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7306968836847190, 0.40000000000000013, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler132 = 2.5000000000000020e-13;
+
+// Test data for k=0.40000000000000013, nu=0.20000000000000001.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 9.6644296021947179e-16
+// mean(f - f_Boost): 2.0816681711721685e-16
+// variance(f - f_Boost): 3.0360740073926687e-31
+// stddev(f - f_Boost): 5.5100580826273227e-16
+const testcase_ellint_3<double>
+data133[10] =
+{
+  { 0.0000000000000000, 0.40000000000000013, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17502822886437389, 0.40000000000000013, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35300530062530805, 0.40000000000000013, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53675259548210896, 0.40000000000000013, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72878006428676934, 0.40000000000000013, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.93100219010583574, 0.40000000000000013, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1443487271187611, 0.40000000000000013, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3683427764108813, 0.40000000000000013, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6008221459300933, 0.40000000000000013, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8380358826317627, 0.40000000000000013, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler133 = 2.5000000000000020e-13;
+
+// Test data for k=0.40000000000000013, nu=0.30000000000000004.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 9.0271556462838835e-16
+// mean(f - f_Boost): 2.0816681711721685e-16
+// variance(f - f_Boost): 3.0360740073926687e-31
+// stddev(f - f_Boost): 5.5100580826273227e-16
+const testcase_ellint_3<double>
+data134[10] =
+{
+  { 0.0000000000000000, 0.40000000000000013, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17520623975982899, 0.40000000000000013, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35444766141612105, 0.40000000000000013, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.54171455841536009, 0.40000000000000013, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.74080517001084012, 0.40000000000000013, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.95496950509296574, 0.40000000000000013, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.1862627879844718, 0.40000000000000013, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.4346501803799458, 0.40000000000000013, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.6971744798077699, 0.40000000000000013, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 1.9677924132520139, 0.40000000000000013, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler134 = 2.5000000000000020e-13;
+
+// Test data for k=0.40000000000000013, nu=0.40000000000000002.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 8.3436329231972794e-16
+// mean(f - f_Boost): 2.3037127760972000e-16
+// variance(f - f_Boost): 2.9507053793392374e-31
+// stddev(f - f_Boost): 5.4320395611033958e-16
+const testcase_ellint_3<double>
+data135[10] =
+{
+  { 0.0000000000000000, 0.40000000000000013, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17538490283034375, 0.40000000000000013, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35591129064319948, 0.40000000000000013, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54684250413264535, 0.40000000000000013, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.75355027742668290, 0.40000000000000013, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.98117935026780634, 0.40000000000000013, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2337464222030736, 0.40000000000000013, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.5125183419289221, 0.40000000000000013, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.8140224451130313, 0.40000000000000013, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.1289968719280026, 0.40000000000000013, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler135 = 2.5000000000000020e-13;
+
+// Test data for k=0.40000000000000013, nu=0.50000000000000000.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.7013794022122431e-16
+// mean(f - f_Boost): 2.3037127760972000e-16
+// variance(f - f_Boost): 1.4989821857033475e-31
+// stddev(f - f_Boost): 3.8716691306248618e-16
+const testcase_ellint_3<double>
+data136[10] =
+{
+  { 0.0000000000000000, 0.40000000000000013, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17556422235224273, 0.40000000000000013, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35739675341763921, 0.40000000000000013, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55214655195037188, 0.40000000000000013, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.76709520942047438, 0.40000000000000013, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0100278761577499, 0.40000000000000013, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2882265661384342, 0.40000000000000013, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.6059059780051876, 0.40000000000000013, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.9600182740224081, 0.40000000000000013, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.3367461373176512, 0.40000000000000013, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler136 = 2.5000000000000020e-13;
+
+// Test data for k=0.40000000000000013, nu=0.60000000000000009.
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 8.4792115132836117e-16
+// mean(f - f_Boost): 2.3037127760972000e-16
+// variance(f - f_Boost): 4.8893797490374802e-31
+// stddev(f - f_Boost): 6.9924099915819294e-16
+const testcase_ellint_3<double>
+data137[10] =
+{
+  { 0.0000000000000000, 0.40000000000000013, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17574420264267029, 0.40000000000000013, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.35890463689046265, 0.40000000000000013, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.55763773975194486, 0.40000000000000013, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.78153324227761267, 0.40000000000000013, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0420205885765887, 0.40000000000000013, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.3517205230381770, 0.40000000000000013, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.7210360970313896, 0.40000000000000013, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.1500780510169246, 0.40000000000000013, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 2.6186940209850191, 0.40000000000000013, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler137 = 2.5000000000000020e-13;
+
+// Test data for k=0.40000000000000013, nu=0.70000000000000007.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.8573292020719759e-16
+// mean(f - f_Boost): 2.2759572004815707e-16
+// variance(f - f_Boost): 2.9613098824898137e-31
+// stddev(f - f_Boost): 5.4417918762938862e-16
+const testcase_ellint_3<double>
+data138[10] =
+{
+  { 0.0000000000000000, 0.40000000000000013, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17592484806010436, 0.40000000000000013, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.36043555139631439, 0.40000000000000013, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.56332813669944881, 0.40000000000000013, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.79697424562157548, 0.40000000000000013, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.0778155987523672, 0.40000000000000013, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.4272018169896268, 0.40000000000000013, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 1.8684377907453382, 0.40000000000000013, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.4128677409207473, 0.40000000000000013, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 3.0327078743873246, 0.40000000000000013, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler138 = 2.5000000000000020e-13;
+
+// Test data for k=0.40000000000000013, nu=0.80000000000000004.
+// max(|f - f_Boost|): 3.5527136788005009e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 9.5273712585384737e-16
+// mean(f - f_Boost): 4.5241588253475131e-16
+// variance(f - f_Boost): 1.1866477068555882e-30
+// stddev(f - f_Boost): 1.0893336067778265e-15
+const testcase_ellint_3<double>
+data139[10] =
+{
+  { 0.0000000000000000, 0.40000000000000013, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17610616300487833, 0.40000000000000013, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36199013167171978, 0.40000000000000013, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.56923097361842434, 0.40000000000000013, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.81354878456624347, 0.40000000000000013, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1182902719261825, 0.40000000000000013, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.5192950589409022, 0.40000000000000013, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.0678761710223981, 0.40000000000000013, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.8135222249879788, 0.40000000000000013, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.7289548002199902, 0.40000000000000013, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler139 = 2.5000000000000020e-13;
+
+// Test data for k=0.40000000000000013, nu=0.90000000000000002.
+// max(|f - f_Boost|): 6.2172489379008766e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.1718379478872251e-15
+// mean(f - f_Boost): 8.4099394115355610e-16
+// variance(f - f_Boost): 3.5684096037099424e-30
+// stddev(f - f_Boost): 1.8890234523980751e-15
+const testcase_ellint_3<double>
+data140[10] =
+{
+  { 0.0000000000000000, 0.40000000000000013, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17628815191971123, 0.40000000000000013, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36356903815378772, 0.40000000000000013, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57536079447000310, 0.40000000000000013, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.83141355850172571, 0.40000000000000013, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1646481598721361, 0.40000000000000013, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.6357275034001995, 0.40000000000000013, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.3628787566572402, 0.40000000000000013, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.5521010369134962, 0.40000000000000013, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.3055535102872513, 0.40000000000000013, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler140 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000, nu=0.0000000000000000.
-testcase_ellint_3<double> data141[] = {
-  { -0.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17475385514035785, 0.50000000000000000, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.35081868470101585, 0.50000000000000000, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.52942862705190585, 0.50000000000000000, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.71164727562630326, 0.50000000000000000, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.89824523594227768, 0.50000000000000000, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.0895506700518851, 0.50000000000000000, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.2853005857432933, 0.50000000000000000, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.4845545520549484, 0.50000000000000000, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.6857503548125963, 0.50000000000000000, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.50000000000000000, nu=0.0000000000000000.
-template <typename Tp>
-void test141()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data141)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data141[i].k), Tp(data141[i].nu),
-                   Tp(data141[i].phi));
-      const Tp f0 = data141[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.4551389361831220e-16
+// mean(f - f_Boost): -1.3877787807814457e-17
+// variance(f - f_Boost): 2.5893058141206173e-32
+// stddev(f - f_Boost): 1.6091320064309879e-16
+const testcase_ellint_3<double>
+data141[10] =
+{
+  { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17475385514035785, 0.50000000000000000, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35081868470101579, 0.50000000000000000, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.52942862705190574, 0.50000000000000000, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.71164727562630326, 0.50000000000000000, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.89824523594227768, 0.50000000000000000, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.0895506700518853, 0.50000000000000000, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.2853005857432933, 0.50000000000000000, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.4845545520549488, 0.50000000000000000, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.6857503548125961, 0.50000000000000000, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler141 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000, nu=0.10000000000000001.
-testcase_ellint_3<double> data142[] = {
-  { -0.0000000000000000, 0.50000000000000000, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17457763120814676, 0.50000000000000000, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.34943246340849154, 0.50000000000000000, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.52487937869610801, 0.50000000000000000, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.70127785096388395, 0.50000000000000000, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.87898815988624479, 0.50000000000000000, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.0582764576094172, 0.50000000000000000, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.2391936844060207, 0.50000000000000000, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.4214793542995841, 0.50000000000000000, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.6045524936084892, 0.50000000000000000, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.50000000000000000, nu=0.10000000000000001.
-template <typename Tp>
-void test142()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data142)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data142[i].k), Tp(data142[i].nu),
-                   Tp(data142[i].phi));
-      const Tp f0 = data142[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.7416868347177582e-16
+// mean(f - f_Boost): 2.7755575615628915e-18
+// variance(f - f_Boost): 5.4326441655972001e-32
+// stddev(f - f_Boost): 2.3308033305273100e-16
+const testcase_ellint_3<double>
+data142[10] =
+{
+  { 0.0000000000000000, 0.50000000000000000, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17493071928248824, 0.50000000000000000, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35222467688034798, 0.50000000000000000, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53411928652008112, 0.50000000000000000, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72256398117177589, 0.50000000000000000, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.91899583232771009, 0.50000000000000000, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1240549163055360, 0.50000000000000000, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3372938086286021, 0.50000000000000000, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.5570024469132429, 0.50000000000000000, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.7803034946545480, 0.50000000000000000, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler142 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000, nu=0.20000000000000001.
-testcase_ellint_3<double> data143[] = {
-  { -0.0000000000000000, 0.50000000000000000, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17440204336345433, 0.50000000000000000, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34806552388338824, 0.50000000000000000, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.52046416757129821, 0.50000000000000000, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.69140924550993876, 0.50000000000000000, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.86104678636125520, 0.50000000000000000, 0.20000000000000001,
-          0.87266462599716477 },
-  { 1.0297439459053981, 0.50000000000000000, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.1979214112912036, 0.50000000000000000, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.3659033858648930, 0.50000000000000000, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.5338490483665983, 0.50000000000000000, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.50000000000000000, nu=0.20000000000000001.
-template <typename Tp>
-void test143()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data143)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data143[i].k), Tp(data143[i].nu),
-                   Tp(data143[i].phi));
-      const Tp f0 = data143[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.50000000000000000, nu=0.29999999999999999.
-testcase_ellint_3<double> data144[] = {
-  { -0.0000000000000000, 0.50000000000000000, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17422708752228896, 0.50000000000000000, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34671739434855858, 0.50000000000000000, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.51617616305641889, 0.50000000000000000, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.68200047612545178, 0.50000000000000000, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.84427217869498372, 0.50000000000000000, 0.29999999999999999,
-          0.87266462599716477 },
-  { 1.0035637821389782, 0.50000000000000000, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.1606800483933113, 0.50000000000000000, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.3164407134643459, 0.50000000000000000, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.4715681939859637, 0.50000000000000000, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.50000000000000000, nu=0.29999999999999999.
-template <typename Tp>
-void test144()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data144)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data144[i].k), Tp(data144[i].nu),
-                   Tp(data144[i].phi));
-      const Tp f0 = data144[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.1198767993730867e-16
+// mean(f - f_Boost): 2.7755575615628914e-17
+// variance(f - f_Boost): 5.0311947683004831e-32
+// stddev(f - f_Boost): 2.2430324938128922e-16
+const testcase_ellint_3<double>
+data143[10] =
+{
+  { 0.0000000000000000, 0.50000000000000000, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17510822779582402, 0.50000000000000000, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35365094725531487, 0.50000000000000000, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53895933237328697, 0.50000000000000000, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.73408090840070794, 0.50000000000000000, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.94145442818535396, 0.50000000000000000, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1624120186296487, 0.50000000000000000, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3965823372867114, 0.50000000000000000, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6414308440430099, 0.50000000000000000, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8922947612264018, 0.50000000000000000, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler143 = 2.5000000000000020e-13;
+
+// Test data for k=0.50000000000000000, nu=0.30000000000000004.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.3800262770228813e-16
+// mean(f - f_Boost): 5.8286708792820721e-17
+// variance(f - f_Boost): 8.5027191584278157e-32
+// stddev(f - f_Boost): 2.9159422419567599e-16
+const testcase_ellint_3<double>
+data144[10] =
+{
+  { 0.0000000000000000, 0.50000000000000000, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17528638488102041, 0.50000000000000000, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35509802222332720, 0.50000000000000000, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.54395740731866193, 0.50000000000000000, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.74625871438752667, 0.50000000000000000, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.96588271186092023, 0.50000000000000000, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.2054319584357329, 0.50000000000000000, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.4651077994832871, 0.50000000000000000, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.7416018368052644, 0.50000000000000000, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 2.0277924458111314, 0.50000000000000000, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler144 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000, nu=0.40000000000000002.
-testcase_ellint_3<double> data145[] = {
-  { -0.0000000000000000, 0.50000000000000000, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17405275963859917, 0.50000000000000000, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34538761957029329, 0.50000000000000000, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.51200902646603919, 0.50000000000000000, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.67301522212868792, 0.50000000000000000, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.82853844466313320, 0.50000000000000000, 0.40000000000000002,
-          0.87266462599716477 },
-  { 0.97942097862681488, 0.50000000000000000, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.1268429801220616, 0.50000000000000000, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.2720406704533922, 0.50000000000000000, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.4161679518465340, 0.50000000000000000, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.50000000000000000, nu=0.40000000000000002.
-template <typename Tp>
-void test145()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data145)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data145[i].k), Tp(data145[i].nu),
-                   Tp(data145[i].phi));
-      const Tp f0 = data145[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.0439932918341581e-16
+// mean(f - f_Boost): 3.0531133177191807e-17
+// variance(f - f_Boost): 9.0809736800018602e-32
+// stddev(f - f_Boost): 3.0134653938616686e-16
+const testcase_ellint_3<double>
+data145[10] =
+{
+  { 0.0000000000000000, 0.50000000000000000, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17546519477859268, 0.50000000000000000, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35656644822531680, 0.50000000000000000, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.54912289677411319, 0.50000000000000000, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.75916731611690047, 0.50000000000000000, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 0.99260415631328214, 0.50000000000000000, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2541925856918670, 0.50000000000000000, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.5456393705347609, 0.50000000000000000, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.8631904972952076, 0.50000000000000000, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.1962905366178065, 0.50000000000000000, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler145 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000, nu=0.50000000000000000.
-testcase_ellint_3<double> data146[] = {
-  { -0.0000000000000000, 0.50000000000000000, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17387905570381157, 0.50000000000000000, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34407576010465207, 0.50000000000000000, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.50795686560160835, 0.50000000000000000, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.66442115453330175, 0.50000000000000000, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.81373829119355345, 0.50000000000000000, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.95705743313235825, 0.50000000000000000, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.0959131991362556, 0.50000000000000000, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.2318900529754597, 0.50000000000000000, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.3664739530045971, 0.50000000000000000, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.50000000000000000, nu=0.50000000000000000.
-template <typename Tp>
-void test146()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data146)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data146[i].k), Tp(data146[i].nu),
-                   Tp(data146[i].phi));
-      const Tp f0 = data146[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.50000000000000000, nu=0.59999999999999998.
-testcase_ellint_3<double> data147[] = {
-  { -0.0000000000000000, 0.50000000000000000, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17370597174637581, 0.50000000000000000, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34278139158591414, 0.50000000000000000, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.50401419439302719, 0.50000000000000000, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.65618938076167221, 0.50000000000000000, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.79977959248855424, 0.50000000000000000, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.93625925190753545, 0.50000000000000000, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.0674905658379710, 0.50000000000000000, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.1953481298023048, 0.50000000000000000, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.3215740290190876, 0.50000000000000000, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.50000000000000000, nu=0.59999999999999998.
-template <typename Tp>
-void test147()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data147)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data147[i].k), Tp(data147[i].nu),
-                   Tp(data147[i].phi));
-      const Tp f0 = data147[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.50000000000000000, nu=0.69999999999999996.
-testcase_ellint_3<double> data148[] = {
-  { -0.0000000000000000, 0.50000000000000000, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17353350383131641, 0.50000000000000000, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34150410405436771, 0.50000000000000000, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.50017589696443487, 0.50000000000000000, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.64829398188419962, 0.50000000000000000, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.78658270782402073, 0.50000000000000000, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.91684738336675053, 0.50000000000000000, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.0412486789555937, 0.50000000000000000, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.1619021847612001, 0.50000000000000000, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.2807475181182502, 0.50000000000000000, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.50000000000000000, nu=0.69999999999999996.
-template <typename Tp>
-void test148()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data148)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data148[i].k), Tp(data148[i].nu),
-                   Tp(data148[i].phi));
-      const Tp f0 = data148[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.6797816859260978e-16
+// mean(f - f_Boost): 9.4368957093138303e-17
+// variance(f - f_Boost): 7.7794254682023874e-32
+// stddev(f - f_Boost): 2.7891621444803792e-16
+const testcase_ellint_3<double>
+data146[10] =
+{
+  { 0.0000000000000000, 0.50000000000000000, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17564466176941509, 0.50000000000000000, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35805679276065394, 0.50000000000000000, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55446601496200032, 0.50000000000000000, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.77288783578259013, 0.50000000000000000, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0220246013918972, 0.50000000000000000, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.3101681612463965, 0.50000000000000000, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.6422994881851025, 0.50000000000000000, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.0152636030998816, 0.50000000000000000, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.4136715042011945, 0.50000000000000000, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler146 = 2.5000000000000020e-13;
+
+// Test data for k=0.50000000000000000, nu=0.60000000000000009.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.9178421578645735e-16
+// mean(f - f_Boost): 1.3322676295501878e-16
+// variance(f - f_Boost): 1.7749370367472766e-31
+// stddev(f - f_Boost): 4.2130001622920411e-16
+const testcase_ellint_3<double>
+data147[10] =
+{
+  { 0.0000000000000000, 0.50000000000000000, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17582479017522740, 0.50000000000000000, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.35956964546660036, 0.50000000000000000, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.55999790372984193, 0.50000000000000000, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.78751507911209895, 0.50000000000000000, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0546620505035220, 0.50000000000000000, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.3754438357425935, 0.50000000000000000, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.7615727400820127, 0.50000000000000000, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.2134638067565242, 0.50000000000000000, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 2.7090491861753558, 0.50000000000000000, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler147 = 2.5000000000000020e-13;
+
+// Test data for k=0.50000000000000000, nu=0.70000000000000007.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.0745105182189226e-16
+// mean(f - f_Boost): 4.1633363423443370e-17
+// variance(f - f_Boost): 1.9996383743576116e-32
+// stddev(f - f_Boost): 1.4140857026211713e-16
+const testcase_ellint_3<double>
+data148[10] =
+{
+  { 0.0000000000000000, 0.50000000000000000, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17600558435914915, 0.50000000000000000, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.36110561926726259, 0.50000000000000000, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.56573074641137111, 0.50000000000000000, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.80316073084237205, 0.50000000000000000, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.0911910688131461, 0.50000000000000000, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.4530946406380640, 0.50000000000000000, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 1.9144386536785372, 0.50000000000000000, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.4878788958234970, 0.50000000000000000, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 3.1433945297859225, 0.50000000000000000, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler148 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000, nu=0.80000000000000004.
-testcase_ellint_3<double> data149[] = {
-  { -0.0000000000000000, 0.50000000000000000, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17336164805979126, 0.50000000000000000, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.34024350132086773, 0.50000000000000000, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.49643719555734084, 0.50000000000000000, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.64071162456976150, 0.50000000000000000, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.77407836177211908, 0.50000000000000000, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.89867058251905652, 0.50000000000000000, 0.80000000000000004,
-          1.0471975511965976 },
-  { 1.0169181822134912, 0.50000000000000000, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.1311363312779448, 0.50000000000000000, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.2434165408189539, 0.50000000000000000, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.50000000000000000, nu=0.80000000000000004.
-template <typename Tp>
-void test149()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data149)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data149[i].k), Tp(data149[i].nu),
-                   Tp(data149[i].phi));
-      const Tp f0 = data149[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.4380477375534667e-16
+// mean(f - f_Boost): 2.3037127760972000e-16
+// variance(f - f_Boost): 1.4989821857033475e-31
+// stddev(f - f_Boost): 3.8716691306248618e-16
+const testcase_ellint_3<double>
+data149[10] =
+{
+  { 0.0000000000000000, 0.50000000000000000, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17618704872620228, 0.50000000000000000, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36266535159745827, 0.50000000000000000, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.57167789954529158, 0.50000000000000000, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.81995752984315018, 0.50000000000000000, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1325112162158122, 0.50000000000000000, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.5479055930718042, 0.50000000000000000, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.1215243941010486, 0.50000000000000000, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.9069405767650132, 0.50000000000000000, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 3.8750701888108066, 0.50000000000000000, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler149 = 2.5000000000000020e-13;
 
 // Test data for k=0.50000000000000000, nu=0.90000000000000002.
-testcase_ellint_3<double> data150[] = {
-  { -0.0000000000000000, 0.50000000000000000, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17319040056865681, 0.50000000000000000, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.33899920036578557, 0.50000000000000000, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.49279362182695186, 0.50000000000000000, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.63342123379746151, 0.50000000000000000, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.76220595179550321, 0.50000000000000000, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.88160004743532294, 0.50000000000000000, 0.90000000000000002,
-          1.0471975511965976 },
-  { 0.99427448642310134, 0.50000000000000000, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.1027091512470093, 0.50000000000000000, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.2091116095504744, 0.50000000000000000, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.50000000000000000, nu=0.90000000000000002.
-template <typename Tp>
-void test150()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data150)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data150[i].k), Tp(data150[i].nu),
-                   Tp(data150[i].phi));
-      const Tp f0 = data150[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 3.6192315188521289e-16
+// mean(f - f_Boost): 3.5249581031848718e-16
+// variance(f - f_Boost): 2.5029385557256515e-31
+// stddev(f - f_Boost): 5.0029376927217987e-16
+const testcase_ellint_3<double>
+data150[10] =
+{
+  { 0.0000000000000000, 0.50000000000000000, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17636918772384180, 0.50000000000000000, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36424950570740700, 0.50000000000000000, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.57785404590231426, 0.50000000000000000, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.83806480521716531, 0.50000000000000000, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1798568683069752, 0.50000000000000000, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.6678766243739607, 0.50000000000000000, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.4282976450693483, 0.50000000000000000, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.6810787666126656, 0.50000000000000000, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.5355132096026454, 0.50000000000000000, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler150 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009, nu=0.0000000000000000.
-testcase_ellint_3<double> data151[] = {
-  { -0.0000000000000000, 0.60000000000000009, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17485154362988362, 0.60000000000000009, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.35160509865544326, 0.60000000000000009, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.53210652578446160, 0.60000000000000009, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.71805304664485670, 0.60000000000000009, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.91082759030195970, 0.60000000000000009, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.1112333229323366, 0.60000000000000009, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.3191461190365270, 0.60000000000000009, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.5332022105084775, 0.60000000000000009, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.7507538029157526, 0.60000000000000009, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.60000000000000009, nu=0.0000000000000000.
-template <typename Tp>
-void test151()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data151)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data151[i].k), Tp(data151[i].nu),
-                   Tp(data151[i].phi));
-      const Tp f0 = data151[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.3664899092028927e-16
+// mean(f - f_Boost): 3.0531133177191807e-17
+// variance(f - f_Boost): 7.8758646268991113e-33
+// stddev(f - f_Boost): 8.8746068233466605e-17
+const testcase_ellint_3<double>
+data151[10] =
+{
+  { 0.0000000000000000, 0.60000000000000009, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17485154362988359, 0.60000000000000009, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35160509865544320, 0.60000000000000009, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.53210652578446138, 0.60000000000000009, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.71805304664485659, 0.60000000000000009, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.91082759030195981, 0.60000000000000009, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.1112333229323361, 0.60000000000000009, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.3191461190365270, 0.60000000000000009, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.5332022105084779, 0.60000000000000009, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.7507538029157526, 0.60000000000000009, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler151 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009, nu=0.10000000000000001.
-testcase_ellint_3<double> data152[] = {
-  { -0.0000000000000000, 0.60000000000000009, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17467514275022014, 0.60000000000000009, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.35021333086258255, 0.60000000000000009, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.52751664092962713, 0.60000000000000009, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.70752126971957885, 0.60000000000000009, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.89111058756112871, 0.60000000000000009, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.0789241202877773, 0.60000000000000009, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.2710800210399946, 0.60000000000000009, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.4669060574440278, 0.60000000000000009, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.6648615773343014, 0.60000000000000009, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.60000000000000009, nu=0.10000000000000001.
-template <typename Tp>
-void test152()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data152)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data152[i].k), Tp(data152[i].nu),
-                   Tp(data152[i].phi));
-      const Tp f0 = data152[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.2335247010355137e-16
+// mean(f - f_Boost): 8.6042284408449634e-17
+// variance(f - f_Boost): 2.2835347143080263e-33
+// stddev(f - f_Boost): 4.7786344433405099e-17
+const testcase_ellint_3<double>
+data152[10] =
+{
+  { 0.0000000000000000, 0.60000000000000009, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17502858548476194, 0.60000000000000009, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35301673150537388, 0.60000000000000009, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.53683932476326812, 0.60000000000000009, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.72914228589586771, 0.60000000000000009, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.93208036718354692, 0.60000000000000009, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1468984688863377, 0.60000000000000009, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.3733904977062528, 0.60000000000000009, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6094225663372157, 0.60000000000000009, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.8508766487100685, 0.60000000000000009, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler152 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009, nu=0.20000000000000001.
-testcase_ellint_3<double> data153[] = {
-  { -0.0000000000000000, 0.60000000000000009, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17449937871800653, 0.60000000000000009, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34884093647346553, 0.60000000000000009, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.52306221119844110, 0.60000000000000009, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.69749955678982223, 0.60000000000000009, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.87274610682416853, 0.60000000000000009, 0.20000000000000001,
-          0.87266462599716477 },
-  { 1.0494620540750796, 0.60000000000000009, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.2280847305507339, 0.60000000000000009, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.4085436279696888, 0.60000000000000009, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.5901418016279374, 0.60000000000000009, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.60000000000000009, nu=0.20000000000000001.
-template <typename Tp>
-void test153()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data153)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data153[i].k), Tp(data153[i].nu),
-                   Tp(data153[i].phi));
-      const Tp f0 = data153[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.60000000000000009, nu=0.29999999999999999.
-testcase_ellint_3<double> data154[] = {
-  { -0.0000000000000000, 0.60000000000000009, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17432424744393935, 0.60000000000000009, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34748744127146447, 0.60000000000000009, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.51873632743924847, 0.60000000000000009, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.68794610396313127, 0.60000000000000009, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.85558070175468726, 0.60000000000000009, 0.29999999999999999,
-          0.87266462599716477 },
-  { 1.0224416343605658, 0.60000000000000009, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.1893144457936788, 0.60000000000000009, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.3566435377982575, 0.60000000000000009, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.5243814243493585, 0.60000000000000009, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.60000000000000009, nu=0.29999999999999999.
-template <typename Tp>
-void test154()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data154)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data154[i].k), Tp(data154[i].nu),
-                   Tp(data154[i].phi));
-      const Tp f0 = data154[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 2.2547200163366559e-16
+// mean(f - f_Boost): -2.4980018054066023e-17
+// variance(f - f_Boost): 2.1685495635542404e-32
+// stddev(f - f_Boost): 1.4725995937641163e-16
+const testcase_ellint_3<double>
+data153[10] =
+{
+  { 0.0000000000000000, 0.60000000000000009, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17520627248155893, 0.60000000000000009, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35444873935437748, 0.60000000000000009, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54172310557682524, 0.60000000000000009, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.74084300280734672, 0.60000000000000009, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.95509001527006121, 0.60000000000000009, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1865688084431796, 0.60000000000000009, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4352978868932600, 0.60000000000000009, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6983400371331818, 0.60000000000000009, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.9695980282802217, 0.60000000000000009, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler153 = 2.5000000000000020e-13;
+
+// Test data for k=0.60000000000000009, nu=0.30000000000000004.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.9470074709717020e-16
+// mean(f - f_Boost): 3.0531133177191807e-17
+// variance(f - f_Boost): 1.1508025840536076e-34
+// stddev(f - f_Boost): 1.0727546709539920e-17
+const testcase_ellint_3<double>
+data154[10] =
+{
+  { 0.0000000000000000, 0.60000000000000009, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17538460882640122, 0.60000000000000009, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35590165133735557, 0.60000000000000009, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.54676661152254535, 0.60000000000000009, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.75321709418305305, 0.60000000000000009, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.98012637808992920, 0.60000000000000009, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.2310891277158875, 0.60000000000000009, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.5069157924585623, 0.60000000000000009, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.8039583598337940, 0.60000000000000009, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 2.1134154405060599, 0.60000000000000009, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler154 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009, nu=0.40000000000000002.
-testcase_ellint_3<double> data155[] = {
-  { -0.0000000000000000, 0.60000000000000009, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17414974487670720, 0.60000000000000009, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34615238767335027, 0.60000000000000009, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.51453257838108579, 0.60000000000000009, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.67882386787534410, 0.60000000000000009, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.83948470233173578, 0.60000000000000009, 0.40000000000000002,
-          0.87266462599716477 },
-  { 0.99753496200074021, 0.60000000000000009, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.1541101404388487, 0.60000000000000009, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.3100911323398816, 0.60000000000000009, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.4659345278069984, 0.60000000000000009, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.60000000000000009, nu=0.40000000000000002.
-template <typename Tp>
-void test155()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data155)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data155[i].k), Tp(data155[i].nu),
-                   Tp(data155[i].phi));
-      const Tp f0 = data155[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 2.8974839914337670e-16
+// mean(f - f_Boost): -1.3877787807814457e-17
+// variance(f - f_Boost): 2.2849613290816465e-32
+// stddev(f - f_Boost): 1.5116088545260797e-16
+const testcase_ellint_3<double>
+data155[10] =
+{
+  { 0.0000000000000000, 0.60000000000000009, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17556359876533037, 0.60000000000000009, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35737601674244679, 0.60000000000000009, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.55197933771320218, 0.60000000000000009, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.76633591620002905, 0.60000000000000009, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0075231136019616, 0.60000000000000009, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.2815842073813450, 0.60000000000000009, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.5911666941449827, 0.60000000000000009, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 1.9323227566025762, 0.60000000000000009, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.2925036420985130, 0.60000000000000009, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler155 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009, nu=0.50000000000000000.
-testcase_ellint_3<double> data156[] = {
-  { -0.0000000000000000, 0.60000000000000009, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17397586700252810, 0.60000000000000009, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34483533397138516, 0.60000000000000009, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.51044500461706499, 0.60000000000000009, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.67009988034712675, 0.60000000000000009, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.82434762375735193, 0.60000000000000009, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.97447346702799043, 0.60000000000000009, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.1219494000522143, 0.60000000000000009, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.2680242605954488, 0.60000000000000009, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.4135484285693078, 0.60000000000000009, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.60000000000000009, nu=0.50000000000000000.
-template <typename Tp>
-void test156()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data156)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data156[i].k), Tp(data156[i].nu),
-                   Tp(data156[i].phi));
-      const Tp f0 = data156[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.60000000000000009, nu=0.59999999999999998.
-testcase_ellint_3<double> data157[] = {
-  { -0.0000000000000000, 0.60000000000000009, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17380260984469356, 0.60000000000000009, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34353585361777839, 0.60000000000000009, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.50646805774321402, 0.60000000000000009, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.66174468108625517, 0.60000000000000009, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.81007462280278408, 0.60000000000000009, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.95303466945718773, 0.60000000000000009, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.0924118588677503, 0.60000000000000009, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.2297640574847937, 0.60000000000000009, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.3662507535812816, 0.60000000000000009, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.60000000000000009, nu=0.59999999999999998.
-template <typename Tp>
-void test157()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data157)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data157[i].k), Tp(data157[i].nu),
-                   Tp(data157[i].phi));
-      const Tp f0 = data157[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.60000000000000009, nu=0.69999999999999996.
-testcase_ellint_3<double> data158[] = {
-  { -0.0000000000000000, 0.60000000000000009, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17362996946312009, 0.60000000000000009, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34225353454870588, 0.60000000000000009, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.50259656397799546, 0.60000000000000009, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.65373184496628944, 0.60000000000000009, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.79658372884056439, 0.60000000000000009, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.93303240100245466, 0.60000000000000009, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.0651547944716557, 0.60000000000000009, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.1947676204853441, 0.60000000000000009, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.3232737468822811, 0.60000000000000009, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.60000000000000009, nu=0.69999999999999996.
-template <typename Tp>
-void test158()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data158)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data158[i].k), Tp(data158[i].nu),
-                   Tp(data158[i].phi));
-      const Tp f0 = data158[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 2.1397785842303966e-16
+// mean(f - f_Boost): 9.1593399531575410e-17
+// variance(f - f_Boost): 1.5339913122479866e-32
+// stddev(f - f_Boost): 1.2385440291923362e-16
+const testcase_ellint_3<double>
+data156[10] =
+{
+  { 0.0000000000000000, 0.60000000000000009, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17574324658480217, 0.60000000000000009, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35887240603169313, 0.60000000000000009, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.55737161826345261, 0.60000000000000009, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.78028227313077458, 0.60000000000000009, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0376989776486290, 0.60000000000000009, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.3395933991042928, 0.60000000000000009, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.6924049626591784, 0.60000000000000009, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.0931011856518920, 0.60000000000000009, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.5239007084492711, 0.60000000000000009, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler156 = 2.5000000000000020e-13;
+
+// Test data for k=0.60000000000000009, nu=0.60000000000000009.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.6651378277398083e-16
+// mean(f - f_Boost): 1.1934897514720432e-16
+// variance(f - f_Boost): 1.7585404776158019e-33
+// stddev(f - f_Boost): 4.1934955319110598e-17
+const testcase_ellint_3<double>
+data157[10] =
+{
+  { 0.0000000000000000, 0.60000000000000009, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17592355661219386, 0.60000000000000009, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.36039141192661606, 0.60000000000000009, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.56295472636903854, 0.60000000000000009, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.79515295130165986, 0.60000000000000009, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0711886441942242, 0.60000000000000009, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.4072952835139891, 0.60000000000000009, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.8174863977376825, 0.60000000000000009, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.3029921578542232, 0.60000000000000009, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 2.8388723099514972, 0.60000000000000009, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler157 = 2.5000000000000020e-13;
+
+// Test data for k=0.60000000000000009, nu=0.70000000000000007.
+// max(|f - f_Boost|): 4.4408920985006262e-16 at index 9
+// max(|f - f_Boost| / |f_Boost|): 2.0027679235921772e-16
+// mean(f - f_Boost): -1.3877787807814457e-17
+// variance(f - f_Boost): 2.2849613290816465e-32
+// stddev(f - f_Boost): 1.5116088545260797e-16
+const testcase_ellint_3<double>
+data158[10] =
+{
+  { 0.0000000000000000, 0.60000000000000009, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17610453321631936, 0.60000000000000009, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.36193365056369764, 0.60000000000000009, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.56874098962268527, 0.60000000000000009, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.81106198671477181, 0.60000000000000009, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.1086886419010082, 0.60000000000000009, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.4879048567239257, 0.60000000000000009, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 1.9780310073615925, 0.60000000000000009, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.5941545586772712, 0.60000000000000009, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 3.3029735898397159, 0.60000000000000009, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler158 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009, nu=0.80000000000000004.
-testcase_ellint_3<double> data159[] = {
-  { -0.0000000000000000, 0.60000000000000009, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17345794195390687, 0.60000000000000009, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.34098797854531027, 0.60000000000000009, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.49882569168826230, 0.60000000000000009, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.64603758566475511, 0.60000000000000009, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.78380365594769730, 0.60000000000000009, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.91430946255611223, 0.60000000000000009, 0.80000000000000004,
-          1.0471975511965976 },
-  { 1.0398955217270607, 0.60000000000000009, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.1625948314277679, 0.60000000000000009, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.2840021261752192, 0.60000000000000009, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.60000000000000009, nu=0.80000000000000004.
-template <typename Tp>
-void test159()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data159)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data159[i].k), Tp(data159[i].nu),
-                   Tp(data159[i].phi));
-      const Tp f0 = data159[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 7.3044933435043190e-16
+// mean(f - f_Boost): 2.6367796834847468e-16
+// variance(f - f_Boost): 8.5834655546147173e-33
+// stddev(f - f_Boost): 9.2646994309662939e-17
+const testcase_ellint_3<double>
+data159[10] =
+{
+  { 0.0000000000000000, 0.60000000000000009, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17628618080795252, 0.60000000000000009, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36349976272521012, 0.60000000000000009, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.57474392342151914, 0.60000000000000009, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.82814493499158170, 0.60000000000000009, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1511281795998280, 0.60000000000000009, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.5864286332503075, 0.60000000000000009, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.1958944866494527, 0.60000000000000009, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 3.0398358172574604, 0.60000000000000009, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 4.0867036409261832, 0.60000000000000009, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler159 = 2.5000000000000020e-13;
 
 // Test data for k=0.60000000000000009, nu=0.90000000000000002.
-testcase_ellint_3<double> data160[] = {
-  { -0.0000000000000000, 0.60000000000000009, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17328652344890033, 0.60000000000000009, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.33973880062929018, 0.60000000000000009, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.49515092233122765, 0.60000000000000009, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.63864042139737043, 0.60000000000000009, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.77167205646538850, 0.60000000000000009, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.89673202848034428, 0.60000000000000009, 0.90000000000000002,
-          1.0471975511965976 },
-  { 1.0163984492661304, 0.60000000000000009, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.1328845785162431, 0.60000000000000009, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.2479362973851875, 0.60000000000000009, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.60000000000000009, nu=0.90000000000000002.
-template <typename Tp>
-void test160()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data160)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data160[i].k), Tp(data160[i].nu),
-                   Tp(data160[i].phi));
-      const Tp f0 = data160[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.69999999999999996, nu=0.0000000000000000.
-testcase_ellint_3<double> data161[] = {
-  { -0.0000000000000000, 0.69999999999999996, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17496737466916720, 0.69999999999999996, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.35254687535677925, 0.69999999999999996, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.53536740275997130, 0.69999999999999996, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.72603797651684465, 0.69999999999999996, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.92698296348313458, 0.69999999999999996, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.1400447527693316, 0.69999999999999996, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.3657668117194071, 0.69999999999999996, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.6024686895959159, 0.69999999999999996, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.8456939983747236, 0.69999999999999996, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.69999999999999996, nu=0.0000000000000000.
-template <typename Tp>
-void test161()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data161)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data161[i].k), Tp(data161[i].nu),
-                   Tp(data161[i].phi));
-      const Tp f0 = data161[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.69999999999999996, nu=0.10000000000000001.
-testcase_ellint_3<double> data162[] = {
-  { -0.0000000000000000, 0.69999999999999996, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17479076384884681, 0.69999999999999996, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.35114844900396364, 0.69999999999999996, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.53072776947527012, 0.69999999999999996, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.71530198262386246, 0.69999999999999996, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.90666760677828306, 0.69999999999999996, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.1063366517438080, 0.69999999999999996, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.3149477243092147, 0.69999999999999996, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.5314886725038925, 0.69999999999999996, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.7528050171757608, 0.69999999999999996, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.69999999999999996, nu=0.10000000000000001.
-template <typename Tp>
-void test162()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data162)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data162[i].k), Tp(data162[i].nu),
-                   Tp(data162[i].phi));
-      const Tp f0 = data162[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.69999999999999996, nu=0.20000000000000001.
-testcase_ellint_3<double> data163[] = {
-  { -0.0000000000000000, 0.69999999999999996, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17461479077791472, 0.69999999999999996, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.34976950621407538, 0.69999999999999996, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.52622533231350188, 0.69999999999999996, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.70508774017895226, 0.69999999999999996, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.88775302531730294, 0.69999999999999996, 0.20000000000000001,
-          0.87266462599716477 },
-  { 1.0756195476149006, 0.69999999999999996, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.2695349716654372, 0.69999999999999996, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.4690814617070540, 0.69999999999999996, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.6721098780092147, 0.69999999999999996, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.69999999999999996, nu=0.20000000000000001.
-template <typename Tp>
-void test163()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data163)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data163[i].k), Tp(data163[i].nu),
-                   Tp(data163[i].phi));
-      const Tp f0 = data163[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.69999999999999996, nu=0.29999999999999999.
-testcase_ellint_3<double> data164[] = {
-  { -0.0000000000000000, 0.69999999999999996, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17443945136076172, 0.69999999999999996, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34840956983535287, 0.69999999999999996, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.52185308551329179, 0.69999999999999996, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.69535240431168266, 0.69999999999999996, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.87007983473964923, 0.69999999999999996, 0.29999999999999999,
-          0.87266462599716477 },
-  { 1.0474657975577066, 0.69999999999999996, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.2286225419931889, 0.69999999999999996, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.4136490671013271, 0.69999999999999996, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.6011813647733213, 0.69999999999999996, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.69999999999999996, nu=0.29999999999999999.
-template <typename Tp>
-void test164()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data164)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data164[i].k), Tp(data164[i].nu),
-                   Tp(data164[i].phi));
-      const Tp f0 = data164[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.69999999999999996, nu=0.40000000000000002.
-testcase_ellint_3<double> data165[] = {
-  { -0.0000000000000000, 0.69999999999999996, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17426474153983226, 0.69999999999999996, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34706817945773732, 0.69999999999999996, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.51760452851738159, 0.69999999999999996, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.68605801534722766, 0.69999999999999996, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.85351339387296532, 0.69999999999999996, 0.40000000000000002,
-          0.87266462599716477 },
-  { 1.0215297967969537, 0.69999999999999996, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.1915051074460528, 0.69999999999999996, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.3639821911744707, 0.69999999999999996, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.5382162002954762, 0.69999999999999996, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.69999999999999996, nu=0.40000000000000002.
-template <typename Tp>
-void test165()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data165)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data165[i].k), Tp(data165[i].nu),
-                   Tp(data165[i].phi));
-      const Tp f0 = data165[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.69999999999999996, nu=0.50000000000000000.
-testcase_ellint_3<double> data166[] = {
-  { -0.0000000000000000, 0.69999999999999996, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17409065729516093, 0.69999999999999996, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34574489064986091, 0.69999999999999996, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.51347361925579793, 0.69999999999999996, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.67717079489579290, 0.69999999999999996, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.83793902055292280, 0.69999999999999996, 0.50000000000000000,
-          0.87266462599716477 },
-  { 0.99752863545289705, 0.69999999999999996, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.1576240080401499, 0.69999999999999996, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.3191464023923762, 0.69999999999999996, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.4818433192178544, 0.69999999999999996, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.69999999999999996, nu=0.50000000000000000.
-template <typename Tp>
-void test166()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data166)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data166[i].k), Tp(data166[i].nu),
-                   Tp(data166[i].phi));
-      const Tp f0 = data166[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.69999999999999996, nu=0.59999999999999998.
-testcase_ellint_3<double> data167[] = {
-  { -0.0000000000000000, 0.69999999999999996, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17391719464391611, 0.69999999999999996, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34443927423869031, 0.69999999999999996, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.50945473266486074, 0.69999999999999996, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.66866056326513823, 0.69999999999999996, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.82325830002337352, 0.69999999999999996, 0.59999999999999998,
-          0.87266462599716477 },
-  { 0.97522808245669357, 0.69999999999999996, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.1265300613705282, 0.69999999999999996, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.2784066076152003, 0.69999999999999996, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.4309994736080540, 0.69999999999999996, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.69999999999999996, nu=0.59999999999999998.
-template <typename Tp>
-void test167()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data167)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data167[i].k), Tp(data167[i].nu),
-                   Tp(data167[i].phi));
-      const Tp f0 = data167[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.69999999999999996, nu=0.69999999999999996.
-testcase_ellint_3<double> data168[] = {
-  { -0.0000000000000000, 0.69999999999999996, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17374434963995028, 0.69999999999999996, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34315091562900674, 0.69999999999999996, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.50554262375653358, 0.69999999999999996, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.66050025406305812, 0.69999999999999996, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.80938620118847404, 0.69999999999999996, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.95443223855852144, 0.69999999999999996, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.0978573207128302, 0.69999999999999996, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.2411754575007123, 0.69999999999999996, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.3848459188329196, 0.69999999999999996, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.69999999999999996, nu=0.69999999999999996.
-template <typename Tp>
-void test168()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data168)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data168[i].k), Tp(data168[i].nu),
-                   Tp(data168[i].phi));
-      const Tp f0 = data168[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.69999999999999996, nu=0.80000000000000004.
-testcase_ellint_3<double> data169[] = {
-  { -0.0000000000000000, 0.69999999999999996, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17357211837335737, 0.69999999999999996, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.34187941416012108, 0.69999999999999996, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.50173239465478270, 0.69999999999999996, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.65266550725988315, 0.69999999999999996, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.79624879865249298, 0.69999999999999996, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.93497577043296920, 0.69999999999999996, 0.80000000000000004,
-          1.0471975511965976 },
-  { 1.0713041566930748, 0.69999999999999996, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.2069772023255652, 0.69999999999999996, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.3427110650397533, 0.69999999999999996, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.69999999999999996, nu=0.80000000000000004.
-template <typename Tp>
-void test169()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data169)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data169[i].k), Tp(data169[i].nu),
-                   Tp(data169[i].phi));
-      const Tp f0 = data169[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.69999999999999996, nu=0.90000000000000002.
-testcase_ellint_3<double> data170[] = {
-  { -0.0000000000000000, 0.69999999999999996, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17340049697003634, 0.69999999999999996, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.34062438249741556, 0.69999999999999996, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.49801946510076878, 0.69999999999999996, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.64513432604750487, 0.69999999999999996, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.78378145487573758, 0.69999999999999996, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.91671799500854634, 0.69999999999999996, 0.90000000000000002,
-          1.0471975511965976 },
-  { 1.0466193579463123, 0.69999999999999996, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.1754218079199146, 0.69999999999999996, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.3040500499695911, 0.69999999999999996, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.69999999999999996, nu=0.90000000000000002.
-template <typename Tp>
-void test170()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data170)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data170[i].k), Tp(data170[i].nu),
-                   Tp(data170[i].phi));
-      const Tp f0 = data170[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.5952142720718732e-16
+// mean(f - f_Boost): 4.6351811278100284e-16
+// variance(f - f_Boost): 2.1278339779151204e-31
+// stddev(f - f_Boost): 4.6128450851021651e-16
+const testcase_ellint_3<double>
+data160[10] =
+{
+  { 0.0000000000000000, 0.60000000000000009, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17646850384035848, 0.60000000000000009, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36509041515134105, 0.60000000000000009, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.58097838596260631, 0.60000000000000009, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.84656453396163722, 0.60000000000000009, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.1997828426963724, 0.60000000000000009, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.7112436789225605, 0.60000000000000009, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.5193168553672312, 0.60000000000000009, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 3.8656670488606690, 0.60000000000000009, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 5.8709993116265604, 0.60000000000000009, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler160 = 2.5000000000000020e-13;
+
+// Test data for k=0.70000000000000018, nu=0.0000000000000000.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.1569224977685422e-16
+// mean(f - f_Boost): 7.7715611723760953e-17
+// variance(f - f_Boost): 1.6571557210371951e-32
+// stddev(f - f_Boost): 1.2873056051447903e-16
+const testcase_ellint_3<double>
+data161[10] =
+{
+  { 0.0000000000000000, 0.70000000000000018, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17496737466916723, 0.70000000000000018, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35254687535677931, 0.70000000000000018, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.53536740275997130, 0.70000000000000018, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.72603797651684454, 0.70000000000000018, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.92698296348313447, 0.70000000000000018, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.1400447527693318, 0.70000000000000018, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.3657668117194073, 0.70000000000000018, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.6024686895959164, 0.70000000000000018, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.8456939983747236, 0.70000000000000018, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler161 = 2.5000000000000020e-13;
+
+// Test data for k=0.70000000000000018, nu=0.10000000000000001.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.9552278747527691e-16
+// mean(f - f_Boost): 1.1102230246251565e-16
+// variance(f - f_Boost): 1.3695501826753678e-32
+// stddev(f - f_Boost): 1.1702778228589004e-16
+const testcase_ellint_3<double>
+data162[10] =
+{
+  { 0.0000000000000000, 0.70000000000000018, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17514462737300920, 0.70000000000000018, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35396527997470451, 0.70000000000000018, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54015179589433981, 0.70000000000000018, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.73734430854477728, 0.70000000000000018, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.94888950796697047, 0.70000000000000018, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.1772807959736322, 0.70000000000000018, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4231796401075834, 0.70000000000000018, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.6841856799887471, 0.70000000000000018, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 1.9541347343119564, 0.70000000000000018, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler162 = 2.5000000000000020e-13;
+
+// Test data for k=0.70000000000000018, nu=0.20000000000000001.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.7430437016285820e-16
+// mean(f - f_Boost): 3.3306690738754695e-17
+// variance(f - f_Boost): 1.3695501826753678e-34
+// stddev(f - f_Boost): 1.1702778228589003e-17
+const testcase_ellint_3<double>
+data163[10] =
+{
+  { 0.0000000000000000, 0.70000000000000018, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17532252613350796, 0.70000000000000018, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35540417596807522, 0.70000000000000018, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54508913033361928, 0.70000000000000018, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.74927635777718415, 0.70000000000000018, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.97261706337936338, 0.70000000000000018, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2187303976209327, 0.70000000000000018, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4887796709222487, 0.70000000000000018, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.7796581281839214, 0.70000000000000018, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.0829290325820207, 0.70000000000000018, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler163 = 2.5000000000000020e-13;
+
+// Test data for k=0.70000000000000018, nu=0.30000000000000004.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.2570807706941696e-16
+// mean(f - f_Boost): 8.8817841970012528e-17
+// variance(f - f_Boost): 1.5582437633995295e-32
+// stddev(f - f_Boost): 1.2482963443828271e-16
+const testcase_ellint_3<double>
+data164[10] =
+{
+  { 0.0000000000000000, 0.70000000000000018, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17550107516328570, 0.70000000000000018, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35686409576571965, 0.70000000000000018, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.55018827316513352, 0.70000000000000018, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.76189759494390275, 0.70000000000000018, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 0.99844623430885626, 0.70000000000000018, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.2652862989039833, 0.70000000000000018, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.5647666808691361, 0.70000000000000018, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 1.8932499694938165, 0.70000000000000018, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 2.2392290510988535, 0.70000000000000018, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler164 = 2.5000000000000020e-13;
+
+// Test data for k=0.70000000000000018, nu=0.40000000000000002.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.3719045096496910e-16
+// mean(f - f_Boost): 1.3600232051658169e-16
+// variance(f - f_Boost): 1.1718213750516114e-32
+// stddev(f - f_Boost): 1.0825069861444829e-16
+const testcase_ellint_3<double>
+data165[10] =
+{
+  { 0.0000000000000000, 0.70000000000000018, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17568027871494424, 0.70000000000000018, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35834559208180261, 0.70000000000000018, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.55545885451190613, 0.70000000000000018, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.77528120402568113, 0.70000000000000018, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0267241287600322, 0.70000000000000018, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.3181380338980246, 0.70000000000000018, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.6542840785132087, 0.70000000000000018, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 2.0315595131131823, 0.70000000000000018, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.4342502915307880, 0.70000000000000018, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler165 = 2.5000000000000020e-13;
+
+// Test data for k=0.70000000000000018, nu=0.50000000000000000.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.0277361210295499e-16
+// mean(f - f_Boost): 1.6930901125533636e-16
+// variance(f - f_Boost): 6.3799163752809956e-32
+// stddev(f - f_Boost): 2.5258496343371268e-16
+const testcase_ellint_3<double>
+data166[10] =
+{
+  { 0.0000000000000000, 0.70000000000000018, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17586014108156545, 0.70000000000000018, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35984923894341653, 0.70000000000000018, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.56091135606739995, 0.70000000000000018, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.78951212635197054, 0.70000000000000018, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0578865732938731, 0.70000000000000018, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.3789149005151722, 0.70000000000000018, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.7620212286086228, 0.70000000000000018, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.2051554347435589, 0.70000000000000018, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.6868019968236996, 0.70000000000000018, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler166 = 2.5000000000000020e-13;
+
+// Test data for k=0.70000000000000018, nu=0.60000000000000009.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.8597454441867134e-16
+// mean(f - f_Boost): 2.5535129566378598e-16
+// variance(f - f_Boost): 2.8561208198482198e-31
+// stddev(f - f_Boost): 5.3442687243889785e-16
+const testcase_ellint_3<double>
+data167[10] =
+{
+  { 0.0000000000000000, 0.70000000000000018, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17604066659721918, 0.70000000000000018, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.36137563278353424, 0.70000000000000018, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.56655721272747606, 0.70000000000000018, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.80468966552978305, 0.70000000000000018, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.0924902943683852, 0.70000000000000018, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.4499247992499800, 0.70000000000000018, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 1.8953714382113818, 0.70000000000000018, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.4323229949248670, 0.70000000000000018, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 3.0314573496746746, 0.70000000000000018, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler167 = 2.5000000000000020e-13;
+
+// Test data for k=0.70000000000000018, nu=0.70000000000000007.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 8
+// max(|f - f_Boost| / |f_Boost|): 3.2316852368580916e-16
+// mean(f - f_Boost): 7.7715611723760953e-17
+// variance(f - f_Boost): 7.4564398834547797e-34
+// stddev(f - f_Boost): 2.7306482533374340e-17
+const testcase_ellint_3<double>
+data168[10] =
+{
+  { 0.0000000000000000, 0.70000000000000018, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17622185963747933, 0.70000000000000018, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.36292539360435261, 0.70000000000000018, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.57240892970150015, 0.70000000000000018, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.82093084713182629, 0.70000000000000018, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.1312609022179871, 0.70000000000000018, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.5345768067715795, 0.70000000000000018, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 2.0668847445934424, 0.70000000000000018, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.7483444537551245, 0.70000000000000018, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 3.5408408771788569, 0.70000000000000018, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler168 = 2.5000000000000020e-13;
+
+// Test data for k=0.70000000000000018, nu=0.80000000000000004.
+// max(|f - f_Boost|): 1.3322676295501878e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.1198716111867353e-16
+// mean(f - f_Boost): 2.2482016248659419e-16
+// variance(f - f_Boost): 5.4326441655972001e-32
+// stddev(f - f_Boost): 2.3308033305273100e-16
+const testcase_ellint_3<double>
+data169[10] =
+{
+  { 0.0000000000000000, 0.70000000000000018, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17640372461994805, 0.70000000000000018, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36449916621651091, 0.70000000000000018, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.57848021800372584, 0.70000000000000018, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.83837480968392586, 0.70000000000000018, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.1751669030061143, 0.70000000000000018, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.6381851899173603, 0.70000000000000018, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.3002065924302197, 0.70000000000000018, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 3.2337600665337871, 0.70000000000000018, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 4.4042405729076970, 0.70000000000000018, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler169 = 2.5000000000000020e-13;
+
+// Test data for k=0.70000000000000018, nu=0.90000000000000002.
+// max(|f - f_Boost|): 3.5527136788005009e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 8.5869439826269878e-16
+// mean(f - f_Boost): 7.4384942649885490e-16
+// variance(f - f_Boost): 9.7403930714297352e-31
+// stddev(f - f_Boost): 9.8693429727767263e-16
+const testcase_ellint_3<double>
+data170[10] =
+{
+  { 0.0000000000000000, 0.70000000000000018, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17658626600478800, 0.70000000000000018, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36609762156017206, 0.70000000000000018, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.58478615187842409, 0.70000000000000018, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.85718862878291846, 0.70000000000000018, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.2255385617397643, 0.70000000000000018, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.7696521899992941, 0.70000000000000018, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.6476314987883507, 0.70000000000000018, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 4.1373434902898083, 0.70000000000000018, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 6.3796094177887763, 0.70000000000000018, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler170 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004, nu=0.0000000000000000.
-testcase_ellint_3<double> data171[] = {
-  { -0.0000000000000000, 0.80000000000000004, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17510154241338902, 0.80000000000000004, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.35365068839779390, 0.80000000000000004, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.53926804409084561, 0.80000000000000004, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.73587926028070383, 0.80000000000000004, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.94770942970071170, 0.80000000000000004, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.1789022995388239, 0.80000000000000004, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.4323027881876009, 0.80000000000000004, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.7069629739121674, 0.80000000000000004, 0.0000000000000000,
-          1.3962634015954636 },
-  { 1.9953027776647296, 0.80000000000000004, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.80000000000000004, nu=0.0000000000000000.
-template <typename Tp>
-void test171()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data171)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data171[i].k), Tp(data171[i].nu),
-                   Tp(data171[i].phi));
-      const Tp f0 = data171[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.5543122344752192e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.7898565163847540e-16
+// mean(f - f_Boost): 2.3869795029440865e-16
+// variance(f - f_Boost): 2.1368406725192426e-31
+// stddev(f - f_Boost): 4.6225974002926564e-16
+const testcase_ellint_3<double>
+data171[10] =
+{
+  { 0.0000000000000000, 0.80000000000000004, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17510154241338899, 0.80000000000000004, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35365068839779396, 0.80000000000000004, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.53926804409084550, 0.80000000000000004, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.73587926028070372, 0.80000000000000004, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.94770942970071170, 0.80000000000000004, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.1789022995388236, 0.80000000000000004, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.4323027881876012, 0.80000000000000004, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.7069629739121677, 0.80000000000000004, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 1.9953027776647294, 0.80000000000000004, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler171 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004, nu=0.10000000000000001.
-testcase_ellint_3<double> data172[] = {
-  { -0.0000000000000000, 0.80000000000000004, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17492468824017166, 0.80000000000000004, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.35224443521476911, 0.80000000000000004, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.53456851853226961, 0.80000000000000004, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.72488875602364944, 0.80000000000000004, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.92661354274638952, 0.80000000000000004, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.1432651144499077, 0.80000000000000004, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.3774479927211429, 0.80000000000000004, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.6287092337196041, 0.80000000000000004, 0.10000000000000001,
-          1.3962634015954636 },
-  { 1.8910755418379521, 0.80000000000000004, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.80000000000000004, nu=0.10000000000000001.
-template <typename Tp>
-void test172()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data172)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data172[i].k), Tp(data172[i].nu),
-                   Tp(data172[i].phi));
-      const Tp f0 = data172[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 8.3898786942190374e-16
+// mean(f - f_Boost): 2.3869795029440865e-16
+// variance(f - f_Boost): 2.9190059990693968e-31
+// stddev(f - f_Boost): 5.4027826155319237e-16
+const testcase_ellint_3<double>
+data172[10] =
+{
+  { 0.0000000000000000, 0.80000000000000004, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17527903952342144, 0.80000000000000004, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35507705313548549, 0.80000000000000004, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54411455987643553, 0.80000000000000004, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.74745625666804383, 0.80000000000000004, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.97046953684238557, 0.80000000000000004, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2183080025184605, 0.80000000000000004, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.4943711151994405, 0.80000000000000004, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.7972401309544201, 0.80000000000000004, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.1172616484005085, 0.80000000000000004, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler172 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004, nu=0.20000000000000001.
-testcase_ellint_3<double> data173[] = {
-  { -0.0000000000000000, 0.80000000000000004, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17474847286224943, 0.80000000000000004, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.35085779529084682, 0.80000000000000004, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.53000829263059157, 0.80000000000000004, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.71443466027453406, 0.80000000000000004, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.90698196872715420, 0.80000000000000004, 0.20000000000000001,
-          0.87266462599716477 },
-  { 1.1108198200558581, 0.80000000000000004, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.3284988909963957, 0.80000000000000004, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.5600369318140328, 0.80000000000000004, 0.20000000000000001,
-          1.3962634015954636 },
-  { 1.8007226661734588, 0.80000000000000004, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.80000000000000004, nu=0.20000000000000001.
-template <typename Tp>
-void test173()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data173)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data173[i].k), Tp(data173[i].nu),
-                   Tp(data173[i].phi));
-      const Tp f0 = data173[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.80000000000000004, nu=0.29999999999999999.
-testcase_ellint_3<double> data174[] = {
-  { -0.0000000000000000, 0.80000000000000004, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17457289217669891, 0.80000000000000004, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.34949028801501258, 0.80000000000000004, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.52558024362769318, 0.80000000000000004, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.70447281740094914, 0.80000000000000004, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.88864745641528986, 0.80000000000000004, 0.29999999999999999,
-          0.87266462599716477 },
-  { 1.0811075819341465, 0.80000000000000004, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.2844589654082377, 0.80000000000000004, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.4991461361277849, 0.80000000000000004, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.7214611048717301, 0.80000000000000004, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.80000000000000004, nu=0.29999999999999999.
-template <typename Tp>
-void test174()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data174)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data174[i].k), Tp(data174[i].nu),
-                   Tp(data174[i].phi));
-      const Tp f0 = data174[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.8513740186068518e-16
+// mean(f - f_Boost): 2.8310687127941490e-16
+// variance(f - f_Boost): 2.7528339102381189e-31
+// stddev(f - f_Boost): 5.2467455724840699e-16
+const testcase_ellint_3<double>
+data173[10] =
+{
+  { 0.0000000000000000, 0.80000000000000004, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17545718375086419, 0.80000000000000004, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35652404627248163, 0.80000000000000004, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54911638512920913, 0.80000000000000004, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.75967684282131176, 0.80000000000000004, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.99513526893543769, 0.80000000000000004, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2622192109995993, 0.80000000000000004, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.5654106676347741, 0.80000000000000004, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.9029531718534984, 0.80000000000000004, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.2624789434186798, 0.80000000000000004, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler173 = 2.5000000000000020e-13;
+
+// Test data for k=0.80000000000000004, nu=0.30000000000000004.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.2825261583337354e-16
+// mean(f - f_Boost): 2.6367796834847468e-16
+// variance(f - f_Boost): 2.8249350208968825e-31
+// stddev(f - f_Boost): 5.3150117788175054e-16
+const testcase_ellint_3<double>
+data174[10] =
+{
+  { 0.0000000000000000, 0.80000000000000004, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17563597931587369, 0.80000000000000004, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35799220412005128, 0.80000000000000004, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.55428253691111318, 0.80000000000000004, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.77260647376977365, 0.80000000000000004, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.0220015271210958, 0.80000000000000004, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.3115965312302671, 0.80000000000000004, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.6478518468813512, 0.80000000000000004, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.0290458414203481, 0.80000000000000004, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 2.4392042002725693, 0.80000000000000004, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler174 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004, nu=0.40000000000000002.
-testcase_ellint_3<double> data175[] = {
-  { -0.0000000000000000, 0.80000000000000004, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17439794211872178, 0.80000000000000004, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34814144964568972, 0.80000000000000004, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.52127776285273075, 0.80000000000000004, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.69496411438966599, 0.80000000000000004, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.87146878427509589, 0.80000000000000004, 0.40000000000000002,
-          0.87266462599716477 },
-  { 1.0537579024937762, 0.80000000000000004, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.2445534387922637, 0.80000000000000004, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.4446769766361993, 0.80000000000000004, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.6512267838651289, 0.80000000000000004, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.80000000000000004, nu=0.40000000000000002.
-template <typename Tp>
-void test175()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data175)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data175[i].k), Tp(data175[i].nu),
-                   Tp(data175[i].phi));
-      const Tp f0 = data175[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 8.3462748389836647e-16
+// mean(f - f_Boost): 3.3861802251067273e-16
+// variance(f - f_Boost): 4.3719465706454422e-31
+// stddev(f - f_Boost): 6.6120696991527871e-16
+const testcase_ellint_3<double>
+data175[10] =
+{
+  { 0.0000000000000000, 0.80000000000000004, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17581543047866136, 0.80000000000000004, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.35948208343061633, 0.80000000000000004, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.55962280893702021, 0.80000000000000004, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.78632063889234116, 0.80000000000000004, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0514333069550323, 0.80000000000000004, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.3677213138838757, 0.80000000000000004, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.7451736773665165, 0.80000000000000004, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 2.1830100424586831, 0.80000000000000004, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 2.6604037035529724, 0.80000000000000004, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler175 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004, nu=0.50000000000000000.
-testcase_ellint_3<double> data176[] = {
-  { -0.0000000000000000, 0.80000000000000004, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17422361866118047, 0.80000000000000004, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34681083254170475, 0.80000000000000004, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.51709470815494440, 0.80000000000000004, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.68587375344080259, 0.80000000000000004, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.85532571852810624, 0.80000000000000004, 0.50000000000000000,
-          0.87266462599716477 },
-  { 1.0284677391874906, 0.80000000000000004, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.2081693942686225, 0.80000000000000004, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.3955803006426311, 0.80000000000000004, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.5884528947755532, 0.80000000000000004, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.80000000000000004, nu=0.50000000000000000.
-template <typename Tp>
-void test176()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data176)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data176[i].k), Tp(data176[i].nu),
-                   Tp(data176[i].phi));
-      const Tp f0 = data176[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.80000000000000004, nu=0.59999999999999998.
-testcase_ellint_3<double> data177[] = {
-  { -0.0000000000000000, 0.80000000000000004, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17404991781414092, 0.80000000000000004, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34549800443625167, 0.80000000000000004, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.51302536167001556, 0.80000000000000004, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.67717065003912258, 0.80000000000000004, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.84011512421134416, 0.80000000000000004, 0.59999999999999998,
-          0.87266462599716477 },
-  { 1.0049863847088742, 0.80000000000000004, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.1748145941898918, 0.80000000000000004, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.3510319699755071, 0.80000000000000004, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.5319262547427865, 0.80000000000000004, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.80000000000000004, nu=0.59999999999999998.
-template <typename Tp>
-void test177()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data177)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data177[i].k), Tp(data177[i].nu),
-                   Tp(data177[i].phi));
-      const Tp f0 = data177[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.80000000000000004, nu=0.69999999999999996.
-testcase_ellint_3<double> data178[] = {
-  { -0.0000000000000000, 0.80000000000000004, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17387683562442202, 0.80000000000000004, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34420254775101611, 0.80000000000000004, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.50906439222143685, 0.80000000000000004, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.66882693152688433, 0.80000000000000004, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.82574792844091316, 0.80000000000000004, 0.69999999999999996,
-          0.87266462599716477 },
-  { 0.98310431309490953, 0.80000000000000004, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.1440884535113258, 0.80000000000000004, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.3103743938952537, 0.80000000000000004, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.4806912324625332, 0.80000000000000004, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.80000000000000004, nu=0.69999999999999996.
-template <typename Tp>
-void test178()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data178)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data178[i].k), Tp(data178[i].nu),
-                   Tp(data178[i].phi));
-      const Tp f0 = data178[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 2.6645352591003757e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 9.0388243828581744e-16
+// mean(f - f_Boost): 3.8580250105724191e-16
+// variance(f - f_Boost): 6.4106456575047741e-31
+// stddev(f - f_Boost): 8.0066507713929764e-16
+const testcase_ellint_3<double>
+data176[10] =
+{
+  { 0.0000000000000000, 0.80000000000000004, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17599554153999472, 0.80000000000000004, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.36099426243351540, 0.80000000000000004, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.56514786174780673, 0.80000000000000004, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.80090697622371010, 0.80000000000000004, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.0838891627679339, 0.80000000000000004, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.4323506654466280, 0.80000000000000004, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.8625761085390575, 0.80000000000000004, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.3768757305654766, 0.80000000000000004, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.9478781158239746, 0.80000000000000004, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler176 = 2.5000000000000020e-13;
+
+// Test data for k=0.80000000000000004, nu=0.60000000000000009.
+// max(|f - f_Boost|): 3.5527136788005009e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 1.0631099169042069e-15
+// mean(f - f_Boost): 4.8294701571194306e-16
+// variance(f - f_Boost): 1.1633910328160319e-30
+// stddev(f - f_Boost): 1.0786060600682865e-15
+const testcase_ellint_3<double>
+data177[10] =
+{
+  { 0.0000000000000000, 0.80000000000000004, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17617631684170665, 0.80000000000000004, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.36252934193666231, 0.80000000000000004, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.57086932622945163, 0.80000000000000004, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.81646796740150973, 0.80000000000000004, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.1199552158519064, 0.80000000000000004, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.5079766673336394, 0.80000000000000004, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 2.0082747447038165, 0.80000000000000004, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.6315146066775523, 0.80000000000000004, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 3.3418121892288051, 0.80000000000000004, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler177 = 2.5000000000000020e-13;
+
+// Test data for k=0.80000000000000004, nu=0.70000000000000007.
+// max(|f - f_Boost|): 2.2204460492503131e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.6544679145741375e-16
+// mean(f - f_Boost): 3.2751579226442120e-16
+// variance(f - f_Boost): 4.4236851331020672e-31
+// stddev(f - f_Boost): 6.6510789599147505e-16
+const testcase_ellint_3<double>
+data178[10] =
+{
+  { 0.0000000000000000, 0.80000000000000004, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17635776076721221, 0.80000000000000004, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.36408794649916976, 0.80000000000000004, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.57679992290624138, 0.80000000000000004, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.83312441418142813, 0.80000000000000004, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.1603958891464856, 0.80000000000000004, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.5982855143796213, 0.80000000000000004, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 2.1962484408371821, 0.80000000000000004, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 2.9873281786111869, 0.80000000000000004, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 3.9268876980046397, 0.80000000000000004, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler178 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004, nu=0.80000000000000004.
-testcase_ellint_3<double> data179[] = {
-  { -0.0000000000000000, 0.80000000000000004, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17370436817515206, 0.80000000000000004, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.34292405894783395, 0.80000000000000004, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.50520682176250087, 0.80000000000000004, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.66081751679736189, 0.80000000000000004, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.81214672249355102, 0.80000000000000004, 0.80000000000000004,
-          0.87266462599716477 },
-  { 0.96264481387685574, 0.80000000000000004, 0.80000000000000004,
-          1.0471975511965976 },
-  { 1.1156611352656258, 0.80000000000000004, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.2730756225143889, 0.80000000000000004, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.4339837018309474, 0.80000000000000004, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.80000000000000004, nu=0.80000000000000004.
-template <typename Tp>
-void test179()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data179)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data179[i].k), Tp(data179[i].nu),
-                   Tp(data179[i].phi));
-      const Tp f0 = data179[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 9.0176949165011079e-16
+// mean(f - f_Boost): 7.0499162063697436e-16
+// variance(f - f_Boost): 1.7230805408026989e-30
+// stddev(f - f_Boost): 1.3126616246400665e-15
+const testcase_ellint_3<double>
+data179[10] =
+{
+  { 0.0000000000000000, 0.80000000000000004, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17653987774203392, 0.80000000000000004, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36567072568046877, 0.80000000000000004, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.58295359996558616, 0.80000000000000004, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.85101998309176108, 0.80000000000000004, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.2062322059736537, 0.80000000000000004, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.7090321420917429, 0.80000000000000004, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.4529058049405066, 0.80000000000000004, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 3.5368893360106948, 0.80000000000000004, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 4.9246422058196062, 0.80000000000000004, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler179 = 2.5000000000000020e-13;
 
 // Test data for k=0.80000000000000004, nu=0.90000000000000002.
-testcase_ellint_3<double> data180[] = {
-  { -0.0000000000000000, 0.80000000000000004, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17353251158533153, 0.80000000000000004, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.34166214791545768, 0.80000000000000004, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.50144799535130580, 0.80000000000000004, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.65311976193814447, 0.80000000000000004, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.79924384892320866, 0.80000000000000004, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.94345762353365625, 0.80000000000000004, 0.90000000000000002,
-          1.0471975511965976 },
-  { 1.0892582069219159, 0.80000000000000004, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.2387000876610268, 0.80000000000000004, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.3911845406776222, 0.80000000000000004, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.80000000000000004, nu=0.90000000000000002.
-template <typename Tp>
-void test180()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data180)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data180[i].k), Tp(data180[i].nu),
-                   Tp(data180[i].phi));
-      const Tp f0 = data180[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.89999999999999991, nu=0.0000000000000000.
-testcase_ellint_3<double> data181[] = {
-  { -0.0000000000000000, 0.89999999999999991, 0.0000000000000000,
-          0.0000000000000000 },
-  { 0.17525427376115027, 0.89999999999999991, 0.0000000000000000,
-          0.17453292519943295 },
-  { 0.35492464591297446, 0.89999999999999991, 0.0000000000000000,
-          0.34906585039886590 },
-  { 0.54388221416157123, 0.89999999999999991, 0.0000000000000000,
-          0.52359877559829882 },
-  { 0.74797400423532501, 0.89999999999999991, 0.0000000000000000,
-          0.69813170079773179 },
-  { 0.97463898451966458, 0.89999999999999991, 0.0000000000000000,
-          0.87266462599716477 },
-  { 1.2334463254523438, 0.89999999999999991, 0.0000000000000000,
-          1.0471975511965976 },
-  { 1.5355247765594910, 0.89999999999999991, 0.0000000000000000,
-          1.2217304763960306 },
-  { 1.8882928567775117, 0.89999999999999991, 0.0000000000000000,
-          1.3962634015954636 },
-  { 2.2805491384227699, 0.89999999999999991, 0.0000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.89999999999999991, nu=0.0000000000000000.
-template <typename Tp>
-void test181()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data181)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data181[i].k), Tp(data181[i].nu),
-                   Tp(data181[i].phi));
-      const Tp f0 = data181[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.89999999999999991, nu=0.10000000000000001.
-testcase_ellint_3<double> data182[] = {
-  { -0.0000000000000000, 0.89999999999999991, 0.10000000000000001,
-          0.0000000000000000 },
-  { 0.17507714233254659, 0.89999999999999991, 0.10000000000000001,
-          0.17453292519943295 },
-  { 0.35350932904326521, 0.89999999999999991, 0.10000000000000001,
-          0.34906585039886590 },
-  { 0.53911129989870987, 0.89999999999999991, 0.10000000000000001,
-          0.52359877559829882 },
-  { 0.73666644254508407, 0.89999999999999991, 0.10000000000000001,
-          0.69813170079773179 },
-  { 0.95250736612100184, 0.89999999999999991, 0.10000000000000001,
-          0.87266462599716477 },
-  { 1.1950199550905591, 0.89999999999999991, 0.10000000000000001,
-          1.0471975511965976 },
-  { 1.4741687286340848, 0.89999999999999991, 0.10000000000000001,
-          1.2217304763960306 },
-  { 1.7968678183506053, 0.89999999999999991, 0.10000000000000001,
-          1.3962634015954636 },
-  { 2.1537868513875282, 0.89999999999999991, 0.10000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.89999999999999991, nu=0.10000000000000001.
-template <typename Tp>
-void test182()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data182)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data182[i].k), Tp(data182[i].nu),
-                   Tp(data182[i].phi));
-      const Tp f0 = data182[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.89999999999999991, nu=0.20000000000000001.
-testcase_ellint_3<double> data183[] = {
-  { -0.0000000000000000, 0.89999999999999991, 0.20000000000000001,
-          0.0000000000000000 },
-  { 0.17490065089140930, 0.89999999999999991, 0.20000000000000001,
-          0.17453292519943295 },
-  { 0.35211377590661436, 0.89999999999999991, 0.20000000000000001,
-          0.34906585039886590 },
-  { 0.53448220334204111, 0.89999999999999991, 0.20000000000000001,
-          0.52359877559829882 },
-  { 0.72591368943179591, 0.89999999999999991, 0.20000000000000001,
-          0.69813170079773179 },
-  { 0.93192539780038763, 0.89999999999999991, 0.20000000000000001,
-          0.87266462599716477 },
-  { 1.1600809679692681, 0.89999999999999991, 0.20000000000000001,
-          1.0471975511965976 },
-  { 1.4195407225882508, 0.89999999999999991, 0.20000000000000001,
-          1.2217304763960306 },
-  { 1.7168966476424521, 0.89999999999999991, 0.20000000000000001,
-          1.3962634015954636 },
-  { 2.0443194576468890, 0.89999999999999991, 0.20000000000000001,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.89999999999999991, nu=0.20000000000000001.
-template <typename Tp>
-void test183()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data183)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data183[i].k), Tp(data183[i].nu),
-                   Tp(data183[i].phi));
-      const Tp f0 = data183[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.89999999999999991, nu=0.29999999999999999.
-testcase_ellint_3<double> data184[] = {
-  { -0.0000000000000000, 0.89999999999999991, 0.29999999999999999,
-          0.0000000000000000 },
-  { 0.17472479532647534, 0.89999999999999991, 0.29999999999999999,
-          0.17453292519943295 },
-  { 0.35073750187374114, 0.89999999999999991, 0.29999999999999999,
-          0.34906585039886590 },
-  { 0.52998766129466968, 0.89999999999999991, 0.29999999999999999,
-          0.52359877559829882 },
-  { 0.71566993548699565, 0.89999999999999991, 0.29999999999999999,
-          0.69813170079773179 },
-  { 0.91271517762560195, 0.89999999999999991, 0.29999999999999999,
-          0.87266462599716477 },
-  { 1.1281241199843368, 0.89999999999999991, 0.29999999999999999,
-          1.0471975511965976 },
-  { 1.3704929576917448, 0.89999999999999991, 0.29999999999999999,
-          1.2217304763960306 },
-  { 1.6461981511487711, 0.89999999999999991, 0.29999999999999999,
-          1.3962634015954636 },
-  { 1.9486280260314424, 0.89999999999999991, 0.29999999999999999,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.89999999999999991, nu=0.29999999999999999.
-template <typename Tp>
-void test184()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data184)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data184[i].k), Tp(data184[i].nu),
-                   Tp(data184[i].phi));
-      const Tp f0 = data184[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.89999999999999991, nu=0.40000000000000002.
-testcase_ellint_3<double> data185[] = {
-  { -0.0000000000000000, 0.89999999999999991, 0.40000000000000002,
-          0.0000000000000000 },
-  { 0.17454957156468839, 0.89999999999999991, 0.40000000000000002,
-          0.17453292519943295 },
-  { 0.34938003933330430, 0.89999999999999991, 0.40000000000000002,
-          0.34906585039886590 },
-  { 0.52562093533067444, 0.89999999999999991, 0.40000000000000002,
-          0.52359877559829882 },
-  { 0.70589461324915681, 0.89999999999999991, 0.40000000000000002,
-          0.69813170079773179 },
-  { 0.89472658511942849, 0.89999999999999991, 0.40000000000000002,
-          0.87266462599716477 },
-  { 1.0987419542323438, 0.89999999999999991, 0.40000000000000002,
-          1.0471975511965976 },
-  { 1.3261349565496301, 0.89999999999999991, 0.40000000000000002,
-          1.2217304763960306 },
-  { 1.5831293909853761, 0.89999999999999991, 0.40000000000000002,
-          1.3962634015954636 },
-  { 1.8641114227238347, 0.89999999999999991, 0.40000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.89999999999999991, nu=0.40000000000000002.
-template <typename Tp>
-void test185()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data185)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data185[i].k), Tp(data185[i].nu),
-                   Tp(data185[i].phi));
-      const Tp f0 = data185[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.89999999999999991, nu=0.50000000000000000.
-testcase_ellint_3<double> data186[] = {
-  { -0.0000000000000000, 0.89999999999999991, 0.50000000000000000,
-          0.0000000000000000 },
-  { 0.17437497557073336, 0.89999999999999991, 0.50000000000000000,
-          0.17453292519943295 },
-  { 0.34804093691586013, 0.89999999999999991, 0.50000000000000000,
-          0.34906585039886590 },
-  { 0.52137576320372903, 0.89999999999999991, 0.50000000000000000,
-          0.52359877559829882 },
-  { 0.69655163996912262, 0.89999999999999991, 0.50000000000000000,
-          0.69813170079773179 },
-  { 0.87783188683054236, 0.89999999999999991, 0.50000000000000000,
-          0.87266462599716477 },
-  { 1.0716015959755183, 0.89999999999999991, 0.50000000000000000,
-          1.0471975511965976 },
-  { 1.2857636916026749, 0.89999999999999991, 0.50000000000000000,
-          1.2217304763960306 },
-  { 1.5264263913252358, 0.89999999999999991, 0.50000000000000000,
-          1.3962634015954636 },
-  { 1.7888013241937859, 0.89999999999999991, 0.50000000000000000,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.89999999999999991, nu=0.50000000000000000.
-template <typename Tp>
-void test186()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data186)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data186[i].k), Tp(data186[i].nu),
-                   Tp(data186[i].phi));
-      const Tp f0 = data186[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.89999999999999991, nu=0.59999999999999998.
-testcase_ellint_3<double> data187[] = {
-  { -0.0000000000000000, 0.89999999999999991, 0.59999999999999998,
-          0.0000000000000000 },
-  { 0.17420100334657815, 0.89999999999999991, 0.59999999999999998,
-          0.17453292519943295 },
-  { 0.34671975876122157, 0.89999999999999991, 0.59999999999999998,
-          0.34906585039886590 },
-  { 0.51724631570707957, 0.89999999999999991, 0.59999999999999998,
-          0.52359877559829882 },
-  { 0.68760879113743034, 0.89999999999999991, 0.59999999999999998,
-          0.69813170079773179 },
-  { 0.86192157779698364, 0.89999999999999991, 0.59999999999999998,
-          0.87266462599716477 },
-  { 1.0464279696166352, 0.89999999999999991, 0.59999999999999998,
-          1.0471975511965976 },
-  { 1.2488156247094004, 0.89999999999999991, 0.59999999999999998,
-          1.2217304763960306 },
-  { 1.4750988777188470, 0.89999999999999991, 0.59999999999999998,
-          1.3962634015954636 },
-  { 1.7211781128919521, 0.89999999999999991, 0.59999999999999998,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.89999999999999991, nu=0.59999999999999998.
-template <typename Tp>
-void test187()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data187)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data187[i].k), Tp(data187[i].nu),
-                   Tp(data187[i].phi));
-      const Tp f0 = data187[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.89999999999999991, nu=0.69999999999999996.
-testcase_ellint_3<double> data188[] = {
-  { -0.0000000000000000, 0.89999999999999991, 0.69999999999999996,
-          0.0000000000000000 },
-  { 0.17402765093102210, 0.89999999999999991, 0.69999999999999996,
-          0.17453292519943295 },
-  { 0.34541608382635131, 0.89999999999999991, 0.69999999999999996,
-          0.34906585039886590 },
-  { 0.51322715827061693, 0.89999999999999991, 0.69999999999999996,
-          0.52359877559829882 },
-  { 0.67903717872440283, 0.89999999999999991, 0.69999999999999996,
-          0.69813170079773179 },
-  { 0.84690113601682671, 0.89999999999999991, 0.69999999999999996,
-          0.87266462599716477 },
-  { 1.0229914311548416, 0.89999999999999991, 0.69999999999999996,
-          1.0471975511965976 },
-  { 1.2148329639709381, 0.89999999999999991, 0.69999999999999996,
-          1.2217304763960306 },
-  { 1.4283586501307799, 0.89999999999999991, 0.69999999999999996,
-          1.3962634015954636 },
-  { 1.6600480747670936, 0.89999999999999991, 0.69999999999999996,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.89999999999999991, nu=0.69999999999999996.
-template <typename Tp>
-void test188()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data188)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data188[i].k), Tp(data188[i].nu),
-                   Tp(data188[i].phi));
-      const Tp f0 = data188[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.89999999999999991, nu=0.80000000000000004.
-testcase_ellint_3<double> data189[] = {
-  { -0.0000000000000000, 0.89999999999999991, 0.80000000000000004,
-          0.0000000000000000 },
-  { 0.17385491439925149, 0.89999999999999991, 0.80000000000000004,
-          0.17453292519943295 },
-  { 0.34412950523113928, 0.89999999999999991, 0.80000000000000004,
-          0.34906585039886590 },
-  { 0.50931321668729601, 0.89999999999999991, 0.80000000000000004,
-          0.52359877559829882 },
-  { 0.67081081392296327, 0.89999999999999991, 0.80000000000000004,
-          0.69813170079773179 },
-  { 0.83268846097293259, 0.89999999999999991, 0.80000000000000004,
-          0.87266462599716477 },
-  { 1.0010985015814025, 0.89999999999999991, 0.80000000000000004,
-          1.0471975511965976 },
-  { 1.1834394045489678, 0.89999999999999991, 0.80000000000000004,
-          1.2217304763960306 },
-  { 1.3855695891683182, 0.89999999999999991, 0.80000000000000004,
-          1.3962634015954636 },
-  { 1.6044591960982200, 0.89999999999999991, 0.80000000000000004,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.89999999999999991, nu=0.80000000000000004.
-template <typename Tp>
-void test189()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data189)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data189[i].k), Tp(data189[i].nu),
-                   Tp(data189[i].phi));
-      const Tp f0 = data189[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for k=0.89999999999999991, nu=0.90000000000000002.
-testcase_ellint_3<double> data190[] = {
-  { -0.0000000000000000, 0.89999999999999991, 0.90000000000000002,
-          0.0000000000000000 },
-  { 0.17368278986240138, 0.89999999999999991, 0.90000000000000002,
-          0.17453292519943295 },
-  { 0.34285962963961397, 0.89999999999999991, 0.90000000000000002,
-          0.34906585039886590 },
-  { 0.50549974644993312, 0.89999999999999991, 0.90000000000000002,
-          0.52359877559829882 },
-  { 0.66290623857720876, 0.89999999999999991, 0.90000000000000002,
-          0.69813170079773179 },
-  { 0.81921183128847164, 0.89999999999999991, 0.90000000000000002,
-          0.87266462599716477 },
-  { 0.98058481956066368, 0.89999999999999991, 0.90000000000000002,
-          1.0471975511965976 },
-  { 1.1543223520473569, 0.89999999999999991, 0.90000000000000002,
-          1.2217304763960306 },
-  { 1.3462119782292934, 0.89999999999999991, 0.90000000000000002,
-          1.3962634015954636 },
-  { 1.5536420236310944, 0.89999999999999991, 0.90000000000000002,
-          1.5707963267948966 },
-};
-
-// Test function for k=0.89999999999999991, nu=0.90000000000000002.
-template <typename Tp>
-void test190()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data190)
-                         / sizeof(testcase_ellint_3<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::ellint_3(Tp(data190[i].k), Tp(data190[i].nu),
-                   Tp(data190[i].phi));
-      const Tp f0 = data190[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_Boost|): 4.4408920985006262e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 7.7782721357365268e-16
+// mean(f - f_Boost): 8.9928064994637676e-16
+// variance(f - f_Boost): 1.5485199571025344e-30
+// stddev(f - f_Boost): 1.2443954183066307e-15
+const testcase_ellint_3<double>
+data180[10] =
+{
+  { 0.0000000000000000, 0.80000000000000004, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17672267223433513, 0.80000000000000004, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36727835537196063, 0.80000000000000004, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.58934569363716649, 0.80000000000000004, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.87032723471138851, 0.80000000000000004, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.2588676111323349, 0.80000000000000004, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.8498731900660019, 0.80000000000000004, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 2.8368381299300420, 0.80000000000000004, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 4.5674844191654058, 0.80000000000000004, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 7.2263259298637115, 0.80000000000000004, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler180 = 2.5000000000000020e-13;
+
+// Test data for k=0.90000000000000013, nu=0.0000000000000000.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.3381508715713360e-16
+// mean(f - f_Boost): 5.8286708792820721e-17
+// variance(f - f_Boost): 4.1942474344433133e-34
+// stddev(f - f_Boost): 2.0479861900030756e-17
+const testcase_ellint_3<double>
+data181[10] =
+{
+  { 0.0000000000000000, 0.90000000000000013, 0.0000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17525427376115027, 0.90000000000000013, 0.0000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.35492464591297446, 0.90000000000000013, 0.0000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.54388221416157123, 0.90000000000000013, 0.0000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.74797400423532512, 0.90000000000000013, 0.0000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 0.97463898451966446, 0.90000000000000013, 0.0000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.2334463254523440, 0.90000000000000013, 0.0000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 1.5355247765594915, 0.90000000000000013, 0.0000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 1.8882928567775128, 0.90000000000000013, 0.0000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 2.2805491384227707, 0.90000000000000013, 0.0000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler181 = 2.5000000000000020e-13;
+
+// Test data for k=0.90000000000000013, nu=0.10000000000000001.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.1500594295134815e-16
+// mean(f - f_Boost): 9.1593399531575410e-17
+// variance(f - f_Boost): 1.0357223256482469e-33
+// stddev(f - f_Boost): 3.2182640128619758e-17
+const testcase_ellint_3<double>
+data182[10] =
+{
+  { 0.0000000000000000, 0.90000000000000013, 0.10000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17543204932716244, 0.90000000000000013, 0.10000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35636022898551184, 0.90000000000000013, 0.10000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.54880278898382595, 0.90000000000000013, 0.10000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.75988834774529268, 0.90000000000000013, 0.10000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 0.99853303003568117, 0.90000000000000013, 0.10000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.2759958823999022, 0.90000000000000013, 0.10000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.6051187364639401, 0.90000000000000013, 0.10000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 1.9941406879519474, 0.90000000000000013, 0.10000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.4295011187834890, 0.90000000000000013, 0.10000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler182 = 2.5000000000000020e-13;
+
+// Test data for k=0.90000000000000013, nu=0.20000000000000001.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.9533518431433547e-16
+// mean(f - f_Boost): 1.0269562977782698e-16
+// variance(f - f_Boost): 1.4388836606733082e-32
+// stddev(f - f_Boost): 1.1995347684303728e-16
+const testcase_ellint_3<double>
+data183[10] =
+{
+  { 0.0000000000000000, 0.90000000000000013, 0.20000000000000001, 
+         0.0000000000000000, 0.0 },
+  { 0.17561047321968409, 0.90000000000000013, 0.20000000000000001, 
+         0.17453292519943295, 0.0 },
+  { 0.35781659944356109, 0.90000000000000013, 0.20000000000000001, 
+         0.34906585039886590, 0.0 },
+  { 0.55388150905215283, 0.90000000000000013, 0.20000000000000001, 
+         0.52359877559829882, 0.0 },
+  { 0.77246874123251441, 0.90000000000000013, 0.20000000000000001, 
+         0.69813170079773179, 0.0 },
+  { 1.0244466254771925, 0.90000000000000013, 0.20000000000000001, 
+         0.87266462599716477, 0.0 },
+  { 1.3234824077640801, 0.90000000000000013, 0.20000000000000001, 
+         1.0471975511965976, 0.0 },
+  { 1.6849848968804240, 0.90000000000000013, 0.20000000000000001, 
+         1.2217304763960306, 0.0 },
+  { 2.1185749045502278, 0.90000000000000013, 0.20000000000000001, 
+         1.3962634015954636, 0.0 },
+  { 2.6076835743348417, 0.90000000000000013, 0.20000000000000001, 
+         1.5707963267948966, 0.0 },
+};
+const double toler183 = 2.5000000000000020e-13;
+
+// Test data for k=0.90000000000000013, nu=0.30000000000000004.
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 3.9712691025502371e-16
+// mean(f - f_Boost): 6.9388939039072284e-17
+// variance(f - f_Boost): 5.9442282234173945e-34
+// stddev(f - f_Boost): 2.4380787976227090e-17
+const testcase_ellint_3<double>
+data184[10] =
+{
+  { 0.0000000000000000, 0.90000000000000013, 0.30000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17578954966746221, 0.90000000000000013, 0.30000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.35929429810867447, 0.90000000000000013, 0.30000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.55912757154240822, 0.90000000000000013, 0.30000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.78578314722025389, 0.90000000000000013, 0.30000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.0526941001131365, 0.90000000000000013, 0.30000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.3769682234538601, 0.90000000000000013, 0.30000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 1.7779437432911240, 0.90000000000000013, 0.30000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 2.2676509341813635, 0.90000000000000013, 0.30000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 2.8256506968858517, 0.90000000000000013, 0.30000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler184 = 2.5000000000000020e-13;
+
+// Test data for k=0.90000000000000013, nu=0.40000000000000002.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.7042235432234642e-16
+// mean(f - f_Boost): 1.8041124150158794e-16
+// variance(f - f_Boost): 8.5834655546147173e-33
+// stddev(f - f_Boost): 9.2646994309662939e-17
+const testcase_ellint_3<double>
+data185[10] =
+{
+  { 0.0000000000000000, 0.90000000000000013, 0.40000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17596928293938452, 0.90000000000000013, 0.40000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36079388642472821, 0.90000000000000013, 0.40000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.56455096667115612, 0.90000000000000013, 0.40000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.79990996997869435, 0.90000000000000013, 0.40000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.0836647913872215, 0.90000000000000013, 0.40000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.4378726836091849, 0.90000000000000013, 0.40000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 1.8880446720682853, 0.90000000000000013, 0.40000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 2.4505848932025232, 0.90000000000000013, 0.40000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 3.1000689868578624, 0.90000000000000013, 0.40000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler185 = 2.5000000000000020e-13;
+
+// Test data for k=0.90000000000000013, nu=0.50000000000000000.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 7
+// max(|f - f_Boost| / |f_Boost|): 4.3939646155354115e-16
+// mean(f - f_Boost): 1.5820678100908481e-16
+// variance(f - f_Boost): 1.0089970755557622e-32
+// stddev(f - f_Boost): 1.0044884646205561e-16
+const testcase_ellint_3<double>
+data186[10] =
+{
+  { 0.0000000000000000, 0.90000000000000013, 0.50000000000000000, 
+         0.0000000000000000, 0.0 },
+  { 0.17614967734498183, 0.90000000000000013, 0.50000000000000000, 
+         0.17453292519943295, 0.0 },
+  { 0.36231594750319435, 0.90000000000000013, 0.50000000000000000, 
+         0.34906585039886590, 0.0 },
+  { 0.57016256984349567, 0.90000000000000013, 0.50000000000000000, 
+         0.52359877559829882, 0.0 },
+  { 0.81494025918293422, 0.90000000000000013, 0.50000000000000000, 
+         0.69813170079773179, 0.0 },
+  { 1.1178482279283477, 0.90000000000000013, 0.50000000000000000, 
+         0.87266462599716477, 0.0 },
+  { 1.5081455873012106, 0.90000000000000013, 0.50000000000000000, 
+         1.0471975511965976, 0.0 },
+  { 2.0213599730863998, 0.90000000000000013, 0.50000000000000000, 
+         1.2217304763960306, 0.0 },
+  { 2.6822467012926832, 0.90000000000000013, 0.50000000000000000, 
+         1.3962634015954636, 0.0 },
+  { 3.4591069002104686, 0.90000000000000013, 0.50000000000000000, 
+         1.5707963267948966, 0.0 },
+};
+const double toler186 = 2.5000000000000020e-13;
+
+// Test data for k=0.90000000000000013, nu=0.60000000000000009.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 4.4914274070443813e-16
+// mean(f - f_Boost): 3.4694469519536142e-16
+// variance(f - f_Boost): 2.5224926888894056e-31
+// stddev(f - f_Boost): 5.0224423231027804e-16
+const testcase_ellint_3<double>
+data187[10] =
+{
+  { 0.0000000000000000, 0.90000000000000013, 0.60000000000000009, 
+         0.0000000000000000, 0.0 },
+  { 0.17633073723493825, 0.90000000000000013, 0.60000000000000009, 
+         0.17453292519943295, 0.0 },
+  { 0.36386108723492810, 0.90000000000000013, 0.60000000000000009, 
+         0.34906585039886590, 0.0 },
+  { 0.57597424744716241, 0.90000000000000013, 0.60000000000000009, 
+         0.52359877559829882, 0.0 },
+  { 0.83098051948501150, 0.90000000000000013, 0.60000000000000009, 
+         0.69813170079773179, 0.0 },
+  { 1.1558706545698916, 0.90000000000000013, 0.60000000000000009, 
+         0.87266462599716477, 0.0 },
+  { 1.5905576379415669, 0.90000000000000013, 0.60000000000000009, 
+         1.0471975511965976, 0.0 },
+  { 2.1875186010215084, 0.90000000000000013, 0.60000000000000009, 
+         1.2217304763960306, 0.0 },
+  { 2.9885767771316853, 0.90000000000000013, 0.60000000000000009, 
+         1.3962634015954636, 0.0 },
+  { 3.9549939883570238, 0.90000000000000013, 0.60000000000000009, 
+         1.5707963267948966, 0.0 },
+};
+const double toler187 = 2.5000000000000020e-13;
+
+// Test data for k=0.90000000000000013, nu=0.70000000000000007.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 9
+// max(|f - f_Boost| / |f_Boost|): 5.5442489886293633e-16
+// mean(f - f_Boost): 4.3576253716537392e-16
+// variance(f - f_Boost): 2.2187568928205130e-31
+// stddev(f - f_Boost): 4.7103682370070737e-16
+const testcase_ellint_3<double>
+data188[10] =
+{
+  { 0.0000000000000000, 0.90000000000000013, 0.70000000000000007, 
+         0.0000000000000000, 0.0 },
+  { 0.17651246700160939, 0.90000000000000013, 0.70000000000000007, 
+         0.17453292519943295, 0.0 },
+  { 0.36542993547358982, 0.90000000000000013, 0.70000000000000007, 
+         0.34906585039886590, 0.0 },
+  { 0.58199897877674867, 0.90000000000000013, 0.70000000000000007, 
+         0.52359877559829882, 0.0 },
+  { 0.84815633587352857, 0.90000000000000013, 0.70000000000000007, 
+         0.69813170079773179, 0.0 },
+  { 1.1985495623872375, 0.90000000000000013, 0.70000000000000007, 
+         0.87266462599716477, 0.0 },
+  { 1.6892158134027691, 0.90000000000000013, 0.70000000000000007, 
+         1.0471975511965976, 0.0 },
+  { 2.4029722191094236, 0.90000000000000013, 0.70000000000000007, 
+         1.2217304763960306, 0.0 },
+  { 3.4201084941340061, 0.90000000000000013, 0.70000000000000007, 
+         1.3962634015954636, 0.0 },
+  { 4.6985482312992444, 0.90000000000000013, 0.70000000000000007, 
+         1.5707963267948966, 0.0 },
+};
+const double toler188 = 2.5000000000000020e-13;
+
+// Test data for k=0.90000000000000013, nu=0.80000000000000004.
+// max(|f - f_Boost|): 1.7763568394002505e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.9362432595976420e-16
+// mean(f - f_Boost): 3.0531133177191805e-16
+// variance(f - f_Boost): 1.1508025840536076e-32
+// stddev(f - f_Boost): 1.0727546709539920e-16
+const testcase_ellint_3<double>
+data189[10] =
+{
+  { 0.0000000000000000, 0.90000000000000013, 0.80000000000000004, 
+         0.0000000000000000, 0.0 },
+  { 0.17669487107954862, 0.90000000000000013, 0.80000000000000004, 
+         0.17453292519943295, 0.0 },
+  { 0.36702314729628421, 0.90000000000000013, 0.80000000000000004, 
+         0.34906585039886590, 0.0 },
+  { 0.58825099711365492, 0.90000000000000013, 0.80000000000000004, 
+         0.52359877559829882, 0.0 },
+  { 0.86661711422209031, 0.90000000000000013, 0.80000000000000004, 
+         0.69813170079773179, 0.0 },
+  { 1.2469779109884802, 0.90000000000000013, 0.80000000000000004, 
+         0.87266462599716477, 0.0 },
+  { 1.8105469760531578, 0.90000000000000013, 0.80000000000000004, 
+         1.0471975511965976, 0.0 },
+  { 2.6989505165893752, 0.90000000000000013, 0.80000000000000004, 
+         1.2217304763960306, 0.0 },
+  { 4.0935213267757433, 0.90000000000000013, 0.80000000000000004, 
+         1.3962634015954636, 0.0 },
+  { 5.9820740813645727, 0.90000000000000013, 0.80000000000000004, 
+         1.5707963267948966, 0.0 },
+};
+const double toler189 = 2.5000000000000020e-13;
+
+// Test data for k=0.90000000000000013, nu=0.90000000000000002.
+// max(|f - f_Boost|): 2.6645352591003757e-15 at index 8
+// max(|f - f_Boost| / |f_Boost|): 4.9577148062669782e-16
+// mean(f - f_Boost): 5.9119376061289588e-16
+// variance(f - f_Boost): 1.7340883003959522e-31
+// stddev(f - f_Boost): 4.1642385863395872e-16
+const testcase_ellint_3<double>
+data190[10] =
+{
+  { 0.0000000000000000, 0.90000000000000013, 0.90000000000000002, 
+         0.0000000000000000, 0.0 },
+  { 0.17687795394604169, 0.90000000000000013, 0.90000000000000002, 
+         0.17453292519943295, 0.0 },
+  { 0.36864140434751286, 0.90000000000000013, 0.90000000000000002, 
+         0.34906585039886590, 0.0 },
+  { 0.59474595366817051, 0.90000000000000013, 0.90000000000000002, 
+         0.52359877559829882, 0.0 },
+  { 0.88654237226056665, 0.90000000000000013, 0.90000000000000002, 
+         0.69813170079773179, 0.0 },
+  { 1.3026595810616726, 0.90000000000000013, 0.90000000000000002, 
+         0.87266462599716477, 0.0 },
+  { 1.9653635459278080, 0.90000000000000013, 0.90000000000000002, 
+         1.0471975511965976, 0.0 },
+  { 3.1451407527189468, 0.90000000000000013, 0.90000000000000002, 
+         1.2217304763960306, 0.0 },
+  { 5.3745230680316132, 0.90000000000000013, 0.90000000000000002, 
+         1.3962634015954636, 0.0 },
+  { 8.9942562031858717, 0.90000000000000013, 0.90000000000000002, 
+         1.5707963267948966, 0.0 },
+};
+const double toler190 = 2.5000000000000020e-13;
+
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_ellint_3<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+        {
+       const Ret f = std::tr1::ellint_3(data[i].k, data[i].nu,
+                    data[i].phi);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
-{
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
-  test015<double>();
-  test016<double>();
-  test017<double>();
-  test018<double>();
-  test019<double>();
-  test020<double>();
-  test021<double>();
-  test022<double>();
-  test023<double>();
-  test024<double>();
-  test025<double>();
-  test026<double>();
-  test027<double>();
-  test028<double>();
-  test029<double>();
-  test030<double>();
-  test031<double>();
-  test032<double>();
-  test033<double>();
-  test034<double>();
-  test035<double>();
-  test036<double>();
-  test037<double>();
-  test038<double>();
-  test039<double>();
-  test040<double>();
-  test041<double>();
-  test042<double>();
-  test043<double>();
-  test044<double>();
-  test045<double>();
-  test046<double>();
-  test047<double>();
-  test048<double>();
-  test049<double>();
-  test050<double>();
-  test051<double>();
-  test052<double>();
-  test053<double>();
-  test054<double>();
-  test055<double>();
-  test056<double>();
-  test057<double>();
-  test058<double>();
-  test059<double>();
-  test060<double>();
-  test061<double>();
-  test062<double>();
-  test063<double>();
-  test064<double>();
-  test065<double>();
-  test066<double>();
-  test067<double>();
-  test068<double>();
-  test069<double>();
-  test070<double>();
-  test071<double>();
-  test072<double>();
-  test073<double>();
-  test074<double>();
-  test075<double>();
-  test076<double>();
-  test077<double>();
-  test078<double>();
-  test079<double>();
-  test080<double>();
-  test081<double>();
-  test082<double>();
-  test083<double>();
-  test084<double>();
-  test085<double>();
-  test086<double>();
-  test087<double>();
-  test088<double>();
-  test089<double>();
-  test090<double>();
-  test091<double>();
-  test092<double>();
-  test093<double>();
-  test094<double>();
-  test095<double>();
-  test096<double>();
-  test097<double>();
-  test098<double>();
-  test099<double>();
-  test100<double>();
-  test101<double>();
-  test102<double>();
-  test103<double>();
-  test104<double>();
-  test105<double>();
-  test106<double>();
-  test107<double>();
-  test108<double>();
-  test109<double>();
-  test110<double>();
-  test111<double>();
-  test112<double>();
-  test113<double>();
-  test114<double>();
-  test115<double>();
-  test116<double>();
-  test117<double>();
-  test118<double>();
-  test119<double>();
-  test120<double>();
-  test121<double>();
-  test122<double>();
-  test123<double>();
-  test124<double>();
-  test125<double>();
-  test126<double>();
-  test127<double>();
-  test128<double>();
-  test129<double>();
-  test130<double>();
-  test131<double>();
-  test132<double>();
-  test133<double>();
-  test134<double>();
-  test135<double>();
-  test136<double>();
-  test137<double>();
-  test138<double>();
-  test139<double>();
-  test140<double>();
-  test141<double>();
-  test142<double>();
-  test143<double>();
-  test144<double>();
-  test145<double>();
-  test146<double>();
-  test147<double>();
-  test148<double>();
-  test149<double>();
-  test150<double>();
-  test151<double>();
-  test152<double>();
-  test153<double>();
-  test154<double>();
-  test155<double>();
-  test156<double>();
-  test157<double>();
-  test158<double>();
-  test159<double>();
-  test160<double>();
-  test161<double>();
-  test162<double>();
-  test163<double>();
-  test164<double>();
-  test165<double>();
-  test166<double>();
-  test167<double>();
-  test168<double>();
-  test169<double>();
-  test170<double>();
-  test171<double>();
-  test172<double>();
-  test173<double>();
-  test174<double>();
-  test175<double>();
-  test176<double>();
-  test177<double>();
-  test178<double>();
-  test179<double>();
-  test180<double>();
-  test181<double>();
-  test182<double>();
-  test183<double>();
-  test184<double>();
-  test185<double>();
-  test186<double>();
-  test187<double>();
-  test188<double>();
-  test189<double>();
-  test190<double>();
+int
+main()
+{
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
+  test(data016, toler016);
+  test(data017, toler017);
+  test(data018, toler018);
+  test(data019, toler019);
+  test(data020, toler020);
+  test(data021, toler021);
+  test(data022, toler022);
+  test(data023, toler023);
+  test(data024, toler024);
+  test(data025, toler025);
+  test(data026, toler026);
+  test(data027, toler027);
+  test(data028, toler028);
+  test(data029, toler029);
+  test(data030, toler030);
+  test(data031, toler031);
+  test(data032, toler032);
+  test(data033, toler033);
+  test(data034, toler034);
+  test(data035, toler035);
+  test(data036, toler036);
+  test(data037, toler037);
+  test(data038, toler038);
+  test(data039, toler039);
+  test(data040, toler040);
+  test(data041, toler041);
+  test(data042, toler042);
+  test(data043, toler043);
+  test(data044, toler044);
+  test(data045, toler045);
+  test(data046, toler046);
+  test(data047, toler047);
+  test(data048, toler048);
+  test(data049, toler049);
+  test(data050, toler050);
+  test(data051, toler051);
+  test(data052, toler052);
+  test(data053, toler053);
+  test(data054, toler054);
+  test(data055, toler055);
+  test(data056, toler056);
+  test(data057, toler057);
+  test(data058, toler058);
+  test(data059, toler059);
+  test(data060, toler060);
+  test(data061, toler061);
+  test(data062, toler062);
+  test(data063, toler063);
+  test(data064, toler064);
+  test(data065, toler065);
+  test(data066, toler066);
+  test(data067, toler067);
+  test(data068, toler068);
+  test(data069, toler069);
+  test(data070, toler070);
+  test(data071, toler071);
+  test(data072, toler072);
+  test(data073, toler073);
+  test(data074, toler074);
+  test(data075, toler075);
+  test(data076, toler076);
+  test(data077, toler077);
+  test(data078, toler078);
+  test(data079, toler079);
+  test(data080, toler080);
+  test(data081, toler081);
+  test(data082, toler082);
+  test(data083, toler083);
+  test(data084, toler084);
+  test(data085, toler085);
+  test(data086, toler086);
+  test(data087, toler087);
+  test(data088, toler088);
+  test(data089, toler089);
+  test(data090, toler090);
+  test(data091, toler091);
+  test(data092, toler092);
+  test(data093, toler093);
+  test(data094, toler094);
+  test(data095, toler095);
+  test(data096, toler096);
+  test(data097, toler097);
+  test(data098, toler098);
+  test(data099, toler099);
+  test(data100, toler100);
+  test(data101, toler101);
+  test(data102, toler102);
+  test(data103, toler103);
+  test(data104, toler104);
+  test(data105, toler105);
+  test(data106, toler106);
+  test(data107, toler107);
+  test(data108, toler108);
+  test(data109, toler109);
+  test(data110, toler110);
+  test(data111, toler111);
+  test(data112, toler112);
+  test(data113, toler113);
+  test(data114, toler114);
+  test(data115, toler115);
+  test(data116, toler116);
+  test(data117, toler117);
+  test(data118, toler118);
+  test(data119, toler119);
+  test(data120, toler120);
+  test(data121, toler121);
+  test(data122, toler122);
+  test(data123, toler123);
+  test(data124, toler124);
+  test(data125, toler125);
+  test(data126, toler126);
+  test(data127, toler127);
+  test(data128, toler128);
+  test(data129, toler129);
+  test(data130, toler130);
+  test(data131, toler131);
+  test(data132, toler132);
+  test(data133, toler133);
+  test(data134, toler134);
+  test(data135, toler135);
+  test(data136, toler136);
+  test(data137, toler137);
+  test(data138, toler138);
+  test(data139, toler139);
+  test(data140, toler140);
+  test(data141, toler141);
+  test(data142, toler142);
+  test(data143, toler143);
+  test(data144, toler144);
+  test(data145, toler145);
+  test(data146, toler146);
+  test(data147, toler147);
+  test(data148, toler148);
+  test(data149, toler149);
+  test(data150, toler150);
+  test(data151, toler151);
+  test(data152, toler152);
+  test(data153, toler153);
+  test(data154, toler154);
+  test(data155, toler155);
+  test(data156, toler156);
+  test(data157, toler157);
+  test(data158, toler158);
+  test(data159, toler159);
+  test(data160, toler160);
+  test(data161, toler161);
+  test(data162, toler162);
+  test(data163, toler163);
+  test(data164, toler164);
+  test(data165, toler165);
+  test(data166, toler166);
+  test(data167, toler167);
+  test(data168, toler168);
+  test(data169, toler169);
+  test(data170, toler170);
+  test(data171, toler171);
+  test(data172, toler172);
+  test(data173, toler173);
+  test(data174, toler174);
+  test(data175, toler175);
+  test(data176, toler176);
+  test(data177, toler177);
+  test(data178, toler178);
+  test(data179, toler179);
+  test(data180, toler180);
+  test(data181, toler181);
+  test(data182, toler182);
+  test(data183, toler183);
+  test(data184, toler184);
+  test(data185, toler185);
+  test(data186, toler186);
+  test(data187, toler187);
+  test(data188, toler188);
+  test(data189, toler189);
+  test(data190, toler190);
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/pr66689.cc b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/pr66689.cc
new file mode 100644 (file)
index 0000000..1ee5f4f
--- /dev/null
@@ -0,0 +1,22 @@
+
+#include <tr1/cmath>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  const double pi = 3.141592654;
+
+  double Pi1 = std::tr1::ellint_3(0.75, 0.0, pi / 2.0);
+  VERIFY(std::abs(Pi1 - 1.91099) < 0.00001);
+
+  double Pi2 = std::tr1::ellint_3(0.75, 0.5, pi / 2.0);
+  VERIFY(std::abs(Pi2 - 2.80011) < 0.00001);
+}
+
+int
+main()
+{
+  test01();
+  return 0;
+}
index 145bb37..6cfc292 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 
 //  expint
 
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data.
-testcase_expint<double> data001[] = {
-  { -3.7832640295504591e-24, -50.000000000000000 },
-  { -1.0489811642368024e-23, -49.000000000000000 },
-  { -2.9096641904058423e-23, -48.000000000000000 },
-  { -8.0741978427258127e-23, -47.000000000000000 },
-  { -2.2415317597442998e-22, -46.000000000000000 },
-  { -6.2256908094623838e-22, -45.000000000000000 },
-  { -1.7299598742816476e-21, -44.000000000000000 },
-  { -4.8094965569500181e-21, -43.000000000000000 },
-  { -1.3377908810011775e-20, -42.000000000000000 },
-  { -3.7231667764599780e-20, -41.000000000000000 },
-  { -1.0367732614516570e-19, -40.000000000000000 },
-  { -2.8887793015227007e-19, -39.000000000000000 },
-  { -8.0541069142907499e-19, -38.000000000000000 },
-  { -2.2470206975885714e-18, -37.000000000000000 },
-  { -6.2733390097622421e-18, -36.000000000000000 },
-  { -1.7527059389947371e-17, -35.000000000000000 },
-  { -4.9006761183927874e-17, -34.000000000000000 },
-  { -1.3713843484487468e-16, -33.000000000000000 },
-  { -3.8409618012250666e-16, -32.000000000000000 },
-  { -1.0767670386162383e-15, -31.000000000000000 },
-  { -3.0215520106888128e-15, -30.000000000000000 },
-  { -8.4877597783535618e-15, -29.000000000000000 },
-  { -2.3869415119337330e-14, -28.000000000000000 },
-  { -6.7206374352620390e-14, -27.000000000000000 },
-  { -1.8946858856749785e-13, -26.000000000000000 },
-  { -5.3488997553402167e-13, -25.000000000000000 },
-  { -1.5123058939997059e-12, -24.000000000000000 },
-  { -4.2826847956656722e-12, -23.000000000000000 },
-  { -1.2149378956204371e-11, -22.000000000000000 },
-  { -3.4532012671467559e-11, -21.000000000000000 },
-  { -9.8355252906498815e-11, -20.000000000000000 },
-  { -2.8078290970607954e-10, -19.000000000000000 },
-  { -8.0360903448286769e-10, -18.000000000000000 },
-  { -2.3064319898216547e-09, -17.000000000000000 },
-  { -6.6404872494410427e-09, -16.000000000000000 },
-  { -1.9186278921478670e-08, -15.000000000000000 },
-  { -5.5656311111451816e-08, -14.000000000000000 },
-  { -1.6218662188014328e-07, -13.000000000000000 },
-  { -4.7510818246724931e-07, -12.000000000000000 },
-  { -1.4003003042474418e-06, -11.000000000000000 },
-  { -4.1569689296853246e-06, -10.000000000000000 },
-  { -1.2447354178006272e-05, -9.0000000000000000 },
-  { -3.7665622843924906e-05, -8.0000000000000000 },
-  { -0.00011548173161033820, -7.0000000000000000 },
-  { -0.00036008245216265867, -6.0000000000000000 },
-  { -0.0011482955912753257, -5.0000000000000000 },
-  { -0.0037793524098489058, -4.0000000000000000 },
-  { -0.013048381094197037, -3.0000000000000000 },
-  { -0.048900510708061125, -2.0000000000000000 },
-  { -0.21938393439552029, -1.0000000000000000 },
+// max(|f - f_GSL|): 4.9960036108132044e-16 at index 49
+// max(|f - f_GSL| / |f_GSL|): 2.2772878171680836e-15
+// mean(f - f_GSL): 1.1295166444684511e-17
+// variance(f - f_GSL): 4.9654719514602855e-33
+// stddev(f - f_GSL): 7.0466104982894328e-17
+const testcase_expint<double>
+data001[50] =
+{
+  { -3.7832640295504591e-24, -50.000000000000000, 0.0 },
+  { -1.0489811642368024e-23, -49.000000000000000, 0.0 },
+  { -2.9096641904058423e-23, -48.000000000000000, 0.0 },
+  { -8.0741978427258127e-23, -47.000000000000000, 0.0 },
+  { -2.2415317597442998e-22, -46.000000000000000, 0.0 },
+  { -6.2256908094623848e-22, -45.000000000000000, 0.0 },
+  { -1.7299598742816476e-21, -44.000000000000000, 0.0 },
+  { -4.8094965569500181e-21, -43.000000000000000, 0.0 },
+  { -1.3377908810011775e-20, -42.000000000000000, 0.0 },
+  { -3.7231667764599780e-20, -41.000000000000000, 0.0 },
+  { -1.0367732614516570e-19, -40.000000000000000, 0.0 },
+  { -2.8887793015227007e-19, -39.000000000000000, 0.0 },
+  { -8.0541069142907499e-19, -38.000000000000000, 0.0 },
+  { -2.2470206975885710e-18, -37.000000000000000, 0.0 },
+  { -6.2733390097622421e-18, -36.000000000000000, 0.0 },
+  { -1.7527059389947371e-17, -35.000000000000000, 0.0 },
+  { -4.9006761183927874e-17, -34.000000000000000, 0.0 },
+  { -1.3713843484487468e-16, -33.000000000000000, 0.0 },
+  { -3.8409618012250671e-16, -32.000000000000000, 0.0 },
+  { -1.0767670386162381e-15, -31.000000000000000, 0.0 },
+  { -3.0215520106888124e-15, -30.000000000000000, 0.0 },
+  { -8.4877597783535634e-15, -29.000000000000000, 0.0 },
+  { -2.3869415119337330e-14, -28.000000000000000, 0.0 },
+  { -6.7206374352620390e-14, -27.000000000000000, 0.0 },
+  { -1.8946858856749785e-13, -26.000000000000000, 0.0 },
+  { -5.3488997553402167e-13, -25.000000000000000, 0.0 },
+  { -1.5123058939997059e-12, -24.000000000000000, 0.0 },
+  { -4.2826847956656722e-12, -23.000000000000000, 0.0 },
+  { -1.2149378956204371e-11, -22.000000000000000, 0.0 },
+  { -3.4532012671467559e-11, -21.000000000000000, 0.0 },
+  { -9.8355252906498815e-11, -20.000000000000000, 0.0 },
+  { -2.8078290970607954e-10, -19.000000000000000, 0.0 },
+  { -8.0360903448286769e-10, -18.000000000000000, 0.0 },
+  { -2.3064319898216543e-09, -17.000000000000000, 0.0 },
+  { -6.6404872494410427e-09, -16.000000000000000, 0.0 },
+  { -1.9186278921478670e-08, -15.000000000000000, 0.0 },
+  { -5.5656311111451816e-08, -14.000000000000000, 0.0 },
+  { -1.6218662188014328e-07, -13.000000000000000, 0.0 },
+  { -4.7510818246724931e-07, -12.000000000000000, 0.0 },
+  { -1.4003003042474418e-06, -11.000000000000000, 0.0 },
+  { -4.1569689296853246e-06, -10.000000000000000, 0.0 },
+  { -1.2447354178006272e-05, -9.0000000000000000, 0.0 },
+  { -3.7665622843924906e-05, -8.0000000000000000, 0.0 },
+  { -0.00011548173161033820, -7.0000000000000000, 0.0 },
+  { -0.00036008245216265862, -6.0000000000000000, 0.0 },
+  { -0.0011482955912753257, -5.0000000000000000, 0.0 },
+  { -0.0037793524098489063, -4.0000000000000000, 0.0 },
+  { -0.013048381094197037, -3.0000000000000000, 0.0 },
+  { -0.048900510708061125, -2.0000000000000000, 0.0 },
+  { -0.21938393439552029, -1.0000000000000000, 0.0 },
 };
+const double toler001 = 2.5000000000000020e-13;
+//  expint
 
-// Test function.
-template <typename Tp>
-void test001()
+
+// Test data.
+// max(|f - f_GSL|): 16384.000000000000 at index 48
+// max(|f - f_GSL| / |f_GSL|): 1.2494807514688476e-15
+// mean(f - f_GSL): 371.15283351771996
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): 7.1444587641577012e+253
+const testcase_expint<double>
+data002[50] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_expint<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::expint(Tp(data001[i].x));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+  { 1.8951178163559366, 1.0000000000000000, 0.0 },
+  { 4.9542343560018907, 2.0000000000000000, 0.0 },
+  { 9.9338325706254160, 3.0000000000000000, 0.0 },
+  { 19.630874470056217, 4.0000000000000000, 0.0 },
+  { 40.185275355803178, 5.0000000000000000, 0.0 },
+  { 85.989762142439204, 6.0000000000000000, 0.0 },
+  { 191.50474333550136, 7.0000000000000000, 0.0 },
+  { 440.37989953483833, 8.0000000000000000, 0.0 },
+  { 1037.8782907170896, 9.0000000000000000, 0.0 },
+  { 2492.2289762418782, 10.000000000000000, 0.0 },
+  { 6071.4063740986112, 11.000000000000000, 0.0 },
+  { 14959.532666397528, 12.000000000000000, 0.0 },
+  { 37197.688490689041, 13.000000000000000, 0.0 },
+  { 93192.513633965369, 14.000000000000000, 0.0 },
+  { 234955.85249076830, 15.000000000000000, 0.0 },
+  { 595560.99867083691, 16.000000000000000, 0.0 },
+  { 1516637.8940425171, 17.000000000000000, 0.0 },
+  { 3877904.3305974435, 18.000000000000000, 0.0 },
+  { 9950907.2510468438, 19.000000000000000, 0.0 },
+  { 25615652.664056588, 20.000000000000000, 0.0 },
+  { 66127186.355484933, 21.000000000000000, 0.0 },
+  { 171144671.30036369, 22.000000000000000, 0.0 },
+  { 443966369.83027118, 23.000000000000000, 0.0 },
+  { 1154115391.8491828, 24.000000000000000, 0.0 },
+  { 3005950906.5255494, 25.000000000000000, 0.0 },
+  { 7842940991.8981876, 26.000000000000000, 0.0 },
+  { 20496497119.880810, 27.000000000000000, 0.0 },
+  { 53645118592.314682, 28.000000000000000, 0.0 },
+  { 140599195758.40689, 29.000000000000000, 0.0 },
+  { 368973209407.27417, 30.000000000000000, 0.0 },
+  { 969455575968.39392, 31.000000000000000, 0.0 },
+  { 2550043566357.7871, 32.000000000000000, 0.0 },
+  { 6714640184076.4971, 33.000000000000000, 0.0 },
+  { 17698037244116.266, 34.000000000000000, 0.0 },
+  { 46690550144661.602, 35.000000000000000, 0.0 },
+  { 123285207991209.75, 36.000000000000000, 0.0 },
+  { 325798899867226.50, 37.000000000000000, 0.0 },
+  { 861638819996578.75, 38.000000000000000, 0.0 },
+  { 2280446200301902.5, 39.000000000000000, 0.0 },
+  { 6039718263611242.0, 40.000000000000000, 0.0 },
+  { 16006649143245042., 41.000000000000000, 0.0 },
+  { 42447960921368512., 42.000000000000000, 0.0 },
+  { 1.1263482901669666e+17, 43.000000000000000, 0.0 },
+  { 2.9904447186323366e+17, 44.000000000000000, 0.0 },
+  { 7.9439160357044531e+17, 45.000000000000000, 0.0 },
+  { 2.1113423886478239e+18, 46.000000000000000, 0.0 },
+  { 5.6143296808103424e+18, 47.000000000000000, 0.0 },
+  { 1.4936302131129930e+19, 48.000000000000000, 0.0 },
+  { 3.9754427479037444e+19, 49.000000000000000, 0.0 },
+  { 1.0585636897131690e+20, 50.000000000000000, 0.0 },
+};
+const double toler002 = 2.5000000000000020e-13;
+
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_expint<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+      {
+       const Ret f = std::tr1::expint(data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
+int
+main()
 {
-  test001<double>();
+  test(data001, toler001);
+  test(data002, toler002);
   return 0;
 }
index 65ab3c3..9eff168 100644 (file)
@@ -1,3 +1,6 @@
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
+//
 // Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 #endif
 #include <specfun_testcase.h>
 
-
 // Test data for n=0.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
-testcase_hermite<double>
-data001[] =
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data001[201] =
 {
-  { 1.0000000000000000, 0, -10.000000000000000 },
-  { 1.0000000000000000, 0, -9.9000000000000004 },
-  { 1.0000000000000000, 0, -9.8000000000000007 },
-  { 1.0000000000000000, 0, -9.6999999999999993 },
-  { 1.0000000000000000, 0, -9.5999999999999996 },
-  { 1.0000000000000000, 0, -9.5000000000000000 },
-  { 1.0000000000000000, 0, -9.4000000000000004 },
-  { 1.0000000000000000, 0, -9.3000000000000007 },
-  { 1.0000000000000000, 0, -9.1999999999999993 },
-  { 1.0000000000000000, 0, -9.0999999999999996 },
-  { 1.0000000000000000, 0, -9.0000000000000000 },
-  { 1.0000000000000000, 0, -8.9000000000000004 },
-  { 1.0000000000000000, 0, -8.8000000000000007 },
-  { 1.0000000000000000, 0, -8.6999999999999993 },
-  { 1.0000000000000000, 0, -8.5999999999999996 },
-  { 1.0000000000000000, 0, -8.5000000000000000 },
-  { 1.0000000000000000, 0, -8.4000000000000004 },
-  { 1.0000000000000000, 0, -8.3000000000000007 },
-  { 1.0000000000000000, 0, -8.1999999999999993 },
-  { 1.0000000000000000, 0, -8.0999999999999996 },
-  { 1.0000000000000000, 0, -8.0000000000000000 },
-  { 1.0000000000000000, 0, -7.9000000000000004 },
-  { 1.0000000000000000, 0, -7.7999999999999998 },
-  { 1.0000000000000000, 0, -7.7000000000000002 },
-  { 1.0000000000000000, 0, -7.5999999999999996 },
-  { 1.0000000000000000, 0, -7.5000000000000000 },
-  { 1.0000000000000000, 0, -7.4000000000000004 },
-  { 1.0000000000000000, 0, -7.2999999999999998 },
-  { 1.0000000000000000, 0, -7.2000000000000002 },
-  { 1.0000000000000000, 0, -7.0999999999999996 },
-  { 1.0000000000000000, 0, -7.0000000000000000 },
-  { 1.0000000000000000, 0, -6.9000000000000004 },
-  { 1.0000000000000000, 0, -6.7999999999999998 },
-  { 1.0000000000000000, 0, -6.7000000000000002 },
-  { 1.0000000000000000, 0, -6.5999999999999996 },
-  { 1.0000000000000000, 0, -6.5000000000000000 },
-  { 1.0000000000000000, 0, -6.4000000000000004 },
-  { 1.0000000000000000, 0, -6.2999999999999998 },
-  { 1.0000000000000000, 0, -6.2000000000000002 },
-  { 1.0000000000000000, 0, -6.0999999999999996 },
-  { 1.0000000000000000, 0, -6.0000000000000000 },
-  { 1.0000000000000000, 0, -5.9000000000000004 },
-  { 1.0000000000000000, 0, -5.7999999999999998 },
-  { 1.0000000000000000, 0, -5.7000000000000002 },
-  { 1.0000000000000000, 0, -5.5999999999999996 },
-  { 1.0000000000000000, 0, -5.5000000000000000 },
-  { 1.0000000000000000, 0, -5.4000000000000004 },
-  { 1.0000000000000000, 0, -5.2999999999999998 },
-  { 1.0000000000000000, 0, -5.2000000000000002 },
-  { 1.0000000000000000, 0, -5.0999999999999996 },
-  { 1.0000000000000000, 0, -5.0000000000000000 },
-  { 1.0000000000000000, 0, -4.9000000000000004 },
-  { 1.0000000000000000, 0, -4.7999999999999998 },
-  { 1.0000000000000000, 0, -4.7000000000000002 },
-  { 1.0000000000000000, 0, -4.5999999999999996 },
-  { 1.0000000000000000, 0, -4.5000000000000000 },
-  { 1.0000000000000000, 0, -4.4000000000000004 },
-  { 1.0000000000000000, 0, -4.2999999999999998 },
-  { 1.0000000000000000, 0, -4.2000000000000002 },
-  { 1.0000000000000000, 0, -4.0999999999999996 },
-  { 1.0000000000000000, 0, -4.0000000000000000 },
-  { 1.0000000000000000, 0, -3.9000000000000004 },
-  { 1.0000000000000000, 0, -3.7999999999999998 },
-  { 1.0000000000000000, 0, -3.7000000000000002 },
-  { 1.0000000000000000, 0, -3.5999999999999996 },
-  { 1.0000000000000000, 0, -3.5000000000000000 },
-  { 1.0000000000000000, 0, -3.4000000000000004 },
-  { 1.0000000000000000, 0, -3.2999999999999998 },
-  { 1.0000000000000000, 0, -3.2000000000000002 },
-  { 1.0000000000000000, 0, -3.0999999999999996 },
-  { 1.0000000000000000, 0, -3.0000000000000000 },
-  { 1.0000000000000000, 0, -2.9000000000000004 },
-  { 1.0000000000000000, 0, -2.7999999999999998 },
-  { 1.0000000000000000, 0, -2.7000000000000002 },
-  { 1.0000000000000000, 0, -2.5999999999999996 },
-  { 1.0000000000000000, 0, -2.5000000000000000 },
-  { 1.0000000000000000, 0, -2.4000000000000004 },
-  { 1.0000000000000000, 0, -2.2999999999999998 },
-  { 1.0000000000000000, 0, -2.2000000000000002 },
-  { 1.0000000000000000, 0, -2.0999999999999996 },
-  { 1.0000000000000000, 0, -2.0000000000000000 },
-  { 1.0000000000000000, 0, -1.9000000000000004 },
-  { 1.0000000000000000, 0, -1.8000000000000007 },
-  { 1.0000000000000000, 0, -1.6999999999999993 },
-  { 1.0000000000000000, 0, -1.5999999999999996 },
-  { 1.0000000000000000, 0, -1.5000000000000000 },
-  { 1.0000000000000000, 0, -1.4000000000000004 },
-  { 1.0000000000000000, 0, -1.3000000000000007 },
-  { 1.0000000000000000, 0, -1.1999999999999993 },
-  { 1.0000000000000000, 0, -1.0999999999999996 },
-  { 1.0000000000000000, 0, -1.0000000000000000 },
-  { 1.0000000000000000, 0, -0.90000000000000036 },
-  { 1.0000000000000000, 0, -0.80000000000000071 },
-  { 1.0000000000000000, 0, -0.69999999999999929 },
-  { 1.0000000000000000, 0, -0.59999999999999964 },
-  { 1.0000000000000000, 0, -0.50000000000000000 },
-  { 1.0000000000000000, 0, -0.40000000000000036 },
-  { 1.0000000000000000, 0, -0.30000000000000071 },
-  { 1.0000000000000000, 0, -0.19999999999999929 },
-  { 1.0000000000000000, 0, -0.099999999999999645 },
-  { 1.0000000000000000, 0, 0.0000000000000000 },
-  { 1.0000000000000000, 0, 0.099999999999999645 },
-  { 1.0000000000000000, 0, 0.19999999999999929 },
-  { 1.0000000000000000, 0, 0.30000000000000071 },
-  { 1.0000000000000000, 0, 0.40000000000000036 },
-  { 1.0000000000000000, 0, 0.50000000000000000 },
-  { 1.0000000000000000, 0, 0.59999999999999964 },
-  { 1.0000000000000000, 0, 0.69999999999999929 },
-  { 1.0000000000000000, 0, 0.80000000000000071 },
-  { 1.0000000000000000, 0, 0.90000000000000036 },
-  { 1.0000000000000000, 0, 1.0000000000000000 },
-  { 1.0000000000000000, 0, 1.0999999999999996 },
-  { 1.0000000000000000, 0, 1.1999999999999993 },
-  { 1.0000000000000000, 0, 1.3000000000000007 },
-  { 1.0000000000000000, 0, 1.4000000000000004 },
-  { 1.0000000000000000, 0, 1.5000000000000000 },
-  { 1.0000000000000000, 0, 1.5999999999999996 },
-  { 1.0000000000000000, 0, 1.6999999999999993 },
-  { 1.0000000000000000, 0, 1.8000000000000007 },
-  { 1.0000000000000000, 0, 1.9000000000000004 },
-  { 1.0000000000000000, 0, 2.0000000000000000 },
-  { 1.0000000000000000, 0, 2.0999999999999996 },
-  { 1.0000000000000000, 0, 2.1999999999999993 },
-  { 1.0000000000000000, 0, 2.3000000000000007 },
-  { 1.0000000000000000, 0, 2.4000000000000004 },
-  { 1.0000000000000000, 0, 2.5000000000000000 },
-  { 1.0000000000000000, 0, 2.5999999999999996 },
-  { 1.0000000000000000, 0, 2.6999999999999993 },
-  { 1.0000000000000000, 0, 2.8000000000000007 },
-  { 1.0000000000000000, 0, 2.9000000000000004 },
-  { 1.0000000000000000, 0, 3.0000000000000000 },
-  { 1.0000000000000000, 0, 3.0999999999999996 },
-  { 1.0000000000000000, 0, 3.1999999999999993 },
-  { 1.0000000000000000, 0, 3.3000000000000007 },
-  { 1.0000000000000000, 0, 3.4000000000000004 },
-  { 1.0000000000000000, 0, 3.5000000000000000 },
-  { 1.0000000000000000, 0, 3.5999999999999996 },
-  { 1.0000000000000000, 0, 3.6999999999999993 },
-  { 1.0000000000000000, 0, 3.8000000000000007 },
-  { 1.0000000000000000, 0, 3.9000000000000004 },
-  { 1.0000000000000000, 0, 4.0000000000000000 },
-  { 1.0000000000000000, 0, 4.0999999999999996 },
-  { 1.0000000000000000, 0, 4.1999999999999993 },
-  { 1.0000000000000000, 0, 4.3000000000000007 },
-  { 1.0000000000000000, 0, 4.4000000000000004 },
-  { 1.0000000000000000, 0, 4.5000000000000000 },
-  { 1.0000000000000000, 0, 4.5999999999999996 },
-  { 1.0000000000000000, 0, 4.6999999999999993 },
-  { 1.0000000000000000, 0, 4.8000000000000007 },
-  { 1.0000000000000000, 0, 4.9000000000000004 },
-  { 1.0000000000000000, 0, 5.0000000000000000 },
-  { 1.0000000000000000, 0, 5.0999999999999996 },
-  { 1.0000000000000000, 0, 5.1999999999999993 },
-  { 1.0000000000000000, 0, 5.3000000000000007 },
-  { 1.0000000000000000, 0, 5.4000000000000004 },
-  { 1.0000000000000000, 0, 5.5000000000000000 },
-  { 1.0000000000000000, 0, 5.5999999999999996 },
-  { 1.0000000000000000, 0, 5.6999999999999993 },
-  { 1.0000000000000000, 0, 5.8000000000000007 },
-  { 1.0000000000000000, 0, 5.9000000000000004 },
-  { 1.0000000000000000, 0, 6.0000000000000000 },
-  { 1.0000000000000000, 0, 6.1000000000000014 },
-  { 1.0000000000000000, 0, 6.1999999999999993 },
-  { 1.0000000000000000, 0, 6.3000000000000007 },
-  { 1.0000000000000000, 0, 6.3999999999999986 },
-  { 1.0000000000000000, 0, 6.5000000000000000 },
-  { 1.0000000000000000, 0, 6.6000000000000014 },
-  { 1.0000000000000000, 0, 6.6999999999999993 },
-  { 1.0000000000000000, 0, 6.8000000000000007 },
-  { 1.0000000000000000, 0, 6.8999999999999986 },
-  { 1.0000000000000000, 0, 7.0000000000000000 },
-  { 1.0000000000000000, 0, 7.1000000000000014 },
-  { 1.0000000000000000, 0, 7.1999999999999993 },
-  { 1.0000000000000000, 0, 7.3000000000000007 },
-  { 1.0000000000000000, 0, 7.3999999999999986 },
-  { 1.0000000000000000, 0, 7.5000000000000000 },
-  { 1.0000000000000000, 0, 7.6000000000000014 },
-  { 1.0000000000000000, 0, 7.6999999999999993 },
-  { 1.0000000000000000, 0, 7.8000000000000007 },
-  { 1.0000000000000000, 0, 7.8999999999999986 },
-  { 1.0000000000000000, 0, 8.0000000000000000 },
-  { 1.0000000000000000, 0, 8.1000000000000014 },
-  { 1.0000000000000000, 0, 8.1999999999999993 },
-  { 1.0000000000000000, 0, 8.3000000000000007 },
-  { 1.0000000000000000, 0, 8.3999999999999986 },
-  { 1.0000000000000000, 0, 8.5000000000000000 },
-  { 1.0000000000000000, 0, 8.6000000000000014 },
-  { 1.0000000000000000, 0, 8.6999999999999993 },
-  { 1.0000000000000000, 0, 8.8000000000000007 },
-  { 1.0000000000000000, 0, 8.8999999999999986 },
-  { 1.0000000000000000, 0, 9.0000000000000000 },
-  { 1.0000000000000000, 0, 9.1000000000000014 },
-  { 1.0000000000000000, 0, 9.1999999999999993 },
-  { 1.0000000000000000, 0, 9.3000000000000007 },
-  { 1.0000000000000000, 0, 9.3999999999999986 },
-  { 1.0000000000000000, 0, 9.5000000000000000 },
-  { 1.0000000000000000, 0, 9.6000000000000014 },
-  { 1.0000000000000000, 0, 9.6999999999999993 },
-  { 1.0000000000000000, 0, 9.8000000000000007 },
-  { 1.0000000000000000, 0, 9.8999999999999986 },
-  { 1.0000000000000000, 0, 10.000000000000000 },
+  { 1.0000000000000000, 0, -10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -9.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -9.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, -9.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -9.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -9.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -9.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -9.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, -9.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -9.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -8.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -8.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, -8.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -8.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -8.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -8.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -8.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, -8.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -8.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -7.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -7.7999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -7.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -7.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -7.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -7.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -7.2999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -7.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -7.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -6.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -6.7999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -6.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -6.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -6.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -6.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -6.2999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -6.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -6.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -5.8999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -5.7999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -5.7000000000000002, 0.0 },
+  { 1.0000000000000000, 0, -5.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -5.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -5.3999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -5.2999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -5.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -5.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -4.8999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -4.7999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -4.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -4.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -4.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -4.3999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -4.2999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -4.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -4.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -3.8999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -3.7999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -3.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -3.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -3.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -3.3999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -3.2999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -3.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -3.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -2.8999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -2.7999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -2.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -2.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -2.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -2.3999999999999995, 0.0 },
+  { 1.0000000000000000, 0, -2.2999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -2.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -2.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -1.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -1.7999999999999989, 0.0 },
+  { 1.0000000000000000, 0, -1.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -1.5999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -1.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -1.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -1.2999999999999989, 0.0 },
+  { 1.0000000000000000, 0, -1.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -1.0999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -0.90000000000000036, 0.0 },
+  { 1.0000000000000000, 0, -0.79999999999999893, 0.0 },
+  { 1.0000000000000000, 0, -0.69999999999999929, 0.0 },
+  { 1.0000000000000000, 0, -0.59999999999999964, 0.0 },
+  { 1.0000000000000000, 0, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -0.39999999999999858, 0.0 },
+  { 1.0000000000000000, 0, -0.29999999999999893, 0.0 },
+  { 1.0000000000000000, 0, -0.19999999999999929, 0.0 },
+  { 1.0000000000000000, 0, -0.099999999999999645, 0.0 },
+  { 1.0000000000000000, 0, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0.10000000000000142, 0.0 },
+  { 1.0000000000000000, 0, 0.20000000000000107, 0.0 },
+  { 1.0000000000000000, 0, 0.30000000000000071, 0.0 },
+  { 1.0000000000000000, 0, 0.40000000000000036, 0.0 },
+  { 1.0000000000000000, 0, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0.60000000000000142, 0.0 },
+  { 1.0000000000000000, 0, 0.70000000000000107, 0.0 },
+  { 1.0000000000000000, 0, 0.80000000000000071, 0.0 },
+  { 1.0000000000000000, 0, 0.90000000000000036, 0.0 },
+  { 1.0000000000000000, 0, 1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 1.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 1.2000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 1.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 1.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 1.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 1.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 1.7000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 1.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 1.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 2.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 2.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 2.2000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 2.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 2.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 2.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 2.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 2.7000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 2.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 2.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 3.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 3.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 3.2000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 3.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 3.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 3.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 3.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 3.7000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 3.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 3.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 4.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 4.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 4.2000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 4.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 4.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 4.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 4.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 4.7000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 4.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 4.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 5.2000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 5.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 5.4000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 5.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 5.7000000000000011, 0.0 },
+  { 1.0000000000000000, 0, 5.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 5.9000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 6.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 6.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 6.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, 6.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 6.4000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 6.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 6.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 6.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, 6.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 6.9000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 7.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 7.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 7.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, 7.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 7.4000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 7.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 7.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 7.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, 7.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 7.9000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 8.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 8.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 8.1999999999999993, 0.0 },
+  { 1.0000000000000000, 0, 8.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 8.4000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 8.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 8.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 8.6999999999999993, 0.0 },
+  { 1.0000000000000000, 0, 8.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 8.9000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 9.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 9.1000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 9.2000000000000028, 0.0 },
+  { 1.0000000000000000, 0, 9.3000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 9.4000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 9.5000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 9.6000000000000014, 0.0 },
+  { 1.0000000000000000, 0, 9.7000000000000028, 0.0 },
+  { 1.0000000000000000, 0, 9.8000000000000007, 0.0 },
+  { 1.0000000000000000, 0, 9.9000000000000021, 0.0 },
+  { 1.0000000000000000, 0, 10.000000000000000, 0.0 },
 };
-
-// Test function for n=0.
-template<typename Tp>
-  void
-  test001()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data001)
-                          / sizeof(testcase_hermite<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::hermite(Tp(data001[i].n), Tp(data001[i].x));
-       const Tp f0 = data001[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler001 = 2.5000000000000020e-13;
 
 // Test data for n=1.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
-testcase_hermite<double>
-data002[] =
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data002[201] =
 {
-  { -20.000000000000000, 1, -10.000000000000000 },
-  { -19.800000000000001, 1, -9.9000000000000004 },
-  { -19.600000000000001, 1, -9.8000000000000007 },
-  { -19.399999999999999, 1, -9.6999999999999993 },
-  { -19.199999999999999, 1, -9.5999999999999996 },
-  { -19.000000000000000, 1, -9.5000000000000000 },
-  { -18.800000000000001, 1, -9.4000000000000004 },
-  { -18.600000000000001, 1, -9.3000000000000007 },
-  { -18.399999999999999, 1, -9.1999999999999993 },
-  { -18.199999999999999, 1, -9.0999999999999996 },
-  { -18.000000000000000, 1, -9.0000000000000000 },
-  { -17.800000000000001, 1, -8.9000000000000004 },
-  { -17.600000000000001, 1, -8.8000000000000007 },
-  { -17.399999999999999, 1, -8.6999999999999993 },
-  { -17.199999999999999, 1, -8.5999999999999996 },
-  { -17.000000000000000, 1, -8.5000000000000000 },
-  { -16.800000000000001, 1, -8.4000000000000004 },
-  { -16.600000000000001, 1, -8.3000000000000007 },
-  { -16.399999999999999, 1, -8.1999999999999993 },
-  { -16.199999999999999, 1, -8.0999999999999996 },
-  { -16.000000000000000, 1, -8.0000000000000000 },
-  { -15.800000000000001, 1, -7.9000000000000004 },
-  { -15.600000000000000, 1, -7.7999999999999998 },
-  { -15.400000000000000, 1, -7.7000000000000002 },
-  { -15.199999999999999, 1, -7.5999999999999996 },
-  { -15.000000000000000, 1, -7.5000000000000000 },
-  { -14.800000000000001, 1, -7.4000000000000004 },
-  { -14.600000000000000, 1, -7.2999999999999998 },
-  { -14.400000000000000, 1, -7.2000000000000002 },
-  { -14.199999999999999, 1, -7.0999999999999996 },
-  { -14.000000000000000, 1, -7.0000000000000000 },
-  { -13.800000000000001, 1, -6.9000000000000004 },
-  { -13.600000000000000, 1, -6.7999999999999998 },
-  { -13.400000000000000, 1, -6.7000000000000002 },
-  { -13.199999999999999, 1, -6.5999999999999996 },
-  { -13.000000000000000, 1, -6.5000000000000000 },
-  { -12.800000000000001, 1, -6.4000000000000004 },
-  { -12.600000000000000, 1, -6.2999999999999998 },
-  { -12.400000000000000, 1, -6.2000000000000002 },
-  { -12.199999999999999, 1, -6.0999999999999996 },
-  { -12.000000000000000, 1, -6.0000000000000000 },
-  { -11.800000000000001, 1, -5.9000000000000004 },
-  { -11.600000000000000, 1, -5.7999999999999998 },
-  { -11.400000000000000, 1, -5.7000000000000002 },
-  { -11.199999999999999, 1, -5.5999999999999996 },
-  { -11.000000000000000, 1, -5.5000000000000000 },
-  { -10.800000000000001, 1, -5.4000000000000004 },
-  { -10.600000000000000, 1, -5.2999999999999998 },
-  { -10.400000000000000, 1, -5.2000000000000002 },
-  { -10.199999999999999, 1, -5.0999999999999996 },
-  { -10.000000000000000, 1, -5.0000000000000000 },
-  { -9.8000000000000007, 1, -4.9000000000000004 },
-  { -9.5999999999999996, 1, -4.7999999999999998 },
-  { -9.4000000000000004, 1, -4.7000000000000002 },
-  { -9.1999999999999993, 1, -4.5999999999999996 },
-  { -9.0000000000000000, 1, -4.5000000000000000 },
-  { -8.8000000000000007, 1, -4.4000000000000004 },
-  { -8.5999999999999996, 1, -4.2999999999999998 },
-  { -8.4000000000000004, 1, -4.2000000000000002 },
-  { -8.1999999999999993, 1, -4.0999999999999996 },
-  { -8.0000000000000000, 1, -4.0000000000000000 },
-  { -7.8000000000000007, 1, -3.9000000000000004 },
-  { -7.5999999999999996, 1, -3.7999999999999998 },
-  { -7.4000000000000004, 1, -3.7000000000000002 },
-  { -7.1999999999999993, 1, -3.5999999999999996 },
-  { -7.0000000000000000, 1, -3.5000000000000000 },
-  { -6.8000000000000007, 1, -3.4000000000000004 },
-  { -6.5999999999999996, 1, -3.2999999999999998 },
-  { -6.4000000000000004, 1, -3.2000000000000002 },
-  { -6.1999999999999993, 1, -3.0999999999999996 },
-  { -6.0000000000000000, 1, -3.0000000000000000 },
-  { -5.8000000000000007, 1, -2.9000000000000004 },
-  { -5.5999999999999996, 1, -2.7999999999999998 },
-  { -5.4000000000000004, 1, -2.7000000000000002 },
-  { -5.1999999999999993, 1, -2.5999999999999996 },
-  { -5.0000000000000000, 1, -2.5000000000000000 },
-  { -4.8000000000000007, 1, -2.4000000000000004 },
-  { -4.5999999999999996, 1, -2.2999999999999998 },
-  { -4.4000000000000004, 1, -2.2000000000000002 },
-  { -4.1999999999999993, 1, -2.0999999999999996 },
-  { -4.0000000000000000, 1, -2.0000000000000000 },
-  { -3.8000000000000007, 1, -1.9000000000000004 },
-  { -3.6000000000000014, 1, -1.8000000000000007 },
-  { -3.3999999999999986, 1, -1.6999999999999993 },
-  { -3.1999999999999993, 1, -1.5999999999999996 },
-  { -3.0000000000000000, 1, -1.5000000000000000 },
-  { -2.8000000000000007, 1, -1.4000000000000004 },
-  { -2.6000000000000014, 1, -1.3000000000000007 },
-  { -2.3999999999999986, 1, -1.1999999999999993 },
-  { -2.1999999999999993, 1, -1.0999999999999996 },
-  { -2.0000000000000000, 1, -1.0000000000000000 },
-  { -1.8000000000000007, 1, -0.90000000000000036 },
-  { -1.6000000000000014, 1, -0.80000000000000071 },
-  { -1.3999999999999986, 1, -0.69999999999999929 },
-  { -1.1999999999999993, 1, -0.59999999999999964 },
-  { -1.0000000000000000, 1, -0.50000000000000000 },
-  { -0.80000000000000071, 1, -0.40000000000000036 },
-  { -0.60000000000000142, 1, -0.30000000000000071 },
-  { -0.39999999999999858, 1, -0.19999999999999929 },
-  { -0.19999999999999929, 1, -0.099999999999999645 },
-  { 0.0000000000000000, 1, 0.0000000000000000 },
-  { 0.19999999999999929, 1, 0.099999999999999645 },
-  { 0.39999999999999858, 1, 0.19999999999999929 },
-  { 0.60000000000000142, 1, 0.30000000000000071 },
-  { 0.80000000000000071, 1, 0.40000000000000036 },
-  { 1.0000000000000000, 1, 0.50000000000000000 },
-  { 1.1999999999999993, 1, 0.59999999999999964 },
-  { 1.3999999999999986, 1, 0.69999999999999929 },
-  { 1.6000000000000014, 1, 0.80000000000000071 },
-  { 1.8000000000000007, 1, 0.90000000000000036 },
-  { 2.0000000000000000, 1, 1.0000000000000000 },
-  { 2.1999999999999993, 1, 1.0999999999999996 },
-  { 2.3999999999999986, 1, 1.1999999999999993 },
-  { 2.6000000000000014, 1, 1.3000000000000007 },
-  { 2.8000000000000007, 1, 1.4000000000000004 },
-  { 3.0000000000000000, 1, 1.5000000000000000 },
-  { 3.1999999999999993, 1, 1.5999999999999996 },
-  { 3.3999999999999986, 1, 1.6999999999999993 },
-  { 3.6000000000000014, 1, 1.8000000000000007 },
-  { 3.8000000000000007, 1, 1.9000000000000004 },
-  { 4.0000000000000000, 1, 2.0000000000000000 },
-  { 4.1999999999999993, 1, 2.0999999999999996 },
-  { 4.3999999999999986, 1, 2.1999999999999993 },
-  { 4.6000000000000014, 1, 2.3000000000000007 },
-  { 4.8000000000000007, 1, 2.4000000000000004 },
-  { 5.0000000000000000, 1, 2.5000000000000000 },
-  { 5.1999999999999993, 1, 2.5999999999999996 },
-  { 5.3999999999999986, 1, 2.6999999999999993 },
-  { 5.6000000000000014, 1, 2.8000000000000007 },
-  { 5.8000000000000007, 1, 2.9000000000000004 },
-  { 6.0000000000000000, 1, 3.0000000000000000 },
-  { 6.1999999999999993, 1, 3.0999999999999996 },
-  { 6.3999999999999986, 1, 3.1999999999999993 },
-  { 6.6000000000000014, 1, 3.3000000000000007 },
-  { 6.8000000000000007, 1, 3.4000000000000004 },
-  { 7.0000000000000000, 1, 3.5000000000000000 },
-  { 7.1999999999999993, 1, 3.5999999999999996 },
-  { 7.3999999999999986, 1, 3.6999999999999993 },
-  { 7.6000000000000014, 1, 3.8000000000000007 },
-  { 7.8000000000000007, 1, 3.9000000000000004 },
-  { 8.0000000000000000, 1, 4.0000000000000000 },
-  { 8.1999999999999993, 1, 4.0999999999999996 },
-  { 8.3999999999999986, 1, 4.1999999999999993 },
-  { 8.6000000000000014, 1, 4.3000000000000007 },
-  { 8.8000000000000007, 1, 4.4000000000000004 },
-  { 9.0000000000000000, 1, 4.5000000000000000 },
-  { 9.1999999999999993, 1, 4.5999999999999996 },
-  { 9.3999999999999986, 1, 4.6999999999999993 },
-  { 9.6000000000000014, 1, 4.8000000000000007 },
-  { 9.8000000000000007, 1, 4.9000000000000004 },
-  { 10.000000000000000, 1, 5.0000000000000000 },
-  { 10.199999999999999, 1, 5.0999999999999996 },
-  { 10.399999999999999, 1, 5.1999999999999993 },
-  { 10.600000000000001, 1, 5.3000000000000007 },
-  { 10.800000000000001, 1, 5.4000000000000004 },
-  { 11.000000000000000, 1, 5.5000000000000000 },
-  { 11.199999999999999, 1, 5.5999999999999996 },
-  { 11.399999999999999, 1, 5.6999999999999993 },
-  { 11.600000000000001, 1, 5.8000000000000007 },
-  { 11.800000000000001, 1, 5.9000000000000004 },
-  { 12.000000000000000, 1, 6.0000000000000000 },
-  { 12.200000000000003, 1, 6.1000000000000014 },
-  { 12.399999999999999, 1, 6.1999999999999993 },
-  { 12.600000000000001, 1, 6.3000000000000007 },
-  { 12.799999999999997, 1, 6.3999999999999986 },
-  { 13.000000000000000, 1, 6.5000000000000000 },
-  { 13.200000000000003, 1, 6.6000000000000014 },
-  { 13.399999999999999, 1, 6.6999999999999993 },
-  { 13.600000000000001, 1, 6.8000000000000007 },
-  { 13.799999999999997, 1, 6.8999999999999986 },
-  { 14.000000000000000, 1, 7.0000000000000000 },
-  { 14.200000000000003, 1, 7.1000000000000014 },
-  { 14.399999999999999, 1, 7.1999999999999993 },
-  { 14.600000000000001, 1, 7.3000000000000007 },
-  { 14.799999999999997, 1, 7.3999999999999986 },
-  { 15.000000000000000, 1, 7.5000000000000000 },
-  { 15.200000000000003, 1, 7.6000000000000014 },
-  { 15.399999999999999, 1, 7.6999999999999993 },
-  { 15.600000000000001, 1, 7.8000000000000007 },
-  { 15.799999999999997, 1, 7.8999999999999986 },
-  { 16.000000000000000, 1, 8.0000000000000000 },
-  { 16.200000000000003, 1, 8.1000000000000014 },
-  { 16.399999999999999, 1, 8.1999999999999993 },
-  { 16.600000000000001, 1, 8.3000000000000007 },
-  { 16.799999999999997, 1, 8.3999999999999986 },
-  { 17.000000000000000, 1, 8.5000000000000000 },
-  { 17.200000000000003, 1, 8.6000000000000014 },
-  { 17.399999999999999, 1, 8.6999999999999993 },
-  { 17.600000000000001, 1, 8.8000000000000007 },
-  { 17.799999999999997, 1, 8.8999999999999986 },
-  { 18.000000000000000, 1, 9.0000000000000000 },
-  { 18.200000000000003, 1, 9.1000000000000014 },
-  { 18.399999999999999, 1, 9.1999999999999993 },
-  { 18.600000000000001, 1, 9.3000000000000007 },
-  { 18.799999999999997, 1, 9.3999999999999986 },
-  { 19.000000000000000, 1, 9.5000000000000000 },
-  { 19.200000000000003, 1, 9.6000000000000014 },
-  { 19.399999999999999, 1, 9.6999999999999993 },
-  { 19.600000000000001, 1, 9.8000000000000007 },
-  { 19.799999999999997, 1, 9.8999999999999986 },
-  { 20.000000000000000, 1, 10.000000000000000 },
+  { -20.000000000000000, 1, -10.000000000000000, 0.0 },
+  { -19.800000000000001, 1, -9.9000000000000004, 0.0 },
+  { -19.600000000000001, 1, -9.8000000000000007, 0.0 },
+  { -19.399999999999999, 1, -9.6999999999999993, 0.0 },
+  { -19.199999999999999, 1, -9.5999999999999996, 0.0 },
+  { -19.000000000000000, 1, -9.5000000000000000, 0.0 },
+  { -18.800000000000001, 1, -9.4000000000000004, 0.0 },
+  { -18.600000000000001, 1, -9.3000000000000007, 0.0 },
+  { -18.399999999999999, 1, -9.1999999999999993, 0.0 },
+  { -18.199999999999999, 1, -9.0999999999999996, 0.0 },
+  { -18.000000000000000, 1, -9.0000000000000000, 0.0 },
+  { -17.800000000000001, 1, -8.9000000000000004, 0.0 },
+  { -17.600000000000001, 1, -8.8000000000000007, 0.0 },
+  { -17.399999999999999, 1, -8.6999999999999993, 0.0 },
+  { -17.199999999999999, 1, -8.5999999999999996, 0.0 },
+  { -17.000000000000000, 1, -8.5000000000000000, 0.0 },
+  { -16.800000000000001, 1, -8.4000000000000004, 0.0 },
+  { -16.600000000000001, 1, -8.3000000000000007, 0.0 },
+  { -16.399999999999999, 1, -8.1999999999999993, 0.0 },
+  { -16.199999999999999, 1, -8.0999999999999996, 0.0 },
+  { -16.000000000000000, 1, -8.0000000000000000, 0.0 },
+  { -15.800000000000001, 1, -7.9000000000000004, 0.0 },
+  { -15.600000000000000, 1, -7.7999999999999998, 0.0 },
+  { -15.399999999999999, 1, -7.6999999999999993, 0.0 },
+  { -15.199999999999999, 1, -7.5999999999999996, 0.0 },
+  { -15.000000000000000, 1, -7.5000000000000000, 0.0 },
+  { -14.800000000000001, 1, -7.4000000000000004, 0.0 },
+  { -14.600000000000000, 1, -7.2999999999999998, 0.0 },
+  { -14.399999999999999, 1, -7.1999999999999993, 0.0 },
+  { -14.199999999999999, 1, -7.0999999999999996, 0.0 },
+  { -14.000000000000000, 1, -7.0000000000000000, 0.0 },
+  { -13.800000000000001, 1, -6.9000000000000004, 0.0 },
+  { -13.600000000000000, 1, -6.7999999999999998, 0.0 },
+  { -13.399999999999999, 1, -6.6999999999999993, 0.0 },
+  { -13.199999999999999, 1, -6.5999999999999996, 0.0 },
+  { -13.000000000000000, 1, -6.5000000000000000, 0.0 },
+  { -12.800000000000001, 1, -6.4000000000000004, 0.0 },
+  { -12.600000000000000, 1, -6.2999999999999998, 0.0 },
+  { -12.399999999999999, 1, -6.1999999999999993, 0.0 },
+  { -12.199999999999999, 1, -6.0999999999999996, 0.0 },
+  { -12.000000000000000, 1, -6.0000000000000000, 0.0 },
+  { -11.799999999999999, 1, -5.8999999999999995, 0.0 },
+  { -11.600000000000000, 1, -5.7999999999999998, 0.0 },
+  { -11.400000000000000, 1, -5.7000000000000002, 0.0 },
+  { -11.199999999999999, 1, -5.5999999999999996, 0.0 },
+  { -11.000000000000000, 1, -5.5000000000000000, 0.0 },
+  { -10.799999999999999, 1, -5.3999999999999995, 0.0 },
+  { -10.600000000000000, 1, -5.2999999999999998, 0.0 },
+  { -10.399999999999999, 1, -5.1999999999999993, 0.0 },
+  { -10.199999999999999, 1, -5.0999999999999996, 0.0 },
+  { -10.000000000000000, 1, -5.0000000000000000, 0.0 },
+  { -9.7999999999999989, 1, -4.8999999999999995, 0.0 },
+  { -9.5999999999999996, 1, -4.7999999999999998, 0.0 },
+  { -9.3999999999999986, 1, -4.6999999999999993, 0.0 },
+  { -9.1999999999999993, 1, -4.5999999999999996, 0.0 },
+  { -9.0000000000000000, 1, -4.5000000000000000, 0.0 },
+  { -8.7999999999999989, 1, -4.3999999999999995, 0.0 },
+  { -8.5999999999999996, 1, -4.2999999999999998, 0.0 },
+  { -8.3999999999999986, 1, -4.1999999999999993, 0.0 },
+  { -8.1999999999999993, 1, -4.0999999999999996, 0.0 },
+  { -8.0000000000000000, 1, -4.0000000000000000, 0.0 },
+  { -7.7999999999999989, 1, -3.8999999999999995, 0.0 },
+  { -7.5999999999999996, 1, -3.7999999999999998, 0.0 },
+  { -7.3999999999999986, 1, -3.6999999999999993, 0.0 },
+  { -7.1999999999999993, 1, -3.5999999999999996, 0.0 },
+  { -7.0000000000000000, 1, -3.5000000000000000, 0.0 },
+  { -6.7999999999999989, 1, -3.3999999999999995, 0.0 },
+  { -6.5999999999999996, 1, -3.2999999999999998, 0.0 },
+  { -6.3999999999999986, 1, -3.1999999999999993, 0.0 },
+  { -6.1999999999999993, 1, -3.0999999999999996, 0.0 },
+  { -6.0000000000000000, 1, -3.0000000000000000, 0.0 },
+  { -5.7999999999999989, 1, -2.8999999999999995, 0.0 },
+  { -5.5999999999999996, 1, -2.7999999999999998, 0.0 },
+  { -5.3999999999999986, 1, -2.6999999999999993, 0.0 },
+  { -5.1999999999999993, 1, -2.5999999999999996, 0.0 },
+  { -5.0000000000000000, 1, -2.5000000000000000, 0.0 },
+  { -4.7999999999999989, 1, -2.3999999999999995, 0.0 },
+  { -4.5999999999999996, 1, -2.2999999999999998, 0.0 },
+  { -4.3999999999999986, 1, -2.1999999999999993, 0.0 },
+  { -4.1999999999999993, 1, -2.0999999999999996, 0.0 },
+  { -4.0000000000000000, 1, -2.0000000000000000, 0.0 },
+  { -3.8000000000000007, 1, -1.9000000000000004, 0.0 },
+  { -3.5999999999999979, 1, -1.7999999999999989, 0.0 },
+  { -3.3999999999999986, 1, -1.6999999999999993, 0.0 },
+  { -3.1999999999999993, 1, -1.5999999999999996, 0.0 },
+  { -3.0000000000000000, 1, -1.5000000000000000, 0.0 },
+  { -2.8000000000000007, 1, -1.4000000000000004, 0.0 },
+  { -2.5999999999999979, 1, -1.2999999999999989, 0.0 },
+  { -2.3999999999999986, 1, -1.1999999999999993, 0.0 },
+  { -2.1999999999999993, 1, -1.0999999999999996, 0.0 },
+  { -2.0000000000000000, 1, -1.0000000000000000, 0.0 },
+  { -1.8000000000000007, 1, -0.90000000000000036, 0.0 },
+  { -1.5999999999999979, 1, -0.79999999999999893, 0.0 },
+  { -1.3999999999999986, 1, -0.69999999999999929, 0.0 },
+  { -1.1999999999999993, 1, -0.59999999999999964, 0.0 },
+  { -1.0000000000000000, 1, -0.50000000000000000, 0.0 },
+  { -0.79999999999999716, 1, -0.39999999999999858, 0.0 },
+  { -0.59999999999999787, 1, -0.29999999999999893, 0.0 },
+  { -0.39999999999999858, 1, -0.19999999999999929, 0.0 },
+  { -0.19999999999999929, 1, -0.099999999999999645, 0.0 },
+  { 0.0000000000000000, 1, 0.0000000000000000, 0.0 },
+  { 0.20000000000000284, 1, 0.10000000000000142, 0.0 },
+  { 0.40000000000000213, 1, 0.20000000000000107, 0.0 },
+  { 0.60000000000000142, 1, 0.30000000000000071, 0.0 },
+  { 0.80000000000000071, 1, 0.40000000000000036, 0.0 },
+  { 1.0000000000000000, 1, 0.50000000000000000, 0.0 },
+  { 1.2000000000000028, 1, 0.60000000000000142, 0.0 },
+  { 1.4000000000000021, 1, 0.70000000000000107, 0.0 },
+  { 1.6000000000000014, 1, 0.80000000000000071, 0.0 },
+  { 1.8000000000000007, 1, 0.90000000000000036, 0.0 },
+  { 2.0000000000000000, 1, 1.0000000000000000, 0.0 },
+  { 2.2000000000000028, 1, 1.1000000000000014, 0.0 },
+  { 2.4000000000000021, 1, 1.2000000000000011, 0.0 },
+  { 2.6000000000000014, 1, 1.3000000000000007, 0.0 },
+  { 2.8000000000000007, 1, 1.4000000000000004, 0.0 },
+  { 3.0000000000000000, 1, 1.5000000000000000, 0.0 },
+  { 3.2000000000000028, 1, 1.6000000000000014, 0.0 },
+  { 3.4000000000000021, 1, 1.7000000000000011, 0.0 },
+  { 3.6000000000000014, 1, 1.8000000000000007, 0.0 },
+  { 3.8000000000000007, 1, 1.9000000000000004, 0.0 },
+  { 4.0000000000000000, 1, 2.0000000000000000, 0.0 },
+  { 4.2000000000000028, 1, 2.1000000000000014, 0.0 },
+  { 4.4000000000000021, 1, 2.2000000000000011, 0.0 },
+  { 4.6000000000000014, 1, 2.3000000000000007, 0.0 },
+  { 4.8000000000000007, 1, 2.4000000000000004, 0.0 },
+  { 5.0000000000000000, 1, 2.5000000000000000, 0.0 },
+  { 5.2000000000000028, 1, 2.6000000000000014, 0.0 },
+  { 5.4000000000000021, 1, 2.7000000000000011, 0.0 },
+  { 5.6000000000000014, 1, 2.8000000000000007, 0.0 },
+  { 5.8000000000000007, 1, 2.9000000000000004, 0.0 },
+  { 6.0000000000000000, 1, 3.0000000000000000, 0.0 },
+  { 6.2000000000000028, 1, 3.1000000000000014, 0.0 },
+  { 6.4000000000000021, 1, 3.2000000000000011, 0.0 },
+  { 6.6000000000000014, 1, 3.3000000000000007, 0.0 },
+  { 6.8000000000000007, 1, 3.4000000000000004, 0.0 },
+  { 7.0000000000000000, 1, 3.5000000000000000, 0.0 },
+  { 7.2000000000000028, 1, 3.6000000000000014, 0.0 },
+  { 7.4000000000000021, 1, 3.7000000000000011, 0.0 },
+  { 7.6000000000000014, 1, 3.8000000000000007, 0.0 },
+  { 7.8000000000000007, 1, 3.9000000000000004, 0.0 },
+  { 8.0000000000000000, 1, 4.0000000000000000, 0.0 },
+  { 8.2000000000000028, 1, 4.1000000000000014, 0.0 },
+  { 8.4000000000000021, 1, 4.2000000000000011, 0.0 },
+  { 8.6000000000000014, 1, 4.3000000000000007, 0.0 },
+  { 8.8000000000000007, 1, 4.4000000000000004, 0.0 },
+  { 9.0000000000000000, 1, 4.5000000000000000, 0.0 },
+  { 9.2000000000000028, 1, 4.6000000000000014, 0.0 },
+  { 9.4000000000000021, 1, 4.7000000000000011, 0.0 },
+  { 9.6000000000000014, 1, 4.8000000000000007, 0.0 },
+  { 9.8000000000000007, 1, 4.9000000000000004, 0.0 },
+  { 10.000000000000000, 1, 5.0000000000000000, 0.0 },
+  { 10.200000000000003, 1, 5.1000000000000014, 0.0 },
+  { 10.400000000000002, 1, 5.2000000000000011, 0.0 },
+  { 10.600000000000001, 1, 5.3000000000000007, 0.0 },
+  { 10.800000000000001, 1, 5.4000000000000004, 0.0 },
+  { 11.000000000000000, 1, 5.5000000000000000, 0.0 },
+  { 11.200000000000003, 1, 5.6000000000000014, 0.0 },
+  { 11.400000000000002, 1, 5.7000000000000011, 0.0 },
+  { 11.600000000000001, 1, 5.8000000000000007, 0.0 },
+  { 11.800000000000001, 1, 5.9000000000000004, 0.0 },
+  { 12.000000000000000, 1, 6.0000000000000000, 0.0 },
+  { 12.200000000000003, 1, 6.1000000000000014, 0.0 },
+  { 12.399999999999999, 1, 6.1999999999999993, 0.0 },
+  { 12.600000000000001, 1, 6.3000000000000007, 0.0 },
+  { 12.800000000000004, 1, 6.4000000000000021, 0.0 },
+  { 13.000000000000000, 1, 6.5000000000000000, 0.0 },
+  { 13.200000000000003, 1, 6.6000000000000014, 0.0 },
+  { 13.399999999999999, 1, 6.6999999999999993, 0.0 },
+  { 13.600000000000001, 1, 6.8000000000000007, 0.0 },
+  { 13.800000000000004, 1, 6.9000000000000021, 0.0 },
+  { 14.000000000000000, 1, 7.0000000000000000, 0.0 },
+  { 14.200000000000003, 1, 7.1000000000000014, 0.0 },
+  { 14.399999999999999, 1, 7.1999999999999993, 0.0 },
+  { 14.600000000000001, 1, 7.3000000000000007, 0.0 },
+  { 14.800000000000004, 1, 7.4000000000000021, 0.0 },
+  { 15.000000000000000, 1, 7.5000000000000000, 0.0 },
+  { 15.200000000000003, 1, 7.6000000000000014, 0.0 },
+  { 15.399999999999999, 1, 7.6999999999999993, 0.0 },
+  { 15.600000000000001, 1, 7.8000000000000007, 0.0 },
+  { 15.800000000000004, 1, 7.9000000000000021, 0.0 },
+  { 16.000000000000000, 1, 8.0000000000000000, 0.0 },
+  { 16.200000000000003, 1, 8.1000000000000014, 0.0 },
+  { 16.399999999999999, 1, 8.1999999999999993, 0.0 },
+  { 16.600000000000001, 1, 8.3000000000000007, 0.0 },
+  { 16.800000000000004, 1, 8.4000000000000021, 0.0 },
+  { 17.000000000000000, 1, 8.5000000000000000, 0.0 },
+  { 17.200000000000003, 1, 8.6000000000000014, 0.0 },
+  { 17.399999999999999, 1, 8.6999999999999993, 0.0 },
+  { 17.600000000000001, 1, 8.8000000000000007, 0.0 },
+  { 17.800000000000004, 1, 8.9000000000000021, 0.0 },
+  { 18.000000000000000, 1, 9.0000000000000000, 0.0 },
+  { 18.200000000000003, 1, 9.1000000000000014, 0.0 },
+  { 18.400000000000006, 1, 9.2000000000000028, 0.0 },
+  { 18.600000000000001, 1, 9.3000000000000007, 0.0 },
+  { 18.800000000000004, 1, 9.4000000000000021, 0.0 },
+  { 19.000000000000000, 1, 9.5000000000000000, 0.0 },
+  { 19.200000000000003, 1, 9.6000000000000014, 0.0 },
+  { 19.400000000000006, 1, 9.7000000000000028, 0.0 },
+  { 19.600000000000001, 1, 9.8000000000000007, 0.0 },
+  { 19.800000000000004, 1, 9.9000000000000021, 0.0 },
+  { 20.000000000000000, 1, 10.000000000000000, 0.0 },
 };
-
-// Test function for n=1.
-template<typename Tp>
-  void
-  test002()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data002)
-                          / sizeof(testcase_hermite<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::hermite(Tp(data002[i].n), Tp(data002[i].x));
-       const Tp f0 = data002[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler002 = 2.5000000000000020e-13;
 
 // Test data for n=2.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
-testcase_hermite<double>
-data003[] =
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data003[201] =
 {
-  { 398.00000000000000, 2, -10.000000000000000 },
-  { 390.04000000000002, 2, -9.9000000000000004 },
-  { 382.16000000000008, 2, -9.8000000000000007 },
-  { 374.35999999999996, 2, -9.6999999999999993 },
-  { 366.63999999999999, 2, -9.5999999999999996 },
-  { 359.00000000000000, 2, -9.5000000000000000 },
-  { 351.44000000000005, 2, -9.4000000000000004 },
-  { 343.96000000000004, 2, -9.3000000000000007 },
-  { 336.55999999999995, 2, -9.1999999999999993 },
-  { 329.23999999999995, 2, -9.0999999999999996 },
-  { 322.00000000000000, 2, -9.0000000000000000 },
-  { 314.84000000000003, 2, -8.9000000000000004 },
-  { 307.76000000000005, 2, -8.8000000000000007 },
-  { 300.75999999999993, 2, -8.6999999999999993 },
-  { 293.83999999999997, 2, -8.5999999999999996 },
-  { 287.00000000000000, 2, -8.5000000000000000 },
-  { 280.24000000000001, 2, -8.4000000000000004 },
-  { 273.56000000000006, 2, -8.3000000000000007 },
-  { 266.95999999999998, 2, -8.1999999999999993 },
-  { 260.44000000000000, 2, -8.0999999999999996 },
-  { 254.00000000000000, 2, -8.0000000000000000 },
-  { 247.64000000000001, 2, -7.9000000000000004 },
-  { 241.35999999999999, 2, -7.7999999999999998 },
-  { 235.16000000000003, 2, -7.7000000000000002 },
-  { 229.03999999999999, 2, -7.5999999999999996 },
-  { 223.00000000000000, 2, -7.5000000000000000 },
-  { 217.04000000000002, 2, -7.4000000000000004 },
-  { 211.16000000000000, 2, -7.2999999999999998 },
-  { 205.36000000000001, 2, -7.2000000000000002 },
-  { 199.63999999999999, 2, -7.0999999999999996 },
-  { 194.00000000000000, 2, -7.0000000000000000 },
-  { 188.44000000000003, 2, -6.9000000000000004 },
-  { 182.95999999999998, 2, -6.7999999999999998 },
-  { 177.56000000000000, 2, -6.7000000000000002 },
-  { 172.23999999999998, 2, -6.5999999999999996 },
-  { 167.00000000000000, 2, -6.5000000000000000 },
-  { 161.84000000000003, 2, -6.4000000000000004 },
-  { 156.75999999999999, 2, -6.2999999999999998 },
-  { 151.76000000000002, 2, -6.2000000000000002 },
-  { 146.83999999999997, 2, -6.0999999999999996 },
-  { 142.00000000000000, 2, -6.0000000000000000 },
-  { 137.24000000000001, 2, -5.9000000000000004 },
-  { 132.56000000000000, 2, -5.7999999999999998 },
-  { 127.96000000000001, 2, -5.7000000000000002 },
-  { 123.43999999999998, 2, -5.5999999999999996 },
-  { 119.00000000000000, 2, -5.5000000000000000 },
-  { 114.64000000000001, 2, -5.4000000000000004 },
-  { 110.36000000000000, 2, -5.2999999999999998 },
-  { 106.16000000000001, 2, -5.2000000000000002 },
-  { 102.03999999999999, 2, -5.0999999999999996 },
-  { 98.000000000000000, 2, -5.0000000000000000 },
-  { 94.040000000000020, 2, -4.9000000000000004 },
-  { 90.159999999999997, 2, -4.7999999999999998 },
-  { 86.360000000000014, 2, -4.7000000000000002 },
-  { 82.639999999999986, 2, -4.5999999999999996 },
-  { 79.000000000000000, 2, -4.5000000000000000 },
-  { 75.440000000000012, 2, -4.4000000000000004 },
-  { 71.959999999999994, 2, -4.2999999999999998 },
-  { 68.560000000000002, 2, -4.2000000000000002 },
-  { 65.239999999999995, 2, -4.0999999999999996 },
-  { 62.000000000000000, 2, -4.0000000000000000 },
-  { 58.840000000000011, 2, -3.9000000000000004 },
-  { 55.759999999999998, 2, -3.7999999999999998 },
-  { 52.760000000000005, 2, -3.7000000000000002 },
-  { 49.839999999999989, 2, -3.5999999999999996 },
-  { 47.000000000000000, 2, -3.5000000000000000 },
-  { 44.240000000000009, 2, -3.4000000000000004 },
-  { 41.559999999999995, 2, -3.2999999999999998 },
-  { 38.960000000000008, 2, -3.2000000000000002 },
-  { 36.439999999999991, 2, -3.0999999999999996 },
-  { 34.000000000000000, 2, -3.0000000000000000 },
-  { 31.640000000000008, 2, -2.9000000000000004 },
-  { 29.359999999999996, 2, -2.7999999999999998 },
-  { 27.160000000000004, 2, -2.7000000000000002 },
-  { 25.039999999999992, 2, -2.5999999999999996 },
-  { 23.000000000000000, 2, -2.5000000000000000 },
-  { 21.040000000000006, 2, -2.4000000000000004 },
-  { 19.159999999999997, 2, -2.2999999999999998 },
-  { 17.360000000000003, 2, -2.2000000000000002 },
-  { 15.639999999999993, 2, -2.0999999999999996 },
-  { 14.000000000000000, 2, -2.0000000000000000 },
-  { 12.440000000000005, 2, -1.9000000000000004 },
-  { 10.960000000000010, 2, -1.8000000000000007 },
-  { 9.5599999999999898, 2, -1.6999999999999993 },
-  { 8.2399999999999949, 2, -1.5999999999999996 },
-  { 7.0000000000000000, 2, -1.5000000000000000 },
-  { 5.8400000000000043, 2, -1.4000000000000004 },
-  { 4.7600000000000078, 2, -1.3000000000000007 },
-  { 3.7599999999999936, 2, -1.1999999999999993 },
-  { 2.8399999999999972, 2, -1.0999999999999996 },
-  { 2.0000000000000000, 2, -1.0000000000000000 },
-  { 1.2400000000000024, 2, -0.90000000000000036 },
-  { 0.56000000000000449, 2, -0.80000000000000071 },
-  { -0.040000000000004032, 2, -0.69999999999999929 },
-  { -0.56000000000000161, 2, -0.59999999999999964 },
-  { -1.0000000000000000, 2, -0.50000000000000000 },
-  { -1.3599999999999990, 2, -0.40000000000000036 },
-  { -1.6399999999999983, 2, -0.30000000000000071 },
-  { -1.8400000000000012, 2, -0.19999999999999929 },
-  { -1.9600000000000002, 2, -0.099999999999999645 },
-  { -2.0000000000000000, 2, 0.0000000000000000 },
-  { -1.9600000000000002, 2, 0.099999999999999645 },
-  { -1.8400000000000012, 2, 0.19999999999999929 },
-  { -1.6399999999999983, 2, 0.30000000000000071 },
-  { -1.3599999999999990, 2, 0.40000000000000036 },
-  { -1.0000000000000000, 2, 0.50000000000000000 },
-  { -0.56000000000000161, 2, 0.59999999999999964 },
-  { -0.040000000000004032, 2, 0.69999999999999929 },
-  { 0.56000000000000449, 2, 0.80000000000000071 },
-  { 1.2400000000000024, 2, 0.90000000000000036 },
-  { 2.0000000000000000, 2, 1.0000000000000000 },
-  { 2.8399999999999972, 2, 1.0999999999999996 },
-  { 3.7599999999999936, 2, 1.1999999999999993 },
-  { 4.7600000000000078, 2, 1.3000000000000007 },
-  { 5.8400000000000043, 2, 1.4000000000000004 },
-  { 7.0000000000000000, 2, 1.5000000000000000 },
-  { 8.2399999999999949, 2, 1.5999999999999996 },
-  { 9.5599999999999898, 2, 1.6999999999999993 },
-  { 10.960000000000010, 2, 1.8000000000000007 },
-  { 12.440000000000005, 2, 1.9000000000000004 },
-  { 14.000000000000000, 2, 2.0000000000000000 },
-  { 15.639999999999993, 2, 2.0999999999999996 },
-  { 17.359999999999989, 2, 2.1999999999999993 },
-  { 19.160000000000014, 2, 2.3000000000000007 },
-  { 21.040000000000006, 2, 2.4000000000000004 },
-  { 23.000000000000000, 2, 2.5000000000000000 },
-  { 25.039999999999992, 2, 2.5999999999999996 },
-  { 27.159999999999986, 2, 2.6999999999999993 },
-  { 29.360000000000017, 2, 2.8000000000000007 },
-  { 31.640000000000008, 2, 2.9000000000000004 },
-  { 34.000000000000000, 2, 3.0000000000000000 },
-  { 36.439999999999991, 2, 3.0999999999999996 },
-  { 38.959999999999980, 2, 3.1999999999999993 },
-  { 41.560000000000016, 2, 3.3000000000000007 },
-  { 44.240000000000009, 2, 3.4000000000000004 },
-  { 47.000000000000000, 2, 3.5000000000000000 },
-  { 49.839999999999989, 2, 3.5999999999999996 },
-  { 52.759999999999977, 2, 3.6999999999999993 },
-  { 55.760000000000019, 2, 3.8000000000000007 },
-  { 58.840000000000011, 2, 3.9000000000000004 },
-  { 62.000000000000000, 2, 4.0000000000000000 },
-  { 65.239999999999995, 2, 4.0999999999999996 },
-  { 68.559999999999974, 2, 4.1999999999999993 },
-  { 71.960000000000022, 2, 4.3000000000000007 },
-  { 75.440000000000012, 2, 4.4000000000000004 },
-  { 79.000000000000000, 2, 4.5000000000000000 },
-  { 82.639999999999986, 2, 4.5999999999999996 },
-  { 86.359999999999971, 2, 4.6999999999999993 },
-  { 90.160000000000025, 2, 4.8000000000000007 },
-  { 94.040000000000020, 2, 4.9000000000000004 },
-  { 98.000000000000000, 2, 5.0000000000000000 },
-  { 102.03999999999999, 2, 5.0999999999999996 },
-  { 106.15999999999997, 2, 5.1999999999999993 },
-  { 110.36000000000003, 2, 5.3000000000000007 },
-  { 114.64000000000001, 2, 5.4000000000000004 },
-  { 119.00000000000000, 2, 5.5000000000000000 },
-  { 123.43999999999998, 2, 5.5999999999999996 },
-  { 127.95999999999998, 2, 5.6999999999999993 },
-  { 132.56000000000003, 2, 5.8000000000000007 },
-  { 137.24000000000001, 2, 5.9000000000000004 },
-  { 142.00000000000000, 2, 6.0000000000000000 },
-  { 146.84000000000006, 2, 6.1000000000000014 },
-  { 151.75999999999996, 2, 6.1999999999999993 },
-  { 156.76000000000005, 2, 6.3000000000000007 },
-  { 161.83999999999992, 2, 6.3999999999999986 },
-  { 167.00000000000000, 2, 6.5000000000000000 },
-  { 172.24000000000007, 2, 6.6000000000000014 },
-  { 177.55999999999997, 2, 6.6999999999999993 },
-  { 182.96000000000004, 2, 6.8000000000000007 },
-  { 188.43999999999991, 2, 6.8999999999999986 },
-  { 194.00000000000000, 2, 7.0000000000000000 },
-  { 199.64000000000007, 2, 7.1000000000000014 },
-  { 205.35999999999996, 2, 7.1999999999999993 },
-  { 211.16000000000005, 2, 7.3000000000000007 },
-  { 217.03999999999991, 2, 7.3999999999999986 },
-  { 223.00000000000000, 2, 7.5000000000000000 },
-  { 229.04000000000008, 2, 7.6000000000000014 },
-  { 235.15999999999997, 2, 7.6999999999999993 },
-  { 241.36000000000004, 2, 7.8000000000000007 },
-  { 247.63999999999990, 2, 7.8999999999999986 },
-  { 254.00000000000000, 2, 8.0000000000000000 },
-  { 260.44000000000011, 2, 8.1000000000000014 },
-  { 266.95999999999998, 2, 8.1999999999999993 },
-  { 273.56000000000006, 2, 8.3000000000000007 },
-  { 280.23999999999990, 2, 8.3999999999999986 },
-  { 287.00000000000000, 2, 8.5000000000000000 },
-  { 293.84000000000009, 2, 8.6000000000000014 },
-  { 300.75999999999993, 2, 8.6999999999999993 },
-  { 307.76000000000005, 2, 8.8000000000000007 },
-  { 314.83999999999992, 2, 8.8999999999999986 },
-  { 322.00000000000000, 2, 9.0000000000000000 },
-  { 329.24000000000012, 2, 9.1000000000000014 },
-  { 336.55999999999995, 2, 9.1999999999999993 },
-  { 343.96000000000004, 2, 9.3000000000000007 },
-  { 351.43999999999988, 2, 9.3999999999999986 },
-  { 359.00000000000000, 2, 9.5000000000000000 },
-  { 366.64000000000010, 2, 9.6000000000000014 },
-  { 374.35999999999996, 2, 9.6999999999999993 },
-  { 382.16000000000008, 2, 9.8000000000000007 },
-  { 390.03999999999991, 2, 9.8999999999999986 },
-  { 398.00000000000000, 2, 10.000000000000000 },
+  { 398.00000000000000, 2, -10.000000000000000, 0.0 },
+  { 390.04000000000002, 2, -9.9000000000000004, 0.0 },
+  { 382.16000000000008, 2, -9.8000000000000007, 0.0 },
+  { 374.35999999999996, 2, -9.6999999999999993, 0.0 },
+  { 366.63999999999999, 2, -9.5999999999999996, 0.0 },
+  { 359.00000000000000, 2, -9.5000000000000000, 0.0 },
+  { 351.44000000000005, 2, -9.4000000000000004, 0.0 },
+  { 343.96000000000004, 2, -9.3000000000000007, 0.0 },
+  { 336.55999999999995, 2, -9.1999999999999993, 0.0 },
+  { 329.23999999999995, 2, -9.0999999999999996, 0.0 },
+  { 322.00000000000000, 2, -9.0000000000000000, 0.0 },
+  { 314.84000000000003, 2, -8.9000000000000004, 0.0 },
+  { 307.76000000000005, 2, -8.8000000000000007, 0.0 },
+  { 300.75999999999993, 2, -8.6999999999999993, 0.0 },
+  { 293.83999999999997, 2, -8.5999999999999996, 0.0 },
+  { 287.00000000000000, 2, -8.5000000000000000, 0.0 },
+  { 280.24000000000001, 2, -8.4000000000000004, 0.0 },
+  { 273.56000000000006, 2, -8.3000000000000007, 0.0 },
+  { 266.95999999999998, 2, -8.1999999999999993, 0.0 },
+  { 260.44000000000000, 2, -8.0999999999999996, 0.0 },
+  { 254.00000000000000, 2, -8.0000000000000000, 0.0 },
+  { 247.64000000000001, 2, -7.9000000000000004, 0.0 },
+  { 241.35999999999999, 2, -7.7999999999999998, 0.0 },
+  { 235.15999999999997, 2, -7.6999999999999993, 0.0 },
+  { 229.03999999999999, 2, -7.5999999999999996, 0.0 },
+  { 223.00000000000000, 2, -7.5000000000000000, 0.0 },
+  { 217.04000000000002, 2, -7.4000000000000004, 0.0 },
+  { 211.16000000000000, 2, -7.2999999999999998, 0.0 },
+  { 205.35999999999996, 2, -7.1999999999999993, 0.0 },
+  { 199.63999999999999, 2, -7.0999999999999996, 0.0 },
+  { 194.00000000000000, 2, -7.0000000000000000, 0.0 },
+  { 188.44000000000003, 2, -6.9000000000000004, 0.0 },
+  { 182.95999999999998, 2, -6.7999999999999998, 0.0 },
+  { 177.55999999999997, 2, -6.6999999999999993, 0.0 },
+  { 172.23999999999998, 2, -6.5999999999999996, 0.0 },
+  { 167.00000000000000, 2, -6.5000000000000000, 0.0 },
+  { 161.84000000000003, 2, -6.4000000000000004, 0.0 },
+  { 156.75999999999999, 2, -6.2999999999999998, 0.0 },
+  { 151.75999999999996, 2, -6.1999999999999993, 0.0 },
+  { 146.83999999999997, 2, -6.0999999999999996, 0.0 },
+  { 142.00000000000000, 2, -6.0000000000000000, 0.0 },
+  { 137.23999999999998, 2, -5.8999999999999995, 0.0 },
+  { 132.56000000000000, 2, -5.7999999999999998, 0.0 },
+  { 127.96000000000001, 2, -5.7000000000000002, 0.0 },
+  { 123.43999999999998, 2, -5.5999999999999996, 0.0 },
+  { 119.00000000000000, 2, -5.5000000000000000, 0.0 },
+  { 114.63999999999997, 2, -5.3999999999999995, 0.0 },
+  { 110.36000000000000, 2, -5.2999999999999998, 0.0 },
+  { 106.15999999999997, 2, -5.1999999999999993, 0.0 },
+  { 102.03999999999999, 2, -5.0999999999999996, 0.0 },
+  { 98.000000000000000, 2, -5.0000000000000000, 0.0 },
+  { 94.039999999999978, 2, -4.8999999999999995, 0.0 },
+  { 90.159999999999997, 2, -4.7999999999999998, 0.0 },
+  { 86.359999999999971, 2, -4.6999999999999993, 0.0 },
+  { 82.639999999999986, 2, -4.5999999999999996, 0.0 },
+  { 79.000000000000000, 2, -4.5000000000000000, 0.0 },
+  { 75.439999999999984, 2, -4.3999999999999995, 0.0 },
+  { 71.959999999999994, 2, -4.2999999999999998, 0.0 },
+  { 68.559999999999974, 2, -4.1999999999999993, 0.0 },
+  { 65.239999999999995, 2, -4.0999999999999996, 0.0 },
+  { 62.000000000000000, 2, -4.0000000000000000, 0.0 },
+  { 58.839999999999982, 2, -3.8999999999999995, 0.0 },
+  { 55.759999999999998, 2, -3.7999999999999998, 0.0 },
+  { 52.759999999999977, 2, -3.6999999999999993, 0.0 },
+  { 49.839999999999989, 2, -3.5999999999999996, 0.0 },
+  { 47.000000000000000, 2, -3.5000000000000000, 0.0 },
+  { 44.239999999999988, 2, -3.3999999999999995, 0.0 },
+  { 41.559999999999995, 2, -3.2999999999999998, 0.0 },
+  { 38.959999999999980, 2, -3.1999999999999993, 0.0 },
+  { 36.439999999999991, 2, -3.0999999999999996, 0.0 },
+  { 34.000000000000000, 2, -3.0000000000000000, 0.0 },
+  { 31.639999999999986, 2, -2.8999999999999995, 0.0 },
+  { 29.359999999999996, 2, -2.7999999999999998, 0.0 },
+  { 27.159999999999986, 2, -2.6999999999999993, 0.0 },
+  { 25.039999999999992, 2, -2.5999999999999996, 0.0 },
+  { 23.000000000000000, 2, -2.5000000000000000, 0.0 },
+  { 21.039999999999988, 2, -2.3999999999999995, 0.0 },
+  { 19.159999999999997, 2, -2.2999999999999998, 0.0 },
+  { 17.359999999999989, 2, -2.1999999999999993, 0.0 },
+  { 15.639999999999993, 2, -2.0999999999999996, 0.0 },
+  { 14.000000000000000, 2, -2.0000000000000000, 0.0 },
+  { 12.440000000000005, 2, -1.9000000000000004, 0.0 },
+  { 10.959999999999985, 2, -1.7999999999999989, 0.0 },
+  { 9.5599999999999898, 2, -1.6999999999999993, 0.0 },
+  { 8.2399999999999949, 2, -1.5999999999999996, 0.0 },
+  { 7.0000000000000000, 2, -1.5000000000000000, 0.0 },
+  { 5.8400000000000043, 2, -1.4000000000000004, 0.0 },
+  { 4.7599999999999891, 2, -1.2999999999999989, 0.0 },
+  { 3.7599999999999936, 2, -1.1999999999999993, 0.0 },
+  { 2.8399999999999972, 2, -1.0999999999999996, 0.0 },
+  { 2.0000000000000000, 2, -1.0000000000000000, 0.0 },
+  { 1.2400000000000024, 2, -0.90000000000000036, 0.0 },
+  { 0.55999999999999339, 2, -0.79999999999999893, 0.0 },
+  { -0.040000000000004032, 2, -0.69999999999999929, 0.0 },
+  { -0.56000000000000161, 2, -0.59999999999999964, 0.0 },
+  { -1.0000000000000000, 2, -0.50000000000000000, 0.0 },
+  { -1.3600000000000045, 2, -0.39999999999999858, 0.0 },
+  { -1.6400000000000026, 2, -0.29999999999999893, 0.0 },
+  { -1.8400000000000012, 2, -0.19999999999999929, 0.0 },
+  { -1.9600000000000002, 2, -0.099999999999999645, 0.0 },
+  { -2.0000000000000000, 2, 0.0000000000000000, 0.0 },
+  { -1.9599999999999989, 2, 0.10000000000000142, 0.0 },
+  { -1.8399999999999983, 2, 0.20000000000000107, 0.0 },
+  { -1.6399999999999983, 2, 0.30000000000000071, 0.0 },
+  { -1.3599999999999990, 2, 0.40000000000000036, 0.0 },
+  { -1.0000000000000000, 2, 0.50000000000000000, 0.0 },
+  { -0.55999999999999317, 2, 0.60000000000000142, 0.0 },
+  { -0.039999999999994040, 2, 0.70000000000000107, 0.0 },
+  { 0.56000000000000449, 2, 0.80000000000000071, 0.0 },
+  { 1.2400000000000024, 2, 0.90000000000000036, 0.0 },
+  { 2.0000000000000000, 2, 1.0000000000000000, 0.0 },
+  { 2.8400000000000123, 2, 1.1000000000000014, 0.0 },
+  { 3.7600000000000104, 2, 1.2000000000000011, 0.0 },
+  { 4.7600000000000078, 2, 1.3000000000000007, 0.0 },
+  { 5.8400000000000043, 2, 1.4000000000000004, 0.0 },
+  { 7.0000000000000000, 2, 1.5000000000000000, 0.0 },
+  { 8.2400000000000180, 2, 1.6000000000000014, 0.0 },
+  { 9.5600000000000147, 2, 1.7000000000000011, 0.0 },
+  { 10.960000000000010, 2, 1.8000000000000007, 0.0 },
+  { 12.440000000000005, 2, 1.9000000000000004, 0.0 },
+  { 14.000000000000000, 2, 2.0000000000000000, 0.0 },
+  { 15.640000000000025, 2, 2.1000000000000014, 0.0 },
+  { 17.360000000000017, 2, 2.2000000000000011, 0.0 },
+  { 19.160000000000014, 2, 2.3000000000000007, 0.0 },
+  { 21.040000000000006, 2, 2.4000000000000004, 0.0 },
+  { 23.000000000000000, 2, 2.5000000000000000, 0.0 },
+  { 25.040000000000031, 2, 2.6000000000000014, 0.0 },
+  { 27.160000000000021, 2, 2.7000000000000011, 0.0 },
+  { 29.360000000000017, 2, 2.8000000000000007, 0.0 },
+  { 31.640000000000008, 2, 2.9000000000000004, 0.0 },
+  { 34.000000000000000, 2, 3.0000000000000000, 0.0 },
+  { 36.440000000000033, 2, 3.1000000000000014, 0.0 },
+  { 38.960000000000029, 2, 3.2000000000000011, 0.0 },
+  { 41.560000000000016, 2, 3.3000000000000007, 0.0 },
+  { 44.240000000000009, 2, 3.4000000000000004, 0.0 },
+  { 47.000000000000000, 2, 3.5000000000000000, 0.0 },
+  { 49.840000000000039, 2, 3.6000000000000014, 0.0 },
+  { 52.760000000000034, 2, 3.7000000000000011, 0.0 },
+  { 55.760000000000019, 2, 3.8000000000000007, 0.0 },
+  { 58.840000000000011, 2, 3.9000000000000004, 0.0 },
+  { 62.000000000000000, 2, 4.0000000000000000, 0.0 },
+  { 65.240000000000052, 2, 4.1000000000000014, 0.0 },
+  { 68.560000000000031, 2, 4.2000000000000011, 0.0 },
+  { 71.960000000000022, 2, 4.3000000000000007, 0.0 },
+  { 75.440000000000012, 2, 4.4000000000000004, 0.0 },
+  { 79.000000000000000, 2, 4.5000000000000000, 0.0 },
+  { 82.640000000000057, 2, 4.6000000000000014, 0.0 },
+  { 86.360000000000042, 2, 4.7000000000000011, 0.0 },
+  { 90.160000000000025, 2, 4.8000000000000007, 0.0 },
+  { 94.040000000000020, 2, 4.9000000000000004, 0.0 },
+  { 98.000000000000000, 2, 5.0000000000000000, 0.0 },
+  { 102.04000000000006, 2, 5.1000000000000014, 0.0 },
+  { 106.16000000000004, 2, 5.2000000000000011, 0.0 },
+  { 110.36000000000003, 2, 5.3000000000000007, 0.0 },
+  { 114.64000000000001, 2, 5.4000000000000004, 0.0 },
+  { 119.00000000000000, 2, 5.5000000000000000, 0.0 },
+  { 123.44000000000007, 2, 5.6000000000000014, 0.0 },
+  { 127.96000000000004, 2, 5.7000000000000011, 0.0 },
+  { 132.56000000000003, 2, 5.8000000000000007, 0.0 },
+  { 137.24000000000001, 2, 5.9000000000000004, 0.0 },
+  { 142.00000000000000, 2, 6.0000000000000000, 0.0 },
+  { 146.84000000000006, 2, 6.1000000000000014, 0.0 },
+  { 151.75999999999996, 2, 6.1999999999999993, 0.0 },
+  { 156.76000000000005, 2, 6.3000000000000007, 0.0 },
+  { 161.84000000000012, 2, 6.4000000000000021, 0.0 },
+  { 167.00000000000000, 2, 6.5000000000000000, 0.0 },
+  { 172.24000000000007, 2, 6.6000000000000014, 0.0 },
+  { 177.55999999999997, 2, 6.6999999999999993, 0.0 },
+  { 182.96000000000004, 2, 6.8000000000000007, 0.0 },
+  { 188.44000000000011, 2, 6.9000000000000021, 0.0 },
+  { 194.00000000000000, 2, 7.0000000000000000, 0.0 },
+  { 199.64000000000007, 2, 7.1000000000000014, 0.0 },
+  { 205.35999999999996, 2, 7.1999999999999993, 0.0 },
+  { 211.16000000000005, 2, 7.3000000000000007, 0.0 },
+  { 217.04000000000013, 2, 7.4000000000000021, 0.0 },
+  { 223.00000000000000, 2, 7.5000000000000000, 0.0 },
+  { 229.04000000000008, 2, 7.6000000000000014, 0.0 },
+  { 235.15999999999997, 2, 7.6999999999999993, 0.0 },
+  { 241.36000000000004, 2, 7.8000000000000007, 0.0 },
+  { 247.64000000000013, 2, 7.9000000000000021, 0.0 },
+  { 254.00000000000000, 2, 8.0000000000000000, 0.0 },
+  { 260.44000000000011, 2, 8.1000000000000014, 0.0 },
+  { 266.95999999999998, 2, 8.1999999999999993, 0.0 },
+  { 273.56000000000006, 2, 8.3000000000000007, 0.0 },
+  { 280.24000000000012, 2, 8.4000000000000021, 0.0 },
+  { 287.00000000000000, 2, 8.5000000000000000, 0.0 },
+  { 293.84000000000009, 2, 8.6000000000000014, 0.0 },
+  { 300.75999999999993, 2, 8.6999999999999993, 0.0 },
+  { 307.76000000000005, 2, 8.8000000000000007, 0.0 },
+  { 314.84000000000015, 2, 8.9000000000000021, 0.0 },
+  { 322.00000000000000, 2, 9.0000000000000000, 0.0 },
+  { 329.24000000000012, 2, 9.1000000000000014, 0.0 },
+  { 336.56000000000023, 2, 9.2000000000000028, 0.0 },
+  { 343.96000000000004, 2, 9.3000000000000007, 0.0 },
+  { 351.44000000000017, 2, 9.4000000000000021, 0.0 },
+  { 359.00000000000000, 2, 9.5000000000000000, 0.0 },
+  { 366.64000000000010, 2, 9.6000000000000014, 0.0 },
+  { 374.36000000000024, 2, 9.7000000000000028, 0.0 },
+  { 382.16000000000008, 2, 9.8000000000000007, 0.0 },
+  { 390.04000000000019, 2, 9.9000000000000021, 0.0 },
+  { 398.00000000000000, 2, 10.000000000000000, 0.0 },
 };
-
-// Test function for n=2.
-template<typename Tp>
-  void
-  test003()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data003)
-                          / sizeof(testcase_hermite<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::hermite(Tp(data003[i].n), Tp(data003[i].x));
-       const Tp f0 = data003[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler003 = 2.5000000000000020e-13;
 
 // Test data for n=5.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
-testcase_hermite<double>
-data004[] =
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data004[201] =
 {
-  { -3041200.0000000000, 5, -10.000000000000000 },
-  { -2889108.3196800007, 5, -9.9000000000000004 },
-  { -2743131.8297600015, 5, -9.8000000000000007 },
-  { -2603085.2022399991, 5, -9.6999999999999993 },
-  { -2468786.8723199992, 5, -9.5999999999999996 },
-  { -2340059.0000000000, 5, -9.5000000000000000 },
-  { -2216727.4316800009, 5, -9.4000000000000004 },
-  { -2098621.6617600010, 5, -9.3000000000000007 },
-  { -1985574.7942399993, 5, -9.1999999999999993 },
-  { -1877423.5043199996, 5, -9.0999999999999996 },
-  { -1774008.0000000000, 5, -9.0000000000000000 },
-  { -1675171.9836800008, 5, -8.9000000000000004 },
-  { -1580762.6137600006, 5, -8.8000000000000007 },
-  { -1490630.4662399990, 5, -8.6999999999999993 },
-  { -1404629.4963199999, 5, -8.5999999999999996 },
-  { -1322617.0000000000, 5, -8.5000000000000000 },
-  { -1244453.5756800002, 5, -8.4000000000000004 },
-  { -1170003.0857600006, 5, -8.3000000000000007 },
-  { -1099132.6182399995, 5, -8.1999999999999993 },
-  { -1031712.4483199996, 5, -8.0999999999999996 },
-  { -967616.00000000000, 5, -8.0000000000000000 },
-  { -906719.80768000009, 5, -7.9000000000000004 },
-  { -848903.47775999992, 5, -7.7999999999999998 },
-  { -794049.65024000010, 5, -7.7000000000000002 },
-  { -742043.96031999995, 5, -7.5999999999999996 },
-  { -692775.00000000000, 5, -7.5000000000000000 },
-  { -646134.27968000027, 5, -7.4000000000000004 },
-  { -602016.18975999986, 5, -7.2999999999999998 },
-  { -560317.96224000002, 5, -7.2000000000000002 },
-  { -520939.63231999992, 5, -7.0999999999999996 },
-  { -483784.00000000000, 5, -7.0000000000000000 },
-  { -448756.59168000019, 5, -6.9000000000000004 },
-  { -415765.62176000001, 5, -6.7999999999999998 },
-  { -384721.95424000005, 5, -6.7000000000000002 },
-  { -355539.06431999995, 5, -6.5999999999999996 },
-  { -328133.00000000000, 5, -6.5000000000000000 },
-  { -302422.34368000011, 5, -6.4000000000000004 },
-  { -278328.17375999998, 5, -6.2999999999999998 },
-  { -255774.02624000004, 5, -6.2000000000000002 },
-  { -234685.85631999990, 5, -6.0999999999999996 },
-  { -214992.00000000000, 5, -6.0000000000000000 },
-  { -196623.13568000006, 5, -5.9000000000000004 },
-  { -179512.24575999999, 5, -5.7999999999999998 },
-  { -163594.57824000003, 5, -5.7000000000000002 },
-  { -148807.60831999997, 5, -5.5999999999999996 },
-  { -135091.00000000000, 5, -5.5000000000000000 },
-  { -122386.56768000004, 5, -5.4000000000000004 },
-  { -110638.23776000000, 5, -5.2999999999999998 },
-  { -99792.010240000047, 5, -5.2000000000000002 },
-  { -89795.920319999976, 5, -5.0999999999999996 },
-  { -80600.000000000000, 5, -5.0000000000000000 },
-  { -72156.239680000028, 5, -4.9000000000000004 },
-  { -64418.549759999994, 5, -4.7999999999999998 },
-  { -57342.722240000010, 5, -4.7000000000000002 },
-  { -50886.392319999970, 5, -4.5999999999999996 },
-  { -45009.000000000000, 5, -4.5000000000000000 },
-  { -39671.751680000008, 5, -4.4000000000000004 },
-  { -34837.581759999986, 5, -4.2999999999999998 },
-  { -30471.114240000010, 5, -4.2000000000000002 },
-  { -26538.624319999992, 5, -4.0999999999999996 },
-  { -23008.000000000000, 5, -4.0000000000000000 },
-  { -19848.703680000013, 5, -3.9000000000000004 },
-  { -17031.733759999996, 5, -3.7999999999999998 },
-  { -14529.586240000001, 5, -3.7000000000000002 },
-  { -12316.216319999992, 5, -3.5999999999999996 },
-  { -10367.000000000000, 5, -3.5000000000000000 },
-  { -8658.6956800000080, 5, -3.4000000000000004 },
-  { -7169.4057599999960, 5, -3.2999999999999998 },
-  { -5878.5382400000035, 5, -3.2000000000000002 },
-  { -4766.7683199999965, 5, -3.0999999999999996 },
-  { -3816.0000000000000, 5, -3.0000000000000000 },
-  { -3009.3276800000026, 5, -2.9000000000000004 },
-  { -2330.9977599999988, 5, -2.7999999999999998 },
-  { -1766.3702400000002, 5, -2.7000000000000002 },
-  { -1301.8803199999984, 5, -2.5999999999999996 },
-  { -925.00000000000000, 5, -2.5000000000000000 },
-  { -624.19968000000074, 5, -2.4000000000000004 },
-  { -388.90975999999978, 5, -2.2999999999999998 },
-  { -209.48224000000022, 5, -2.2000000000000002 },
-  { -77.152319999999520, 5, -2.0999999999999996 },
-  { 16.000000000000000, 5, -2.0000000000000000 },
-  { 77.088319999999840, 5, -1.9000000000000004 },
-  { 112.45823999999980, 5, -1.8000000000000007 },
-  { 127.72576000000002, 5, -1.6999999999999993 },
-  { 127.81567999999996, 5, -1.5999999999999996 },
-  { 117.00000000000000, 5, -1.5000000000000000 },
-  { 98.936320000000080, 5, -1.4000000000000004 },
-  { 76.706240000000179, 5, -1.3000000000000007 },
-  { 52.853759999999838, 5, -1.1999999999999993 },
-  { 29.423679999999933, 5, -1.0999999999999996 },
-  { 8.0000000000000000, 5, -1.0000000000000000 },
-  { -10.255679999999948, 5, -0.90000000000000036 },
-  { -24.565759999999916, 5, -0.80000000000000071 },
-  { -34.498240000000052, 5, -0.69999999999999929 },
-  { -39.928320000000006, 5, -0.59999999999999964 },
-  { -41.000000000000000, 5, -0.50000000000000000 },
-  { -38.087680000000020, 5, -0.40000000000000036 },
-  { -31.757760000000054, 5, -0.30000000000000071 },
-  { -22.730239999999931, 5, -0.19999999999999929 },
-  { -11.840319999999959, 5, -0.099999999999999645 },
-  { 0.0000000000000000, 5, 0.0000000000000000 },
-  { 11.840319999999959, 5, 0.099999999999999645 },
-  { 22.730239999999931, 5, 0.19999999999999929 },
-  { 31.757760000000054, 5, 0.30000000000000071 },
-  { 38.087680000000020, 5, 0.40000000000000036 },
-  { 41.000000000000000, 5, 0.50000000000000000 },
-  { 39.928320000000006, 5, 0.59999999999999964 },
-  { 34.498240000000052, 5, 0.69999999999999929 },
-  { 24.565759999999916, 5, 0.80000000000000071 },
-  { 10.255679999999948, 5, 0.90000000000000036 },
-  { -8.0000000000000000, 5, 1.0000000000000000 },
-  { -29.423679999999933, 5, 1.0999999999999996 },
-  { -52.853759999999838, 5, 1.1999999999999993 },
-  { -76.706240000000179, 5, 1.3000000000000007 },
-  { -98.936320000000080, 5, 1.4000000000000004 },
-  { -117.00000000000000, 5, 1.5000000000000000 },
-  { -127.81567999999996, 5, 1.5999999999999996 },
-  { -127.72576000000002, 5, 1.6999999999999993 },
-  { -112.45823999999980, 5, 1.8000000000000007 },
-  { -77.088319999999840, 5, 1.9000000000000004 },
-  { -16.000000000000000, 5, 2.0000000000000000 },
-  { 77.152319999999520, 5, 2.0999999999999996 },
-  { 209.48223999999891, 5, 2.1999999999999993 },
-  { 388.90976000000148, 5, 2.3000000000000007 },
-  { 624.19968000000074, 5, 2.4000000000000004 },
-  { 925.00000000000000, 5, 2.5000000000000000 },
-  { 1301.8803199999984, 5, 2.5999999999999996 },
-  { 1766.3702399999963, 5, 2.6999999999999993 },
-  { 2330.9977600000047, 5, 2.8000000000000007 },
-  { 3009.3276800000026, 5, 2.9000000000000004 },
-  { 3816.0000000000000, 5, 3.0000000000000000 },
-  { 4766.7683199999965, 5, 3.0999999999999996 },
-  { 5878.5382399999908, 5, 3.1999999999999993 },
-  { 7169.4057600000087, 5, 3.3000000000000007 },
-  { 8658.6956800000080, 5, 3.4000000000000004 },
-  { 10367.000000000000, 5, 3.5000000000000000 },
-  { 12316.216319999992, 5, 3.5999999999999996 },
-  { 14529.586239999979, 5, 3.6999999999999993 },
-  { 17031.733760000021, 5, 3.8000000000000007 },
-  { 19848.703680000013, 5, 3.9000000000000004 },
-  { 23008.000000000000, 5, 4.0000000000000000 },
-  { 26538.624319999992, 5, 4.0999999999999996 },
-  { 30471.114239999963, 5, 4.1999999999999993 },
-  { 34837.581760000037, 5, 4.3000000000000007 },
-  { 39671.751680000008, 5, 4.4000000000000004 },
-  { 45009.000000000000, 5, 4.5000000000000000 },
-  { 50886.392319999970, 5, 4.5999999999999996 },
-  { 57342.722239999952, 5, 4.6999999999999993 },
-  { 64418.549760000053, 5, 4.8000000000000007 },
-  { 72156.239680000028, 5, 4.9000000000000004 },
-  { 80600.000000000000, 5, 5.0000000000000000 },
-  { 89795.920319999976, 5, 5.0999999999999996 },
-  { 99792.010239999945, 5, 5.1999999999999993 },
-  { 110638.23776000006, 5, 5.3000000000000007 },
-  { 122386.56768000004, 5, 5.4000000000000004 },
-  { 135091.00000000000, 5, 5.5000000000000000 },
-  { 148807.60831999997, 5, 5.5999999999999996 },
-  { 163594.57823999992, 5, 5.6999999999999993 },
-  { 179512.24576000011, 5, 5.8000000000000007 },
-  { 196623.13568000006, 5, 5.9000000000000004 },
-  { 214992.00000000000, 5, 6.0000000000000000 },
-  { 234685.85632000031, 5, 6.1000000000000014 },
-  { 255774.02623999983, 5, 6.1999999999999993 },
-  { 278328.17376000021, 5, 6.3000000000000007 },
-  { 302422.34367999958, 5, 6.3999999999999986 },
-  { 328133.00000000000, 5, 6.5000000000000000 },
-  { 355539.06432000035, 5, 6.6000000000000014 },
-  { 384721.95423999976, 5, 6.6999999999999993 },
-  { 415765.62176000018, 5, 6.8000000000000007 },
-  { 448756.59167999960, 5, 6.8999999999999986 },
-  { 483784.00000000000, 5, 7.0000000000000000 },
-  { 520939.63232000044, 5, 7.1000000000000014 },
-  { 560317.96223999979, 5, 7.1999999999999993 },
-  { 602016.18976000033, 5, 7.3000000000000007 },
-  { 646134.27967999945, 5, 7.3999999999999986 },
-  { 692775.00000000000, 5, 7.5000000000000000 },
-  { 742043.96032000054, 5, 7.6000000000000014 },
-  { 794049.65023999964, 5, 7.6999999999999993 },
-  { 848903.47776000027, 5, 7.8000000000000007 },
-  { 906719.80767999915, 5, 7.8999999999999986 },
-  { 967616.00000000000, 5, 8.0000000000000000 },
-  { 1031712.4483200011, 5, 8.1000000000000014 },
-  { 1099132.6182399995, 5, 8.1999999999999993 },
-  { 1170003.0857600006, 5, 8.3000000000000007 },
-  { 1244453.5756799988, 5, 8.3999999999999986 },
-  { 1322617.0000000000, 5, 8.5000000000000000 },
-  { 1404629.4963200013, 5, 8.6000000000000014 },
-  { 1490630.4662399990, 5, 8.6999999999999993 },
-  { 1580762.6137600006, 5, 8.8000000000000007 },
-  { 1675171.9836799989, 5, 8.8999999999999986 },
-  { 1774008.0000000000, 5, 9.0000000000000000 },
-  { 1877423.5043200015, 5, 9.1000000000000014 },
-  { 1985574.7942399993, 5, 9.1999999999999993 },
-  { 2098621.6617600010, 5, 9.3000000000000007 },
-  { 2216727.4316799981, 5, 9.3999999999999986 },
-  { 2340059.0000000000, 5, 9.5000000000000000 },
-  { 2468786.8723200019, 5, 9.6000000000000014 },
-  { 2603085.2022399991, 5, 9.6999999999999993 },
-  { 2743131.8297600015, 5, 9.8000000000000007 },
-  { 2889108.3196799983, 5, 9.8999999999999986 },
-  { 3041200.0000000000, 5, 10.000000000000000 },
+  { -3041200.0000000000, 5, -10.000000000000000, 0.0 },
+  { -2889108.3196800007, 5, -9.9000000000000004, 0.0 },
+  { -2743131.8297600015, 5, -9.8000000000000007, 0.0 },
+  { -2603085.2022399991, 5, -9.6999999999999993, 0.0 },
+  { -2468786.8723199992, 5, -9.5999999999999996, 0.0 },
+  { -2340059.0000000000, 5, -9.5000000000000000, 0.0 },
+  { -2216727.4316800009, 5, -9.4000000000000004, 0.0 },
+  { -2098621.6617600010, 5, -9.3000000000000007, 0.0 },
+  { -1985574.7942399993, 5, -9.1999999999999993, 0.0 },
+  { -1877423.5043199996, 5, -9.0999999999999996, 0.0 },
+  { -1774008.0000000000, 5, -9.0000000000000000, 0.0 },
+  { -1675171.9836800008, 5, -8.9000000000000004, 0.0 },
+  { -1580762.6137600006, 5, -8.8000000000000007, 0.0 },
+  { -1490630.4662399990, 5, -8.6999999999999993, 0.0 },
+  { -1404629.4963199999, 5, -8.5999999999999996, 0.0 },
+  { -1322617.0000000000, 5, -8.5000000000000000, 0.0 },
+  { -1244453.5756800002, 5, -8.4000000000000004, 0.0 },
+  { -1170003.0857600006, 5, -8.3000000000000007, 0.0 },
+  { -1099132.6182399995, 5, -8.1999999999999993, 0.0 },
+  { -1031712.4483199996, 5, -8.0999999999999996, 0.0 },
+  { -967616.00000000000, 5, -8.0000000000000000, 0.0 },
+  { -906719.80768000009, 5, -7.9000000000000004, 0.0 },
+  { -848903.47775999992, 5, -7.7999999999999998, 0.0 },
+  { -794049.65023999964, 5, -7.6999999999999993, 0.0 },
+  { -742043.96031999995, 5, -7.5999999999999996, 0.0 },
+  { -692775.00000000000, 5, -7.5000000000000000, 0.0 },
+  { -646134.27968000027, 5, -7.4000000000000004, 0.0 },
+  { -602016.18975999986, 5, -7.2999999999999998, 0.0 },
+  { -560317.96223999979, 5, -7.1999999999999993, 0.0 },
+  { -520939.63231999992, 5, -7.0999999999999996, 0.0 },
+  { -483784.00000000000, 5, -7.0000000000000000, 0.0 },
+  { -448756.59168000019, 5, -6.9000000000000004, 0.0 },
+  { -415765.62176000001, 5, -6.7999999999999998, 0.0 },
+  { -384721.95423999976, 5, -6.6999999999999993, 0.0 },
+  { -355539.06431999995, 5, -6.5999999999999996, 0.0 },
+  { -328133.00000000000, 5, -6.5000000000000000, 0.0 },
+  { -302422.34368000011, 5, -6.4000000000000004, 0.0 },
+  { -278328.17375999998, 5, -6.2999999999999998, 0.0 },
+  { -255774.02623999983, 5, -6.1999999999999993, 0.0 },
+  { -234685.85631999990, 5, -6.0999999999999996, 0.0 },
+  { -214992.00000000000, 5, -6.0000000000000000, 0.0 },
+  { -196623.13567999989, 5, -5.8999999999999995, 0.0 },
+  { -179512.24575999999, 5, -5.7999999999999998, 0.0 },
+  { -163594.57824000003, 5, -5.7000000000000002, 0.0 },
+  { -148807.60831999997, 5, -5.5999999999999996, 0.0 },
+  { -135091.00000000000, 5, -5.5000000000000000, 0.0 },
+  { -122386.56767999992, 5, -5.3999999999999995, 0.0 },
+  { -110638.23776000000, 5, -5.2999999999999998, 0.0 },
+  { -99792.010239999945, 5, -5.1999999999999993, 0.0 },
+  { -89795.920319999976, 5, -5.0999999999999996, 0.0 },
+  { -80600.000000000000, 5, -5.0000000000000000, 0.0 },
+  { -72156.239679999941, 5, -4.8999999999999995, 0.0 },
+  { -64418.549759999994, 5, -4.7999999999999998, 0.0 },
+  { -57342.722239999952, 5, -4.6999999999999993, 0.0 },
+  { -50886.392319999970, 5, -4.5999999999999996, 0.0 },
+  { -45009.000000000000, 5, -4.5000000000000000, 0.0 },
+  { -39671.751679999965, 5, -4.3999999999999995, 0.0 },
+  { -34837.581759999986, 5, -4.2999999999999998, 0.0 },
+  { -30471.114239999963, 5, -4.1999999999999993, 0.0 },
+  { -26538.624319999992, 5, -4.0999999999999996, 0.0 },
+  { -23008.000000000000, 5, -4.0000000000000000, 0.0 },
+  { -19848.703679999981, 5, -3.8999999999999995, 0.0 },
+  { -17031.733759999996, 5, -3.7999999999999998, 0.0 },
+  { -14529.586239999979, 5, -3.6999999999999993, 0.0 },
+  { -12316.216319999992, 5, -3.5999999999999996, 0.0 },
+  { -10367.000000000000, 5, -3.5000000000000000, 0.0 },
+  { -8658.6956799999934, 5, -3.3999999999999995, 0.0 },
+  { -7169.4057599999960, 5, -3.2999999999999998, 0.0 },
+  { -5878.5382399999908, 5, -3.1999999999999993, 0.0 },
+  { -4766.7683199999965, 5, -3.0999999999999996, 0.0 },
+  { -3816.0000000000000, 5, -3.0000000000000000, 0.0 },
+  { -3009.3276799999958, 5, -2.8999999999999995, 0.0 },
+  { -2330.9977599999988, 5, -2.7999999999999998, 0.0 },
+  { -1766.3702399999963, 5, -2.6999999999999993, 0.0 },
+  { -1301.8803199999984, 5, -2.5999999999999996, 0.0 },
+  { -925.00000000000000, 5, -2.5000000000000000, 0.0 },
+  { -624.19967999999858, 5, -2.3999999999999995, 0.0 },
+  { -388.90975999999978, 5, -2.2999999999999998, 0.0 },
+  { -209.48223999999891, 5, -2.1999999999999993, 0.0 },
+  { -77.152319999999520, 5, -2.0999999999999996, 0.0 },
+  { 16.000000000000000, 5, -2.0000000000000000, 0.0 },
+  { 77.088319999999840, 5, -1.9000000000000004, 0.0 },
+  { 112.45824000000026, 5, -1.7999999999999989, 0.0 },
+  { 127.72576000000002, 5, -1.6999999999999993, 0.0 },
+  { 127.81567999999996, 5, -1.5999999999999996, 0.0 },
+  { 117.00000000000000, 5, -1.5000000000000000, 0.0 },
+  { 98.936320000000080, 5, -1.4000000000000004, 0.0 },
+  { 76.706239999999752, 5, -1.2999999999999989, 0.0 },
+  { 52.853759999999838, 5, -1.1999999999999993, 0.0 },
+  { 29.423679999999933, 5, -1.0999999999999996, 0.0 },
+  { 8.0000000000000000, 5, -1.0000000000000000, 0.0 },
+  { -10.255679999999948, 5, -0.90000000000000036, 0.0 },
+  { -24.565760000000125, 5, -0.79999999999999893, 0.0 },
+  { -34.498240000000052, 5, -0.69999999999999929, 0.0 },
+  { -39.928320000000006, 5, -0.59999999999999964, 0.0 },
+  { -41.000000000000000, 5, -0.50000000000000000, 0.0 },
+  { -38.087679999999935, 5, -0.39999999999999858, 0.0 },
+  { -31.757759999999919, 5, -0.29999999999999893, 0.0 },
+  { -22.730239999999931, 5, -0.19999999999999929, 0.0 },
+  { -11.840319999999959, 5, -0.099999999999999645, 0.0 },
+  { 0.0000000000000000, 5, 0.0000000000000000, 0.0 },
+  { 11.840320000000162, 5, 0.10000000000000142, 0.0 },
+  { 22.730240000000109, 5, 0.20000000000000107, 0.0 },
+  { 31.757760000000054, 5, 0.30000000000000071, 0.0 },
+  { 38.087680000000020, 5, 0.40000000000000036, 0.0 },
+  { 41.000000000000000, 5, 0.50000000000000000, 0.0 },
+  { 39.928319999999957, 5, 0.60000000000000142, 0.0 },
+  { 34.498239999999925, 5, 0.70000000000000107, 0.0 },
+  { 24.565759999999916, 5, 0.80000000000000071, 0.0 },
+  { 10.255679999999948, 5, 0.90000000000000036, 0.0 },
+  { -8.0000000000000000, 5, 1.0000000000000000, 0.0 },
+  { -29.423680000000317, 5, 1.1000000000000014, 0.0 },
+  { -52.853760000000264, 5, 1.2000000000000011, 0.0 },
+  { -76.706240000000179, 5, 1.3000000000000007, 0.0 },
+  { -98.936320000000080, 5, 1.4000000000000004, 0.0 },
+  { -117.00000000000000, 5, 1.5000000000000000, 0.0 },
+  { -127.81568000000010, 5, 1.6000000000000014, 0.0 },
+  { -127.72575999999992, 5, 1.7000000000000011, 0.0 },
+  { -112.45823999999980, 5, 1.8000000000000007, 0.0 },
+  { -77.088319999999840, 5, 1.9000000000000004, 0.0 },
+  { -16.000000000000000, 5, 2.0000000000000000, 0.0 },
+  { 77.152320000001623, 5, 2.1000000000000014, 0.0 },
+  { 209.48224000000164, 5, 2.2000000000000011, 0.0 },
+  { 388.90976000000148, 5, 2.3000000000000007, 0.0 },
+  { 624.19968000000074, 5, 2.4000000000000004, 0.0 },
+  { 925.00000000000000, 5, 2.5000000000000000, 0.0 },
+  { 1301.8803200000059, 5, 2.6000000000000014, 0.0 },
+  { 1766.3702400000057, 5, 2.7000000000000011, 0.0 },
+  { 2330.9977600000047, 5, 2.8000000000000007, 0.0 },
+  { 3009.3276800000026, 5, 2.9000000000000004, 0.0 },
+  { 3816.0000000000000, 5, 3.0000000000000000, 0.0 },
+  { 4766.7683200000147, 5, 3.1000000000000014, 0.0 },
+  { 5878.5382400000126, 5, 3.2000000000000011, 0.0 },
+  { 7169.4057600000087, 5, 3.3000000000000007, 0.0 },
+  { 8658.6956800000080, 5, 3.4000000000000004, 0.0 },
+  { 10367.000000000000, 5, 3.5000000000000000, 0.0 },
+  { 12316.216320000027, 5, 3.6000000000000014, 0.0 },
+  { 14529.586240000028, 5, 3.7000000000000011, 0.0 },
+  { 17031.733760000021, 5, 3.8000000000000007, 0.0 },
+  { 19848.703680000013, 5, 3.9000000000000004, 0.0 },
+  { 23008.000000000000, 5, 4.0000000000000000, 0.0 },
+  { 26538.624320000057, 5, 4.1000000000000014, 0.0 },
+  { 30471.114240000043, 5, 4.2000000000000011, 0.0 },
+  { 34837.581760000037, 5, 4.3000000000000007, 0.0 },
+  { 39671.751680000008, 5, 4.4000000000000004, 0.0 },
+  { 45009.000000000000, 5, 4.5000000000000000, 0.0 },
+  { 50886.392320000086, 5, 4.6000000000000014, 0.0 },
+  { 57342.722240000076, 5, 4.7000000000000011, 0.0 },
+  { 64418.549760000053, 5, 4.8000000000000007, 0.0 },
+  { 72156.239680000028, 5, 4.9000000000000004, 0.0 },
+  { 80600.000000000000, 5, 5.0000000000000000, 0.0 },
+  { 89795.920320000136, 5, 5.1000000000000014, 0.0 },
+  { 99792.010240000105, 5, 5.2000000000000011, 0.0 },
+  { 110638.23776000006, 5, 5.3000000000000007, 0.0 },
+  { 122386.56768000004, 5, 5.4000000000000004, 0.0 },
+  { 135091.00000000000, 5, 5.5000000000000000, 0.0 },
+  { 148807.60832000020, 5, 5.6000000000000014, 0.0 },
+  { 163594.57824000015, 5, 5.7000000000000011, 0.0 },
+  { 179512.24576000011, 5, 5.8000000000000007, 0.0 },
+  { 196623.13568000006, 5, 5.9000000000000004, 0.0 },
+  { 214992.00000000000, 5, 6.0000000000000000, 0.0 },
+  { 234685.85632000031, 5, 6.1000000000000014, 0.0 },
+  { 255774.02623999983, 5, 6.1999999999999993, 0.0 },
+  { 278328.17376000021, 5, 6.3000000000000007, 0.0 },
+  { 302422.34368000063, 5, 6.4000000000000021, 0.0 },
+  { 328133.00000000000, 5, 6.5000000000000000, 0.0 },
+  { 355539.06432000035, 5, 6.6000000000000014, 0.0 },
+  { 384721.95423999976, 5, 6.6999999999999993, 0.0 },
+  { 415765.62176000018, 5, 6.8000000000000007, 0.0 },
+  { 448756.59168000077, 5, 6.9000000000000021, 0.0 },
+  { 483784.00000000000, 5, 7.0000000000000000, 0.0 },
+  { 520939.63232000044, 5, 7.1000000000000014, 0.0 },
+  { 560317.96223999979, 5, 7.1999999999999993, 0.0 },
+  { 602016.18976000033, 5, 7.3000000000000007, 0.0 },
+  { 646134.27968000097, 5, 7.4000000000000021, 0.0 },
+  { 692775.00000000000, 5, 7.5000000000000000, 0.0 },
+  { 742043.96032000054, 5, 7.6000000000000014, 0.0 },
+  { 794049.65023999964, 5, 7.6999999999999993, 0.0 },
+  { 848903.47776000027, 5, 7.8000000000000007, 0.0 },
+  { 906719.80768000125, 5, 7.9000000000000021, 0.0 },
+  { 967616.00000000000, 5, 8.0000000000000000, 0.0 },
+  { 1031712.4483200011, 5, 8.1000000000000014, 0.0 },
+  { 1099132.6182399995, 5, 8.1999999999999993, 0.0 },
+  { 1170003.0857600006, 5, 8.3000000000000007, 0.0 },
+  { 1244453.5756800014, 5, 8.4000000000000021, 0.0 },
+  { 1322617.0000000000, 5, 8.5000000000000000, 0.0 },
+  { 1404629.4963200013, 5, 8.6000000000000014, 0.0 },
+  { 1490630.4662399990, 5, 8.6999999999999993, 0.0 },
+  { 1580762.6137600006, 5, 8.8000000000000007, 0.0 },
+  { 1675171.9836800022, 5, 8.9000000000000021, 0.0 },
+  { 1774008.0000000000, 5, 9.0000000000000000, 0.0 },
+  { 1877423.5043200015, 5, 9.1000000000000014, 0.0 },
+  { 1985574.7942400032, 5, 9.2000000000000028, 0.0 },
+  { 2098621.6617600010, 5, 9.3000000000000007, 0.0 },
+  { 2216727.4316800022, 5, 9.4000000000000021, 0.0 },
+  { 2340059.0000000000, 5, 9.5000000000000000, 0.0 },
+  { 2468786.8723200019, 5, 9.6000000000000014, 0.0 },
+  { 2603085.2022400037, 5, 9.7000000000000028, 0.0 },
+  { 2743131.8297600015, 5, 9.8000000000000007, 0.0 },
+  { 2889108.3196800039, 5, 9.9000000000000021, 0.0 },
+  { 3041200.0000000000, 5, 10.000000000000000, 0.0 },
 };
-
-// Test function for n=5.
-template<typename Tp>
-  void
-  test004()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data004)
-                          / sizeof(testcase_hermite<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::hermite(Tp(data004[i].n), Tp(data004[i].x));
-       const Tp f0 = data004[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler004 = 2.5000000000000020e-13;
 
 // Test data for n=10.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
-testcase_hermite<double>
-data005[] =
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data005[201] =
 {
-  { 8093278209760.0000, 10, -10.000000000000000 },
-  { 7282867075495.3066, 10, -9.9000000000000004 },
-  { 6545846221520.6768, 10, -9.8000000000000007 },
-  { 5876279006180.6377, 10, -9.6999999999999993 },
-  { 5268651052510.4668, 10, -9.5999999999999996 },
-  { 4717844376391.0000, 10, -9.5000000000000000 },
-  { 4219112842239.1147, 10, -9.4000000000000004 },
-  { 3768058891466.0469, 10, -9.3000000000000007 },
-  { 3360611490639.0889, 10, -9.1999999999999993 },
-  { 2993005247949.7607, 10, -9.0999999999999996 },
-  { 2661760648224.0000, 10, -9.0000000000000000 },
-  { 2363665358307.8496, 10, -8.9000000000000004 },
-  { 2095756556225.3428, 10, -8.8000000000000007 },
-  { 1855304239034.7983, 10, -8.6999999999999993 },
-  { 1639795465805.4746, 10, -8.5999999999999996 },
-  { 1446919493599.0000, 10, -8.5000000000000000 },
-  { 1274553765769.7463, 10, -8.4000000000000004 },
-  { 1120750713295.2778, 10, -8.3000000000000007 },
-  { 983725331213.07190, 10, -8.1999999999999993 },
-  { 861843493572.90051, 10, -8.0999999999999996 },
-  { 753610971616.00000, 10, -8.0000000000000000 },
-  { 657663121163.02454, 10, -7.9000000000000004 },
-  { 572755206432.81335, 10, -7.7999999999999998 },
-  { 497753328723.87518, 10, -7.7000000000000002 },
-  { 431625929570.40063, 10, -7.5999999999999996 },
-  { 373435839135.00000, 10, -7.5000000000000000 },
-  { 322332841721.55731, 10, -7.4000000000000004 },
-  { 277546731384.01782, 10, -7.2999999999999998 },
-  { 238380831670.89990, 10, -7.2000000000000002 },
-  { 204205954581.24731, 10, -7.0999999999999996 },
-  { 174454774816.00000, 10, -7.0000000000000000 },
-  { 148616596389.67230, 10, -6.9000000000000004 },
-  { 126232489621.23923, 10, -6.7999999999999998 },
-  { 106890777450.54663, 10, -6.7000000000000002 },
-  { 90222850927.787979, 10, -6.5999999999999996 },
-  { 75899294599.000000, 10, -6.5000000000000000 },
-  { 63626303360.468109, 10, -6.4000000000000004 },
-  { 53142373179.806053, 10, -6.2999999999999998 },
-  { 44215248881.625534, 10, -6.2000000000000002 },
-  { 36639112971.527679, 10, -6.0999999999999996 },
-  { 30232000224.000000, 10, -6.0000000000000000 },
-  { 24833423488.050617, 10, -5.9000000000000004 },
-  { 20302196869.444584, 10, -5.7999999999999998 },
-  { 16514443130.579359, 10, -5.7000000000000002 },
-  { 13361772808.732477, 10, -5.5999999999999996 },
-  { 10749623191.000000, 10, -5.5000000000000000 },
-  { 8595745900.0898170, 10, -5.4000000000000004 },
-  { 6828832439.6160822, 10, -5.2999999999999998 },
-  { 5387267621.0259018, 10, -5.2000000000000002 },
-  { 4218001347.1524582, 10, -5.0999999999999996 },
-  { 3275529760.0000000, 10, -5.0000000000000000 },
-  { 2520977273.0966806, 10, -4.9000000000000004 },
-  { 1921271501.9744270, 10, -4.7999999999999998 },
-  { 1448403580.4203825, 10, -4.7000000000000002 },
-  { 1078766805.4651456, 10, -4.5999999999999996 },
-  { 792566991.00000000, 10, -4.5000000000000000 },
-  { 573298328.81993556, 10, -4.4000000000000004 },
-  { 407278957.14375639, 10, -4.2999999999999998 },
-  { 283240820.63788313, 10, -4.2000000000000002 },
-  { 191968773.03860721, 10, -4.0999999999999996 },
-  { 125984224.00000000, 10, -4.0000000000000000 },
-  { 79268966.162877649, 10, -3.9000000000000004 },
-  { 47025137.016035721, 10, -3.7999999999999998 },
-  { 25467573.275709353, 10, -3.7000000000000002 },
-  { 11645103.614666298, 10, -3.5999999999999996 },
-  { 3287599.0000000000, 10, -3.5000000000000000 },
-  { -1324140.9798373245, 10, -3.4000000000000004 },
-  { -3468342.2313268245, 10, -3.2999999999999998 },
-  { -4074495.5241857050, 10, -3.2000000000000002 },
-  { -3800107.4878923763, 10, -3.0999999999999996 },
-  { -3093984.0000000000, 10, -3.0000000000000000 },
-  { -2247873.5653938209, 10, -2.9000000000000004 },
-  { -1438117.1978829810, 10, -2.7999999999999998 },
-  { -758781.93281034287, 10, -2.7000000000000002 },
-  { -247597.05012469599, 10, -2.5999999999999996 },
-  { 94135.000000000000, 10, -2.5000000000000000 },
-  { 286617.47398410190, 10, -2.4000000000000004 },
-  { 360718.79745525768, 10, -2.2999999999999998 },
-  { 350419.82826741762, 10, -2.2000000000000002 },
-  { 287863.09027338214, 10, -2.0999999999999996 },
-  { 200416.00000000000, 10, -2.0000000000000000 },
-  { 109249.22783242268, 10, -1.9000000000000004 },
-  { 29012.094015898125, 10, -1.8000000000000007 },
-  { -31740.330680422732, 10, -1.6999999999999993 },
-  { -69648.597834137676, 10, -1.5999999999999996 },
-  { -85401.000000000000, 10, -1.5000000000000000 },
-  { -82507.675752857642, 10, -1.4000000000000004 },
-  { -66123.413033062563, 10, -1.3000000000000007 },
-  { -42007.465141862223, 10, -1.1999999999999993 },
-  { -15676.055823257526, 10, -1.0999999999999996 },
-  { 8224.0000000000000, 10, -1.0000000000000000 },
-  { 26314.366684262357, 10, -0.90000000000000036 },
-  { 36668.344916377559, 10, -0.80000000000000071 },
-  { 38802.826035097583, 10, -0.69999999999999929 },
-  { 33513.167890022363, 10, -0.59999999999999964 },
-  { 22591.000000000000, 10, -0.50000000000000000 },
-  { 8467.6907597824556, 10, -0.40000000000000036 },
-  { -6173.8524877822965, 10, -0.30000000000000071 },
-  { -18778.856957542470, 10, -0.19999999999999929 },
-  { -27256.158950297624, 10, -0.099999999999999645 },
-  { -30240.000000000000, 10, 0.0000000000000000 },
-  { -27256.158950297624, 10, 0.099999999999999645 },
-  { -18778.856957542470, 10, 0.19999999999999929 },
-  { -6173.8524877822965, 10, 0.30000000000000071 },
-  { 8467.6907597824556, 10, 0.40000000000000036 },
-  { 22591.000000000000, 10, 0.50000000000000000 },
-  { 33513.167890022363, 10, 0.59999999999999964 },
-  { 38802.826035097583, 10, 0.69999999999999929 },
-  { 36668.344916377559, 10, 0.80000000000000071 },
-  { 26314.366684262357, 10, 0.90000000000000036 },
-  { 8224.0000000000000, 10, 1.0000000000000000 },
-  { -15676.055823257526, 10, 1.0999999999999996 },
-  { -42007.465141862223, 10, 1.1999999999999993 },
-  { -66123.413033062563, 10, 1.3000000000000007 },
-  { -82507.675752857642, 10, 1.4000000000000004 },
-  { -85401.000000000000, 10, 1.5000000000000000 },
-  { -69648.597834137676, 10, 1.5999999999999996 },
-  { -31740.330680422732, 10, 1.6999999999999993 },
-  { 29012.094015898125, 10, 1.8000000000000007 },
-  { 109249.22783242268, 10, 1.9000000000000004 },
-  { 200416.00000000000, 10, 2.0000000000000000 },
-  { 287863.09027338214, 10, 2.0999999999999996 },
-  { 350419.82826741732, 10, 2.1999999999999993 },
-  { 360718.79745525745, 10, 2.3000000000000007 },
-  { 286617.47398410190, 10, 2.4000000000000004 },
-  { 94135.000000000000, 10, 2.5000000000000000 },
-  { -247597.05012469599, 10, 2.5999999999999996 },
-  { -758781.93281033845, 10, 2.6999999999999993 },
-  { -1438117.1978829878, 10, 2.8000000000000007 },
-  { -2247873.5653938209, 10, 2.9000000000000004 },
-  { -3093984.0000000000, 10, 3.0000000000000000 },
-  { -3800107.4878923763, 10, 3.0999999999999996 },
-  { -4074495.5241857003, 10, 3.1999999999999993 },
-  { -3468342.2313268133, 10, 3.3000000000000007 },
-  { -1324140.9798373245, 10, 3.4000000000000004 },
-  { 3287599.0000000000, 10, 3.5000000000000000 },
-  { 11645103.614666298, 10, 3.5999999999999996 },
-  { 25467573.275709212, 10, 3.6999999999999993 },
-  { 47025137.016035900, 10, 3.8000000000000007 },
-  { 79268966.162877649, 10, 3.9000000000000004 },
-  { 125984224.00000000, 10, 4.0000000000000000 },
-  { 191968773.03860721, 10, 4.0999999999999996 },
-  { 283240820.63788199, 10, 4.1999999999999993 },
-  { 407278957.14375770, 10, 4.3000000000000007 },
-  { 573298328.81993556, 10, 4.4000000000000004 },
-  { 792566991.00000000, 10, 4.5000000000000000 },
-  { 1078766805.4651456, 10, 4.5999999999999996 },
-  { 1448403580.4203794, 10, 4.6999999999999993 },
-  { 1921271501.9744320, 10, 4.8000000000000007 },
-  { 2520977273.0966806, 10, 4.9000000000000004 },
-  { 3275529760.0000000, 10, 5.0000000000000000 },
-  { 4218001347.1524582, 10, 5.0999999999999996 },
-  { 5387267621.0258913, 10, 5.1999999999999993 },
-  { 6828832439.6160927, 10, 5.3000000000000007 },
-  { 8595745900.0898170, 10, 5.4000000000000004 },
-  { 10749623191.000000, 10, 5.5000000000000000 },
-  { 13361772808.732477, 10, 5.5999999999999996 },
-  { 16514443130.579332, 10, 5.6999999999999993 },
-  { 20302196869.444618, 10, 5.8000000000000007 },
-  { 24833423488.050617, 10, 5.9000000000000004 },
-  { 30232000224.000000, 10, 6.0000000000000000 },
-  { 36639112971.527824, 10, 6.1000000000000014 },
-  { 44215248881.625443, 10, 6.1999999999999993 },
-  { 53142373179.806152, 10, 6.3000000000000007 },
-  { 63626303360.467911, 10, 6.3999999999999986 },
-  { 75899294599.000000, 10, 6.5000000000000000 },
-  { 90222850927.788208, 10, 6.6000000000000014 },
-  { 106890777450.54652, 10, 6.6999999999999993 },
-  { 126232489621.23946, 10, 6.8000000000000007 },
-  { 148616596389.67184, 10, 6.8999999999999986 },
-  { 174454774816.00000, 10, 7.0000000000000000 },
-  { 204205954581.24780, 10, 7.1000000000000014 },
-  { 238380831670.89960, 10, 7.1999999999999993 },
-  { 277546731384.01831, 10, 7.3000000000000007 },
-  { 322332841721.55646, 10, 7.3999999999999986 },
-  { 373435839135.00000, 10, 7.5000000000000000 },
-  { 431625929570.40161, 10, 7.6000000000000014 },
-  { 497753328723.87476, 10, 7.6999999999999993 },
-  { 572755206432.81396, 10, 7.8000000000000007 },
-  { 657663121163.02307, 10, 7.8999999999999986 },
-  { 753610971616.00000, 10, 8.0000000000000000 },
-  { 861843493572.90283, 10, 8.1000000000000014 },
-  { 983725331213.07190, 10, 8.1999999999999993 },
-  { 1120750713295.2778, 10, 8.3000000000000007 },
-  { 1274553765769.7439, 10, 8.3999999999999986 },
-  { 1446919493599.0000, 10, 8.5000000000000000 },
-  { 1639795465805.4785, 10, 8.6000000000000014 },
-  { 1855304239034.7983, 10, 8.6999999999999993 },
-  { 2095756556225.3428, 10, 8.8000000000000007 },
-  { 2363665358307.8442, 10, 8.8999999999999986 },
-  { 2661760648224.0000, 10, 9.0000000000000000 },
-  { 2993005247949.7671, 10, 9.1000000000000014 },
-  { 3360611490639.0889, 10, 9.1999999999999993 },
-  { 3768058891466.0469, 10, 9.3000000000000007 },
-  { 4219112842239.1055, 10, 9.3999999999999986 },
-  { 4717844376391.0000, 10, 9.5000000000000000 },
-  { 5268651052510.4785, 10, 9.6000000000000014 },
-  { 5876279006180.6377, 10, 9.6999999999999993 },
-  { 6545846221520.6768, 10, 9.8000000000000007 },
-  { 7282867075495.2949, 10, 9.8999999999999986 },
-  { 8093278209760.0000, 10, 10.000000000000000 },
+  { 8093278209760.0000, 10, -10.000000000000000, 0.0 },
+  { 7282867075495.3066, 10, -9.9000000000000004, 0.0 },
+  { 6545846221520.6768, 10, -9.8000000000000007, 0.0 },
+  { 5876279006180.6377, 10, -9.6999999999999993, 0.0 },
+  { 5268651052510.4668, 10, -9.5999999999999996, 0.0 },
+  { 4717844376391.0000, 10, -9.5000000000000000, 0.0 },
+  { 4219112842239.1147, 10, -9.4000000000000004, 0.0 },
+  { 3768058891466.0469, 10, -9.3000000000000007, 0.0 },
+  { 3360611490639.0889, 10, -9.1999999999999993, 0.0 },
+  { 2993005247949.7607, 10, -9.0999999999999996, 0.0 },
+  { 2661760648224.0000, 10, -9.0000000000000000, 0.0 },
+  { 2363665358307.8496, 10, -8.9000000000000004, 0.0 },
+  { 2095756556225.3428, 10, -8.8000000000000007, 0.0 },
+  { 1855304239034.7983, 10, -8.6999999999999993, 0.0 },
+  { 1639795465805.4746, 10, -8.5999999999999996, 0.0 },
+  { 1446919493599.0000, 10, -8.5000000000000000, 0.0 },
+  { 1274553765769.7463, 10, -8.4000000000000004, 0.0 },
+  { 1120750713295.2778, 10, -8.3000000000000007, 0.0 },
+  { 983725331213.07190, 10, -8.1999999999999993, 0.0 },
+  { 861843493572.90051, 10, -8.0999999999999996, 0.0 },
+  { 753610971616.00000, 10, -8.0000000000000000, 0.0 },
+  { 657663121163.02454, 10, -7.9000000000000004, 0.0 },
+  { 572755206432.81335, 10, -7.7999999999999998, 0.0 },
+  { 497753328723.87476, 10, -7.6999999999999993, 0.0 },
+  { 431625929570.40063, 10, -7.5999999999999996, 0.0 },
+  { 373435839135.00000, 10, -7.5000000000000000, 0.0 },
+  { 322332841721.55731, 10, -7.4000000000000004, 0.0 },
+  { 277546731384.01782, 10, -7.2999999999999998, 0.0 },
+  { 238380831670.89960, 10, -7.1999999999999993, 0.0 },
+  { 204205954581.24731, 10, -7.0999999999999996, 0.0 },
+  { 174454774816.00000, 10, -7.0000000000000000, 0.0 },
+  { 148616596389.67230, 10, -6.9000000000000004, 0.0 },
+  { 126232489621.23923, 10, -6.7999999999999998, 0.0 },
+  { 106890777450.54652, 10, -6.6999999999999993, 0.0 },
+  { 90222850927.787979, 10, -6.5999999999999996, 0.0 },
+  { 75899294599.000000, 10, -6.5000000000000000, 0.0 },
+  { 63626303360.468109, 10, -6.4000000000000004, 0.0 },
+  { 53142373179.806053, 10, -6.2999999999999998, 0.0 },
+  { 44215248881.625443, 10, -6.1999999999999993, 0.0 },
+  { 36639112971.527679, 10, -6.0999999999999996, 0.0 },
+  { 30232000224.000000, 10, -6.0000000000000000, 0.0 },
+  { 24833423488.050575, 10, -5.8999999999999995, 0.0 },
+  { 20302196869.444584, 10, -5.7999999999999998, 0.0 },
+  { 16514443130.579359, 10, -5.7000000000000002, 0.0 },
+  { 13361772808.732477, 10, -5.5999999999999996, 0.0 },
+  { 10749623191.000000, 10, -5.5000000000000000, 0.0 },
+  { 8595745900.0898018, 10, -5.3999999999999995, 0.0 },
+  { 6828832439.6160822, 10, -5.2999999999999998, 0.0 },
+  { 5387267621.0258913, 10, -5.1999999999999993, 0.0 },
+  { 4218001347.1524582, 10, -5.0999999999999996, 0.0 },
+  { 3275529760.0000000, 10, -5.0000000000000000, 0.0 },
+  { 2520977273.0966735, 10, -4.8999999999999995, 0.0 },
+  { 1921271501.9744270, 10, -4.7999999999999998, 0.0 },
+  { 1448403580.4203794, 10, -4.6999999999999993, 0.0 },
+  { 1078766805.4651456, 10, -4.5999999999999996, 0.0 },
+  { 792566991.00000000, 10, -4.5000000000000000, 0.0 },
+  { 573298328.81993365, 10, -4.3999999999999995, 0.0 },
+  { 407278957.14375639, 10, -4.2999999999999998, 0.0 },
+  { 283240820.63788199, 10, -4.1999999999999993, 0.0 },
+  { 191968773.03860721, 10, -4.0999999999999996, 0.0 },
+  { 125984224.00000000, 10, -4.0000000000000000, 0.0 },
+  { 79268966.162877351, 10, -3.8999999999999995, 0.0 },
+  { 47025137.016035721, 10, -3.7999999999999998, 0.0 },
+  { 25467573.275709212, 10, -3.6999999999999993, 0.0 },
+  { 11645103.614666298, 10, -3.5999999999999996, 0.0 },
+  { 3287599.0000000000, 10, -3.5000000000000000, 0.0 },
+  { -1324140.9798373580, 10, -3.3999999999999995, 0.0 },
+  { -3468342.2313268245, 10, -3.2999999999999998, 0.0 },
+  { -4074495.5241857003, 10, -3.1999999999999993, 0.0 },
+  { -3800107.4878923763, 10, -3.0999999999999996, 0.0 },
+  { -3093984.0000000000, 10, -3.0000000000000000, 0.0 },
+  { -2247873.5653938125, 10, -2.8999999999999995, 0.0 },
+  { -1438117.1978829810, 10, -2.7999999999999998, 0.0 },
+  { -758781.93281033845, 10, -2.6999999999999993, 0.0 },
+  { -247597.05012469599, 10, -2.5999999999999996, 0.0 },
+  { 94135.000000000000, 10, -2.5000000000000000, 0.0 },
+  { 286617.47398410313, 10, -2.3999999999999995, 0.0 },
+  { 360718.79745525768, 10, -2.2999999999999998, 0.0 },
+  { 350419.82826741732, 10, -2.1999999999999993, 0.0 },
+  { 287863.09027338214, 10, -2.0999999999999996, 0.0 },
+  { 200416.00000000000, 10, -2.0000000000000000, 0.0 },
+  { 109249.22783242268, 10, -1.9000000000000004, 0.0 },
+  { 29012.094015896859, 10, -1.7999999999999989, 0.0 },
+  { -31740.330680422732, 10, -1.6999999999999993, 0.0 },
+  { -69648.597834137676, 10, -1.5999999999999996, 0.0 },
+  { -85401.000000000000, 10, -1.5000000000000000, 0.0 },
+  { -82507.675752857642, 10, -1.4000000000000004, 0.0 },
+  { -66123.413033062170, 10, -1.2999999999999989, 0.0 },
+  { -42007.465141862223, 10, -1.1999999999999993, 0.0 },
+  { -15676.055823257526, 10, -1.0999999999999996, 0.0 },
+  { 8224.0000000000000, 10, -1.0000000000000000, 0.0 },
+  { 26314.366684262357, 10, -0.90000000000000036, 0.0 },
+  { 36668.344916377660, 10, -0.79999999999999893, 0.0 },
+  { 38802.826035097583, 10, -0.69999999999999929, 0.0 },
+  { 33513.167890022363, 10, -0.59999999999999964, 0.0 },
+  { 22591.000000000000, 10, -0.50000000000000000, 0.0 },
+  { 8467.6907597821937, 10, -0.39999999999999858, 0.0 },
+  { -6173.8524877825521, 10, -0.29999999999999893, 0.0 },
+  { -18778.856957542470, 10, -0.19999999999999929, 0.0 },
+  { -27256.158950297624, 10, -0.099999999999999645, 0.0 },
+  { -30240.000000000000, 10, 0.0000000000000000, 0.0 },
+  { -27256.158950297515, 10, 0.10000000000000142, 0.0 },
+  { -18778.856957542288, 10, 0.20000000000000107, 0.0 },
+  { -6173.8524877822965, 10, 0.30000000000000071, 0.0 },
+  { 8467.6907597824556, 10, 0.40000000000000036, 0.0 },
+  { 22591.000000000000, 10, 0.50000000000000000, 0.0 },
+  { 33513.167890022516, 10, 0.60000000000000142, 0.0 },
+  { 38802.826035097620, 10, 0.70000000000000107, 0.0 },
+  { 36668.344916377559, 10, 0.80000000000000071, 0.0 },
+  { 26314.366684262357, 10, 0.90000000000000036, 0.0 },
+  { 8224.0000000000000, 10, 1.0000000000000000, 0.0 },
+  { -15676.055823257961, 10, 1.1000000000000014, 0.0 },
+  { -42007.465141862689, 10, 1.2000000000000011, 0.0 },
+  { -66123.413033062563, 10, 1.3000000000000007, 0.0 },
+  { -82507.675752857642, 10, 1.4000000000000004, 0.0 },
+  { -85401.000000000000, 10, 1.5000000000000000, 0.0 },
+  { -69648.597834137239, 10, 1.6000000000000014, 0.0 },
+  { -31740.330680421859, 10, 1.7000000000000011, 0.0 },
+  { 29012.094015898125, 10, 1.8000000000000007, 0.0 },
+  { 109249.22783242268, 10, 1.9000000000000004, 0.0 },
+  { 200416.00000000000, 10, 2.0000000000000000, 0.0 },
+  { 287863.09027338354, 10, 2.1000000000000014, 0.0 },
+  { 350419.82826741802, 10, 2.2000000000000011, 0.0 },
+  { 360718.79745525745, 10, 2.3000000000000007, 0.0 },
+  { 286617.47398410190, 10, 2.4000000000000004, 0.0 },
+  { 94135.000000000000, 10, 2.5000000000000000, 0.0 },
+  { -247597.05012470379, 10, 2.6000000000000014, 0.0 },
+  { -758781.93281034881, 10, 2.7000000000000011, 0.0 },
+  { -1438117.1978829878, 10, 2.8000000000000007, 0.0 },
+  { -2247873.5653938209, 10, 2.9000000000000004, 0.0 },
+  { -3093984.0000000000, 10, 3.0000000000000000, 0.0 },
+  { -3800107.4878923851, 10, 3.1000000000000014, 0.0 },
+  { -4074495.5241857045, 10, 3.2000000000000011, 0.0 },
+  { -3468342.2313268133, 10, 3.3000000000000007, 0.0 },
+  { -1324140.9798373245, 10, 3.4000000000000004, 0.0 },
+  { 3287599.0000000000, 10, 3.5000000000000000, 0.0 },
+  { 11645103.614666503, 10, 3.6000000000000014, 0.0 },
+  { 25467573.275709510, 10, 3.7000000000000011, 0.0 },
+  { 47025137.016035900, 10, 3.8000000000000007, 0.0 },
+  { 79268966.162877649, 10, 3.9000000000000004, 0.0 },
+  { 125984224.00000000, 10, 4.0000000000000000, 0.0 },
+  { 191968773.03860855, 10, 4.1000000000000014, 0.0 },
+  { 283240820.63788390, 10, 4.2000000000000011, 0.0 },
+  { 407278957.14375770, 10, 4.3000000000000007, 0.0 },
+  { 573298328.81993556, 10, 4.4000000000000004, 0.0 },
+  { 792566991.00000000, 10, 4.5000000000000000, 0.0 },
+  { 1078766805.4651513, 10, 4.6000000000000014, 0.0 },
+  { 1448403580.4203873, 10, 4.7000000000000011, 0.0 },
+  { 1921271501.9744320, 10, 4.8000000000000007, 0.0 },
+  { 2520977273.0966806, 10, 4.9000000000000004, 0.0 },
+  { 3275529760.0000000, 10, 5.0000000000000000, 0.0 },
+  { 4218001347.1524763, 10, 5.1000000000000014, 0.0 },
+  { 5387267621.0259113, 10, 5.2000000000000011, 0.0 },
+  { 6828832439.6160927, 10, 5.3000000000000007, 0.0 },
+  { 8595745900.0898170, 10, 5.4000000000000004, 0.0 },
+  { 10749623191.000000, 10, 5.5000000000000000, 0.0 },
+  { 13361772808.732529, 10, 5.6000000000000014, 0.0 },
+  { 16514443130.579391, 10, 5.7000000000000011, 0.0 },
+  { 20302196869.444618, 10, 5.8000000000000007, 0.0 },
+  { 24833423488.050617, 10, 5.9000000000000004, 0.0 },
+  { 30232000224.000000, 10, 6.0000000000000000, 0.0 },
+  { 36639112971.527824, 10, 6.1000000000000014, 0.0 },
+  { 44215248881.625443, 10, 6.1999999999999993, 0.0 },
+  { 53142373179.806152, 10, 6.3000000000000007, 0.0 },
+  { 63626303360.468330, 10, 6.4000000000000021, 0.0 },
+  { 75899294599.000000, 10, 6.5000000000000000, 0.0 },
+  { 90222850927.788208, 10, 6.6000000000000014, 0.0 },
+  { 106890777450.54652, 10, 6.6999999999999993, 0.0 },
+  { 126232489621.23946, 10, 6.8000000000000007, 0.0 },
+  { 148616596389.67273, 10, 6.9000000000000021, 0.0 },
+  { 174454774816.00000, 10, 7.0000000000000000, 0.0 },
+  { 204205954581.24780, 10, 7.1000000000000014, 0.0 },
+  { 238380831670.89960, 10, 7.1999999999999993, 0.0 },
+  { 277546731384.01831, 10, 7.3000000000000007, 0.0 },
+  { 322332841721.55811, 10, 7.4000000000000021, 0.0 },
+  { 373435839135.00000, 10, 7.5000000000000000, 0.0 },
+  { 431625929570.40161, 10, 7.6000000000000014, 0.0 },
+  { 497753328723.87476, 10, 7.6999999999999993, 0.0 },
+  { 572755206432.81396, 10, 7.8000000000000007, 0.0 },
+  { 657663121163.02625, 10, 7.9000000000000021, 0.0 },
+  { 753610971616.00000, 10, 8.0000000000000000, 0.0 },
+  { 861843493572.90283, 10, 8.1000000000000014, 0.0 },
+  { 983725331213.07190, 10, 8.1999999999999993, 0.0 },
+  { 1120750713295.2778, 10, 8.3000000000000007, 0.0 },
+  { 1274553765769.7490, 10, 8.4000000000000021, 0.0 },
+  { 1446919493599.0000, 10, 8.5000000000000000, 0.0 },
+  { 1639795465805.4785, 10, 8.6000000000000014, 0.0 },
+  { 1855304239034.7983, 10, 8.6999999999999993, 0.0 },
+  { 2095756556225.3428, 10, 8.8000000000000007, 0.0 },
+  { 2363665358307.8540, 10, 8.9000000000000021, 0.0 },
+  { 2661760648224.0000, 10, 9.0000000000000000, 0.0 },
+  { 2993005247949.7671, 10, 9.1000000000000014, 0.0 },
+  { 3360611490639.1025, 10, 9.2000000000000028, 0.0 },
+  { 3768058891466.0469, 10, 9.3000000000000007, 0.0 },
+  { 4219112842239.1221, 10, 9.4000000000000021, 0.0 },
+  { 4717844376391.0000, 10, 9.5000000000000000, 0.0 },
+  { 5268651052510.4785, 10, 9.6000000000000014, 0.0 },
+  { 5876279006180.6602, 10, 9.7000000000000028, 0.0 },
+  { 6545846221520.6768, 10, 9.8000000000000007, 0.0 },
+  { 7282867075495.3213, 10, 9.9000000000000021, 0.0 },
+  { 8093278209760.0000, 10, 10.000000000000000, 0.0 },
 };
-
-// Test function for n=10.
-template<typename Tp>
-  void
-  test005()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data005)
-                          / sizeof(testcase_hermite<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::hermite(Tp(data005[i].n), Tp(data005[i].x));
-       const Tp f0 = data005[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler005 = 2.5000000000000020e-13;
 
 // Test data for n=20.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
-testcase_hermite<double>
-data006[] =
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data006[201] =
 {
-  { 3.6536710970888030e+25, 20, -10.000000000000000 },
-  { 2.9174932703098834e+25, 20, -9.9000000000000004 },
-  { 2.3228769039548404e+25, 20, -9.8000000000000007 },
-  { 1.8439144509496016e+25, 20, -9.6999999999999993 },
-  { 1.4591971834545420e+25, 20, -9.5999999999999996 },
-  { 1.1510764882450827e+25, 20, -9.5000000000000000 },
-  { 9.0503941245991605e+24, 20, -9.4000000000000004 },
-  { 7.0918188910312152e+24, 20, -9.3000000000000007 },
-  { 5.5376531405202033e+24, 20, -9.1999999999999993 },
-  { 4.3084410724035914e+24, 20, -9.0999999999999996 },
-  { 3.3395360269524137e+24, 20, -9.0000000000000000 },
-  { 2.5784910430831484e+24, 20, -8.9000000000000004 },
-  { 1.9828824261062853e+24, 20, -8.8000000000000007 },
-  { 1.5184989558235974e+24, 20, -8.6999999999999993 },
-  { 1.1578391431515818e+24, 20, -8.5999999999999996 },
-  { 8.7886740525023878e+23, 20, -8.5000000000000000 },
-  { 6.6398733801206072e+23, 20, -8.4000000000000004 },
-  { 4.9919656538201190e+23, 20, -8.3000000000000007 },
-  { 3.7339306542317994e+23, 20, -8.1999999999999993 },
-  { 2.7780752653950559e+23, 20, -8.0999999999999996 },
-  { 2.0554027373991249e+23, 20, -8.0000000000000000 },
-  { 1.5118471231121695e+23, 20, -7.9000000000000004 },
-  { 1.1052214218386250e+23, 20, -7.7999999999999998 },
-  { 8.0275268594719504e+22, 20, -7.7000000000000002 },
-  { 5.7909832934009042e+22, 20, -7.5999999999999996 },
-  { 4.1475563998692745e+22, 20, -7.5000000000000000 },
-  { 2.9479149729249250e+22, 20, -7.4000000000000004 },
-  { 2.0783192485964573e+22, 20, -7.2999999999999998 },
-  { 1.4526171451238503e+22, 20, -7.2000000000000002 },
-  { 1.0059323685871305e+22, 20, -7.0999999999999996 },
-  { 6.8970965604502329e+21, 20, -7.0000000000000000 },
-  { 4.6784410379528280e+21, 20, -6.9000000000000004 },
-  { 3.1367268160419670e+21, 20, -6.7999999999999998 },
-  { 2.0764831558419748e+21, 20, -6.7000000000000002 },
-  { 1.3555174744148132e+21, 20, -6.5999999999999996 },
-  { 8.7124954970091579e+20, 20, -6.5000000000000000 },
-  { 5.5033278133788108e+20, 20, -6.4000000000000004 },
-  { 3.4082412197533739e+20, 20, -6.2999999999999998 },
-  { 2.0631845648712185e+20, 20, -6.2000000000000002 },
-  { 1.2158762212269028e+20, 20, -6.0999999999999996 },
-  { 6.9364200641629315e+19, 20, -6.0000000000000000 },
-  { 3.7990093270095905e+19, 20, -5.9000000000000004 },
-  { 1.9713403927925858e+19, 20, -5.7999999999999998 },
-  { 9.4673798488533340e+18, 20, -5.7000000000000002 },
-  { 4.0046403628787825e+18, 20, -5.5999999999999996 },
-  { 1.2907686705724293e+18, 20, -5.5000000000000000 },
-  { 85277679782823936., 20, -5.4000000000000004 },
-  { -3.4359547179069376e+17, 20, -5.2999999999999998 },
-  { -4.0970873501577555e+17, 20, -5.2000000000000002 },
-  { -3.3419585613348250e+17, 20, -5.0999999999999996 },
-  { -2.2571776716382720e+17, 20, -5.0000000000000000 },
-  { -1.3051120203565566e+17, 20, -4.9000000000000004 },
-  { -62555669197021992., 20, -4.7999999999999998 },
-  { -20974173561010048., 20, -4.7000000000000002 },
-  { 519073301695656.00, 20, -4.5999999999999996 },
-  { 8939556693761121.0, 20, -4.5000000000000000 },
-  { 10070625675125180., 20, -4.4000000000000004 },
-  { 7940371996960715.0, 20, -4.2999999999999998 },
-  { 4973623686173568.0, 20, -4.2000000000000002 },
-  { 2389023282480410.0, 20, -4.0999999999999996 },
-  { 619678016654336.00, 20, -4.0000000000000000 },
-  { -339773491011946.00, 20, -3.9000000000000004 },
-  { -687467334428204.38, 20, -3.7999999999999998 },
-  { -663019129550482.75, 20, -3.7000000000000002 },
-  { -469585152350670.25, 20, -3.5999999999999996 },
-  { -245659781875039.00, 20, -3.5000000000000000 },
-  { -66042773886778.938, 20, -3.4000000000000004 },
-  { 43442261337436.312, 20, -3.2999999999999998 },
-  { 87626632986465.375, 20, -3.2000000000000002 },
-  { 85786202388511.375, 20, -3.0999999999999996 },
-  { 59990281399296.000, 20, -3.0000000000000000 },
-  { 28343496696718.070, 20, -2.9000000000000004 },
-  { 2296898915036.0859, 20, -2.7999999999999998 },
-  { -13249381789941.502, 20, -2.7000000000000002 },
-  { -18328180426561.059, 20, -2.5999999999999996 },
-  { -15799429886575.000, 20, -2.5000000000000000 },
-  { -9442592050214.3027, 20, -2.4000000000000004 },
-  { -2602375356373.2393, 20, -2.2999999999999998 },
-  { 2521759315047.8428, 20, -2.2000000000000002 },
-  { 5027779307352.6660, 20, -2.0999999999999996 },
-  { 5080118660096.0000, 20, -2.0000000000000000 },
-  { 3490463276000.5425, 20, -1.9000000000000004 },
-  { 1277254793997.1128, 20, -1.8000000000000007 },
-  { -682119355279.28784, 20, -1.6999999999999993 },
-  { -1851544254412.3203, 20, -1.5999999999999996 },
-  { -2085387081039.0000, 20, -1.5000000000000000 },
-  { -1559402933581.5054, 20, -1.4000000000000004 },
-  { -634265763221.87231, 20, -1.3000000000000007 },
-  { 295481874887.33429, 20, -1.1999999999999993 },
-  { 924603483429.34241, 20, -1.0999999999999996 },
-  { 1107214478336.0000, 20, -1.0000000000000000 },
-  { 867235623835.12463, 20, -0.90000000000000036 },
-  { 358848462745.15466, 20, -0.80000000000000071 },
-  { -202944086511.71936, 20, -0.69999999999999929 },
-  { -617730863561.32617, 20, -0.59999999999999964 },
-  { -759627879679.00000, 20, -0.50000000000000000 },
-  { -607451728035.03271, 20, -0.40000000000000036 },
-  { -240424854484.42111, 20, -0.30000000000000071 },
-  { 195759209122.61337, 20, -0.19999999999999929 },
-  { 540334019322.52014, 20, -0.099999999999999645 },
-  { 670442572800.00000, 20, 0.0000000000000000 },
-  { 540334019322.52014, 20, 0.099999999999999645 },
-  { 195759209122.61337, 20, 0.19999999999999929 },
-  { -240424854484.42111, 20, 0.30000000000000071 },
-  { -607451728035.03271, 20, 0.40000000000000036 },
-  { -759627879679.00000, 20, 0.50000000000000000 },
-  { -617730863561.32617, 20, 0.59999999999999964 },
-  { -202944086511.71936, 20, 0.69999999999999929 },
-  { 358848462745.15466, 20, 0.80000000000000071 },
-  { 867235623835.12463, 20, 0.90000000000000036 },
-  { 1107214478336.0000, 20, 1.0000000000000000 },
-  { 924603483429.34241, 20, 1.0999999999999996 },
-  { 295481874887.33429, 20, 1.1999999999999993 },
-  { -634265763221.87231, 20, 1.3000000000000007 },
-  { -1559402933581.5054, 20, 1.4000000000000004 },
-  { -2085387081039.0000, 20, 1.5000000000000000 },
-  { -1851544254412.3203, 20, 1.5999999999999996 },
-  { -682119355279.28784, 20, 1.6999999999999993 },
-  { 1277254793997.1128, 20, 1.8000000000000007 },
-  { 3490463276000.5425, 20, 1.9000000000000004 },
-  { 5080118660096.0000, 20, 2.0000000000000000 },
-  { 5027779307352.6660, 20, 2.0999999999999996 },
-  { 2521759315047.8770, 20, 2.1999999999999993 },
-  { -2602375356373.2969, 20, 2.3000000000000007 },
-  { -9442592050214.3027, 20, 2.4000000000000004 },
-  { -15799429886575.000, 20, 2.5000000000000000 },
-  { -18328180426561.059, 20, 2.5999999999999996 },
-  { -13249381789941.586, 20, 2.6999999999999993 },
-  { 2296898915036.2812, 20, 2.8000000000000007 },
-  { 28343496696718.070, 20, 2.9000000000000004 },
-  { 59990281399296.000, 20, 3.0000000000000000 },
-  { 85786202388511.375, 20, 3.0999999999999996 },
-  { 87626632986465.438, 20, 3.1999999999999993 },
-  { 43442261337435.672, 20, 3.3000000000000007 },
-  { -66042773886778.938, 20, 3.4000000000000004 },
-  { -245659781875039.00, 20, 3.5000000000000000 },
-  { -469585152350670.25, 20, 3.5999999999999996 },
-  { -663019129550482.25, 20, 3.6999999999999993 },
-  { -687467334428203.38, 20, 3.8000000000000007 },
-  { -339773491011946.00, 20, 3.9000000000000004 },
-  { 619678016654336.00, 20, 4.0000000000000000 },
-  { 2389023282480410.0, 20, 4.0999999999999996 },
-  { 4973623686173539.0, 20, 4.1999999999999993 },
-  { 7940371996960741.0, 20, 4.3000000000000007 },
-  { 10070625675125180., 20, 4.4000000000000004 },
-  { 8939556693761121.0, 20, 4.5000000000000000 },
-  { 519073301695656.00, 20, 4.5999999999999996 },
-  { -20974173561009776., 20, 4.6999999999999993 },
-  { -62555669197022528., 20, 4.8000000000000007 },
-  { -1.3051120203565566e+17, 20, 4.9000000000000004 },
-  { -2.2571776716382720e+17, 20, 5.0000000000000000 },
-  { -3.3419585613348250e+17, 20, 5.0999999999999996 },
-  { -4.0970873501577562e+17, 20, 5.1999999999999993 },
-  { -3.4359547179069216e+17, 20, 5.3000000000000007 },
-  { 85277679782823936., 20, 5.4000000000000004 },
-  { 1.2907686705724293e+18, 20, 5.5000000000000000 },
-  { 4.0046403628787825e+18, 20, 5.5999999999999996 },
-  { 9.4673798488532767e+18, 20, 5.6999999999999993 },
-  { 1.9713403927925973e+19, 20, 5.8000000000000007 },
-  { 3.7990093270095905e+19, 20, 5.9000000000000004 },
-  { 6.9364200641629315e+19, 20, 6.0000000000000000 },
-  { 1.2158762212269156e+20, 20, 6.1000000000000014 },
-  { 2.0631845648712086e+20, 20, 6.1999999999999993 },
-  { 3.4082412197533902e+20, 20, 6.3000000000000007 },
-  { 5.5033278133787696e+20, 20, 6.3999999999999986 },
-  { 8.7124954970091579e+20, 20, 6.5000000000000000 },
-  { 1.3555174744148243e+21, 20, 6.6000000000000014 },
-  { 2.0764831558419680e+21, 20, 6.6999999999999993 },
-  { 3.1367268160419775e+21, 20, 6.8000000000000007 },
-  { 4.6784410379527966e+21, 20, 6.8999999999999986 },
-  { 6.8970965604502329e+21, 20, 7.0000000000000000 },
-  { 1.0059323685871368e+22, 20, 7.1000000000000014 },
-  { 1.4526171451238465e+22, 20, 7.1999999999999993 },
-  { 2.0783192485964666e+22, 20, 7.3000000000000007 },
-  { 2.9479149729249048e+22, 20, 7.3999999999999986 },
-  { 4.1475563998692745e+22, 20, 7.5000000000000000 },
-  { 5.7909832934009378e+22, 20, 7.6000000000000014 },
-  { 8.0275268594719286e+22, 20, 7.6999999999999993 },
-  { 1.1052214218386286e+23, 20, 7.8000000000000007 },
-  { 1.5118471231121604e+23, 20, 7.8999999999999986 },
-  { 2.0554027373991249e+23, 20, 8.0000000000000000 },
-  { 2.7780752653950703e+23, 20, 8.1000000000000014 },
-  { 3.7339306542317994e+23, 20, 8.1999999999999993 },
-  { 4.9919656538201190e+23, 20, 8.3000000000000007 },
-  { 6.6398733801205790e+23, 20, 8.3999999999999986 },
-  { 8.7886740525023878e+23, 20, 8.5000000000000000 },
-  { 1.1578391431515869e+24, 20, 8.6000000000000014 },
-  { 1.5184989558235974e+24, 20, 8.6999999999999993 },
-  { 1.9828824261062853e+24, 20, 8.8000000000000007 },
-  { 2.5784910430831355e+24, 20, 8.8999999999999986 },
-  { 3.3395360269524137e+24, 20, 9.0000000000000000 },
-  { 4.3084410724036123e+24, 20, 9.1000000000000014 },
-  { 5.5376531405202033e+24, 20, 9.1999999999999993 },
-  { 7.0918188910312152e+24, 20, 9.3000000000000007 },
-  { 9.0503941245991197e+24, 20, 9.3999999999999986 },
-  { 1.1510764882450827e+25, 20, 9.5000000000000000 },
-  { 1.4591971834545491e+25, 20, 9.6000000000000014 },
-  { 1.8439144509496016e+25, 20, 9.6999999999999993 },
-  { 2.3228769039548404e+25, 20, 9.8000000000000007 },
-  { 2.9174932703098731e+25, 20, 9.8999999999999986 },
-  { 3.6536710970888030e+25, 20, 10.000000000000000 },
+  { 3.6536710970888030e+25, 20, -10.000000000000000, 0.0 },
+  { 2.9174932703098834e+25, 20, -9.9000000000000004, 0.0 },
+  { 2.3228769039548404e+25, 20, -9.8000000000000007, 0.0 },
+  { 1.8439144509496016e+25, 20, -9.6999999999999993, 0.0 },
+  { 1.4591971834545420e+25, 20, -9.5999999999999996, 0.0 },
+  { 1.1510764882450827e+25, 20, -9.5000000000000000, 0.0 },
+  { 9.0503941245991605e+24, 20, -9.4000000000000004, 0.0 },
+  { 7.0918188910312152e+24, 20, -9.3000000000000007, 0.0 },
+  { 5.5376531405202033e+24, 20, -9.1999999999999993, 0.0 },
+  { 4.3084410724035914e+24, 20, -9.0999999999999996, 0.0 },
+  { 3.3395360269524137e+24, 20, -9.0000000000000000, 0.0 },
+  { 2.5784910430831484e+24, 20, -8.9000000000000004, 0.0 },
+  { 1.9828824261062853e+24, 20, -8.8000000000000007, 0.0 },
+  { 1.5184989558235974e+24, 20, -8.6999999999999993, 0.0 },
+  { 1.1578391431515818e+24, 20, -8.5999999999999996, 0.0 },
+  { 8.7886740525023878e+23, 20, -8.5000000000000000, 0.0 },
+  { 6.6398733801206072e+23, 20, -8.4000000000000004, 0.0 },
+  { 4.9919656538201190e+23, 20, -8.3000000000000007, 0.0 },
+  { 3.7339306542317994e+23, 20, -8.1999999999999993, 0.0 },
+  { 2.7780752653950559e+23, 20, -8.0999999999999996, 0.0 },
+  { 2.0554027373991249e+23, 20, -8.0000000000000000, 0.0 },
+  { 1.5118471231121695e+23, 20, -7.9000000000000004, 0.0 },
+  { 1.1052214218386250e+23, 20, -7.7999999999999998, 0.0 },
+  { 8.0275268594719286e+22, 20, -7.6999999999999993, 0.0 },
+  { 5.7909832934009042e+22, 20, -7.5999999999999996, 0.0 },
+  { 4.1475563998692745e+22, 20, -7.5000000000000000, 0.0 },
+  { 2.9479149729249250e+22, 20, -7.4000000000000004, 0.0 },
+  { 2.0783192485964573e+22, 20, -7.2999999999999998, 0.0 },
+  { 1.4526171451238465e+22, 20, -7.1999999999999993, 0.0 },
+  { 1.0059323685871305e+22, 20, -7.0999999999999996, 0.0 },
+  { 6.8970965604502329e+21, 20, -7.0000000000000000, 0.0 },
+  { 4.6784410379528280e+21, 20, -6.9000000000000004, 0.0 },
+  { 3.1367268160419670e+21, 20, -6.7999999999999998, 0.0 },
+  { 2.0764831558419680e+21, 20, -6.6999999999999993, 0.0 },
+  { 1.3555174744148132e+21, 20, -6.5999999999999996, 0.0 },
+  { 8.7124954970091579e+20, 20, -6.5000000000000000, 0.0 },
+  { 5.5033278133788108e+20, 20, -6.4000000000000004, 0.0 },
+  { 3.4082412197533739e+20, 20, -6.2999999999999998, 0.0 },
+  { 2.0631845648712086e+20, 20, -6.1999999999999993, 0.0 },
+  { 1.2158762212269028e+20, 20, -6.0999999999999996, 0.0 },
+  { 6.9364200641629315e+19, 20, -6.0000000000000000, 0.0 },
+  { 3.7990093270095700e+19, 20, -5.8999999999999995, 0.0 },
+  { 1.9713403927925858e+19, 20, -5.7999999999999998, 0.0 },
+  { 9.4673798488533340e+18, 20, -5.7000000000000002, 0.0 },
+  { 4.0046403628787825e+18, 20, -5.5999999999999996, 0.0 },
+  { 1.2907686705724293e+18, 20, -5.5000000000000000, 0.0 },
+  { 85277679782819584., 20, -5.3999999999999995, 0.0 },
+  { -3.4359547179069376e+17, 20, -5.2999999999999998, 0.0 },
+  { -4.0970873501577562e+17, 20, -5.1999999999999993, 0.0 },
+  { -3.3419585613348250e+17, 20, -5.0999999999999996, 0.0 },
+  { -2.2571776716382720e+17, 20, -5.0000000000000000, 0.0 },
+  { -1.3051120203565493e+17, 20, -4.8999999999999995, 0.0 },
+  { -62555669197021992., 20, -4.7999999999999998, 0.0 },
+  { -20974173561009776., 20, -4.6999999999999993, 0.0 },
+  { 519073301695656.00, 20, -4.5999999999999996, 0.0 },
+  { 8939556693761121.0, 20, -4.5000000000000000, 0.0 },
+  { 10070625675125174., 20, -4.3999999999999995, 0.0 },
+  { 7940371996960715.0, 20, -4.2999999999999998, 0.0 },
+  { 4973623686173539.0, 20, -4.1999999999999993, 0.0 },
+  { 2389023282480410.0, 20, -4.0999999999999996, 0.0 },
+  { 619678016654336.00, 20, -4.0000000000000000, 0.0 },
+  { -339773491011950.50, 20, -3.8999999999999995, 0.0 },
+  { -687467334428204.38, 20, -3.7999999999999998, 0.0 },
+  { -663019129550482.25, 20, -3.6999999999999993, 0.0 },
+  { -469585152350670.25, 20, -3.5999999999999996, 0.0 },
+  { -245659781875039.00, 20, -3.5000000000000000, 0.0 },
+  { -66042773886777.562, 20, -3.3999999999999995, 0.0 },
+  { 43442261337436.312, 20, -3.2999999999999998, 0.0 },
+  { 87626632986465.438, 20, -3.1999999999999993, 0.0 },
+  { 85786202388511.375, 20, -3.0999999999999996, 0.0 },
+  { 59990281399296.000, 20, -3.0000000000000000, 0.0 },
+  { 28343496696717.773, 20, -2.8999999999999995, 0.0 },
+  { 2296898915036.0859, 20, -2.7999999999999998, 0.0 },
+  { -13249381789941.586, 20, -2.6999999999999993, 0.0 },
+  { -18328180426561.059, 20, -2.5999999999999996, 0.0 },
+  { -15799429886575.000, 20, -2.5000000000000000, 0.0 },
+  { -9442592050214.2422, 20, -2.3999999999999995, 0.0 },
+  { -2602375356373.2393, 20, -2.2999999999999998, 0.0 },
+  { 2521759315047.8770, 20, -2.1999999999999993, 0.0 },
+  { 5027779307352.6660, 20, -2.0999999999999996, 0.0 },
+  { 5080118660096.0000, 20, -2.0000000000000000, 0.0 },
+  { 3490463276000.5425, 20, -1.9000000000000004, 0.0 },
+  { 1277254793997.0737, 20, -1.7999999999999989, 0.0 },
+  { -682119355279.28784, 20, -1.6999999999999993, 0.0 },
+  { -1851544254412.3203, 20, -1.5999999999999996, 0.0 },
+  { -2085387081039.0000, 20, -1.5000000000000000, 0.0 },
+  { -1559402933581.5054, 20, -1.4000000000000004, 0.0 },
+  { -634265763221.85437, 20, -1.2999999999999989, 0.0 },
+  { 295481874887.33429, 20, -1.1999999999999993, 0.0 },
+  { 924603483429.34241, 20, -1.0999999999999996, 0.0 },
+  { 1107214478336.0000, 20, -1.0000000000000000, 0.0 },
+  { 867235623835.12463, 20, -0.90000000000000036, 0.0 },
+  { 358848462745.14441, 20, -0.79999999999999893, 0.0 },
+  { -202944086511.71936, 20, -0.69999999999999929, 0.0 },
+  { -617730863561.32617, 20, -0.59999999999999964, 0.0 },
+  { -759627879679.00000, 20, -0.50000000000000000, 0.0 },
+  { -607451728035.02795, 20, -0.39999999999999858, 0.0 },
+  { -240424854484.41342, 20, -0.29999999999999893, 0.0 },
+  { 195759209122.61337, 20, -0.19999999999999929, 0.0 },
+  { 540334019322.52014, 20, -0.099999999999999645, 0.0 },
+  { 670442572800.00000, 20, 0.0000000000000000, 0.0 },
+  { 540334019322.51575, 20, 0.10000000000000142, 0.0 },
+  { 195759209122.60626, 20, 0.20000000000000107, 0.0 },
+  { -240424854484.42111, 20, 0.30000000000000071, 0.0 },
+  { -607451728035.03271, 20, 0.40000000000000036, 0.0 },
+  { -759627879679.00000, 20, 0.50000000000000000, 0.0 },
+  { -617730863561.32117, 20, 0.60000000000000142, 0.0 },
+  { -202944086511.71027, 20, 0.70000000000000107, 0.0 },
+  { 358848462745.15466, 20, 0.80000000000000071, 0.0 },
+  { 867235623835.12463, 20, 0.90000000000000036, 0.0 },
+  { 1107214478336.0000, 20, 1.0000000000000000, 0.0 },
+  { 924603483429.33521, 20, 1.1000000000000014, 0.0 },
+  { 295481874887.31995, 20, 1.2000000000000011, 0.0 },
+  { -634265763221.87231, 20, 1.3000000000000007, 0.0 },
+  { -1559402933581.5054, 20, 1.4000000000000004, 0.0 },
+  { -2085387081039.0000, 20, 1.5000000000000000, 0.0 },
+  { -1851544254412.3086, 20, 1.6000000000000014, 0.0 },
+  { -682119355279.25952, 20, 1.7000000000000011, 0.0 },
+  { 1277254793997.1128, 20, 1.8000000000000007, 0.0 },
+  { 3490463276000.5425, 20, 1.9000000000000004, 0.0 },
+  { 5080118660096.0000, 20, 2.0000000000000000, 0.0 },
+  { 5027779307352.6436, 20, 2.1000000000000014, 0.0 },
+  { 2521759315047.8071, 20, 2.2000000000000011, 0.0 },
+  { -2602375356373.2969, 20, 2.3000000000000007, 0.0 },
+  { -9442592050214.3027, 20, 2.4000000000000004, 0.0 },
+  { -15799429886575.000, 20, 2.5000000000000000, 0.0 },
+  { -18328180426561.039, 20, 2.6000000000000014, 0.0 },
+  { -13249381789941.420, 20, 2.7000000000000011, 0.0 },
+  { 2296898915036.2812, 20, 2.8000000000000007, 0.0 },
+  { 28343496696718.070, 20, 2.9000000000000004, 0.0 },
+  { 59990281399296.000, 20, 3.0000000000000000, 0.0 },
+  { 85786202388511.641, 20, 3.1000000000000014, 0.0 },
+  { 87626632986465.219, 20, 3.2000000000000011, 0.0 },
+  { 43442261337435.672, 20, 3.3000000000000007, 0.0 },
+  { -66042773886778.938, 20, 3.4000000000000004, 0.0 },
+  { -245659781875039.00, 20, 3.5000000000000000, 0.0 },
+  { -469585152350674.31, 20, 3.6000000000000014, 0.0 },
+  { -663019129550484.62, 20, 3.7000000000000011, 0.0 },
+  { -687467334428203.38, 20, 3.8000000000000007, 0.0 },
+  { -339773491011946.00, 20, 3.9000000000000004, 0.0 },
+  { 619678016654336.00, 20, 4.0000000000000000, 0.0 },
+  { 2389023282480449.0, 20, 4.1000000000000014, 0.0 },
+  { 4973623686173592.0, 20, 4.2000000000000011, 0.0 },
+  { 7940371996960741.0, 20, 4.3000000000000007, 0.0 },
+  { 10070625675125180., 20, 4.4000000000000004, 0.0 },
+  { 8939556693761121.0, 20, 4.5000000000000000, 0.0 },
+  { 519073301695404.00, 20, 4.6000000000000014, 0.0 },
+  { -20974173561010304., 20, 4.7000000000000011, 0.0 },
+  { -62555669197022528., 20, 4.8000000000000007, 0.0 },
+  { -1.3051120203565566e+17, 20, 4.9000000000000004, 0.0 },
+  { -2.2571776716382720e+17, 20, 5.0000000000000000, 0.0 },
+  { -3.3419585613348416e+17, 20, 5.1000000000000014, 0.0 },
+  { -4.0970873501577613e+17, 20, 5.2000000000000011, 0.0 },
+  { -3.4359547179069216e+17, 20, 5.3000000000000007, 0.0 },
+  { 85277679782823936., 20, 5.4000000000000004, 0.0 },
+  { 1.2907686705724293e+18, 20, 5.5000000000000000, 0.0 },
+  { 4.0046403628788460e+18, 20, 5.6000000000000014, 0.0 },
+  { 9.4673798488534159e+18, 20, 5.7000000000000011, 0.0 },
+  { 1.9713403927925973e+19, 20, 5.8000000000000007, 0.0 },
+  { 3.7990093270095905e+19, 20, 5.9000000000000004, 0.0 },
+  { 6.9364200641629315e+19, 20, 6.0000000000000000, 0.0 },
+  { 1.2158762212269156e+20, 20, 6.1000000000000014, 0.0 },
+  { 2.0631845648712086e+20, 20, 6.1999999999999993, 0.0 },
+  { 3.4082412197533902e+20, 20, 6.3000000000000007, 0.0 },
+  { 5.5033278133788620e+20, 20, 6.4000000000000021, 0.0 },
+  { 8.7124954970091579e+20, 20, 6.5000000000000000, 0.0 },
+  { 1.3555174744148243e+21, 20, 6.6000000000000014, 0.0 },
+  { 2.0764831558419680e+21, 20, 6.6999999999999993, 0.0 },
+  { 3.1367268160419775e+21, 20, 6.8000000000000007, 0.0 },
+  { 4.6784410379528606e+21, 20, 6.9000000000000021, 0.0 },
+  { 6.8970965604502329e+21, 20, 7.0000000000000000, 0.0 },
+  { 1.0059323685871368e+22, 20, 7.1000000000000014, 0.0 },
+  { 1.4526171451238465e+22, 20, 7.1999999999999993, 0.0 },
+  { 2.0783192485964666e+22, 20, 7.3000000000000007, 0.0 },
+  { 2.9479149729249434e+22, 20, 7.4000000000000021, 0.0 },
+  { 4.1475563998692745e+22, 20, 7.5000000000000000, 0.0 },
+  { 5.7909832934009378e+22, 20, 7.6000000000000014, 0.0 },
+  { 8.0275268594719286e+22, 20, 7.6999999999999993, 0.0 },
+  { 1.1052214218386286e+23, 20, 7.8000000000000007, 0.0 },
+  { 1.5118471231121759e+23, 20, 7.9000000000000021, 0.0 },
+  { 2.0554027373991249e+23, 20, 8.0000000000000000, 0.0 },
+  { 2.7780752653950703e+23, 20, 8.1000000000000014, 0.0 },
+  { 3.7339306542317994e+23, 20, 8.1999999999999993, 0.0 },
+  { 4.9919656538201190e+23, 20, 8.3000000000000007, 0.0 },
+  { 6.6398733801206421e+23, 20, 8.4000000000000021, 0.0 },
+  { 8.7886740525023878e+23, 20, 8.5000000000000000, 0.0 },
+  { 1.1578391431515869e+24, 20, 8.6000000000000014, 0.0 },
+  { 1.5184989558235974e+24, 20, 8.6999999999999993, 0.0 },
+  { 1.9828824261062853e+24, 20, 8.8000000000000007, 0.0 },
+  { 2.5784910430831597e+24, 20, 8.9000000000000021, 0.0 },
+  { 3.3395360269524137e+24, 20, 9.0000000000000000, 0.0 },
+  { 4.3084410724036123e+24, 20, 9.1000000000000014, 0.0 },
+  { 5.5376531405202538e+24, 20, 9.2000000000000028, 0.0 },
+  { 7.0918188910312152e+24, 20, 9.3000000000000007, 0.0 },
+  { 9.0503941245991948e+24, 20, 9.4000000000000021, 0.0 },
+  { 1.1510764882450827e+25, 20, 9.5000000000000000, 0.0 },
+  { 1.4591971834545491e+25, 20, 9.6000000000000014, 0.0 },
+  { 1.8439144509496166e+25, 20, 9.7000000000000028, 0.0 },
+  { 2.3228769039548404e+25, 20, 9.8000000000000007, 0.0 },
+  { 2.9174932703098967e+25, 20, 9.9000000000000021, 0.0 },
+  { 3.6536710970888030e+25, 20, 10.000000000000000, 0.0 },
 };
+const double toler006 = 2.5000000000000020e-13;
 
-// Test function for n=20.
-template<typename Tp>
-  void
-  test006()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data006)
-                          / sizeof(testcase_hermite<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::hermite(Tp(data006[i].n), Tp(data006[i].x));
-       const Tp f0 = data006[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+// Test data for n=50.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data007[201] =
+{
+  { 1.3516643049819314e+61, 50, -10.000000000000000, 0.0 },
+  { 5.8466703062266110e+60, 50, -9.9000000000000004, 0.0 },
+  { 2.4344814863741168e+60, 50, -9.8000000000000007, 0.0 },
+  { 9.6739828066585787e+59, 50, -9.6999999999999993, 0.0 },
+  { 3.6194312967780128e+59, 50, -9.5999999999999996, 0.0 },
+  { 1.2454022521696361e+59, 50, -9.5000000000000000, 0.0 },
+  { 3.7546881918013145e+58, 50, -9.4000000000000004, 0.0 },
+  { 8.6500158470917270e+57, 50, -9.3000000000000007, 0.0 },
+  { 5.3163209769527426e+56, 50, -9.1999999999999993, 0.0 },
+  { -9.7863165370930473e+56, 50, -9.0999999999999996, 0.0 },
+  { -8.0563930902368911e+56, 50, -9.0000000000000000, 0.0 },
+  { -4.3145937406321933e+56, 50, -8.9000000000000004, 0.0 },
+  { -1.8210771577645630e+56, 50, -8.8000000000000007, 0.0 },
+  { -6.0082225302289557e+55, 50, -8.6999999999999993, 0.0 },
+  { -1.2392013720948442e+55, 50, -8.5999999999999996, 0.0 },
+  { 1.5935887905806307e+54, 50, -8.5000000000000000, 0.0 },
+  { 3.4325365049909381e+54, 50, -8.4000000000000004, 0.0 },
+  { 2.2368641272300899e+54, 50, -8.3000000000000007, 0.0 },
+  { 1.0009712198862341e+54, 50, -8.1999999999999993, 0.0 },
+  { 3.0699480272357337e+53, 50, -8.0999999999999996, 0.0 },
+  { 2.9492797132685063e+52, 50, -8.0000000000000000, 0.0 },
+  { -3.9982544106300062e+52, 50, -7.9000000000000004, 0.0 },
+  { -3.5678031330023779e+52, 50, -7.7999999999999998, 0.0 },
+  { -1.8076371748762319e+52, 50, -7.6999999999999993, 0.0 },
+  { -5.7887622198708925e+51, 50, -7.5999999999999996, 0.0 },
+  { -3.5808467693113330e+50, 50, -7.5000000000000000, 0.0 },
+  { 1.0219511166806405e+51, 50, -7.4000000000000004, 0.0 },
+  { 8.4241263694549560e+50, 50, -7.2999999999999998, 0.0 },
+  { 3.9143899315095070e+50, 50, -7.1999999999999993, 0.0 },
+  { 9.3178966245756654e+49, 50, -7.0999999999999996, 0.0 },
+  { -2.4714855983436561e+49, 50, -7.0000000000000000, 0.0 },
+  { -4.1428217272044600e+49, 50, -6.9000000000000004, 0.0 },
+  { -2.4864980414057334e+49, 50, -6.7999999999999998, 0.0 },
+  { -8.0684355476446876e+48, 50, -6.6999999999999993, 0.0 },
+  { 4.2529238530179841e+47, 50, -6.5999999999999996, 0.0 },
+  { 2.4709663739849681e+48, 50, -6.5000000000000000, 0.0 },
+  { 1.7500305481204125e+48, 50, -6.4000000000000004, 0.0 },
+  { 6.3834558285146007e+47, 50, -6.2999999999999998, 0.0 },
+  { -1.1477672402384868e+46, 50, -6.1999999999999993, 0.0 },
+  { -1.9304630401841983e+47, 50, -6.0999999999999996, 0.0 },
+  { -1.4355266959903589e+47, 50, -6.0000000000000000, 0.0 },
+  { -5.1482200905565497e+46, 50, -5.8999999999999995, 0.0 },
+  { 4.6577356827463283e+45, 50, -5.7999999999999998, 0.0 },
+  { 1.9676012349652066e+46, 50, -5.7000000000000002, 0.0 },
+  { 1.3630554018675846e+46, 50, -5.5999999999999996, 0.0 },
+  { 4.0920495328093750e+45, 50, -5.5000000000000000, 0.0 },
+  { -1.3680638882145570e+45, 50, -5.3999999999999995, 0.0 },
+  { -2.4465265559935436e+45, 50, -5.2999999999999998, 0.0 },
+  { -1.4270495629649337e+45, 50, -5.1999999999999993, 0.0 },
+  { -2.4845518743338381e+44, 50, -5.0999999999999996, 0.0 },
+  { 3.1953926721271990e+44, 50, -5.0000000000000000, 0.0 },
+  { 3.4169399444879477e+44, 50, -4.8999999999999995, 0.0 },
+  { 1.4896819114978755e+44, 50, -4.7999999999999998, 0.0 },
+  { -1.3078430866969463e+43, 50, -4.6999999999999993, 0.0 },
+  { -6.8449168639700716e+43, 50, -4.5999999999999996, 0.0 },
+  { -4.9181639709997461e+43, 50, -4.5000000000000000, 0.0 },
+  { -1.1434943490344838e+43, 50, -4.3999999999999995, 0.0 },
+  { 1.1214652543461432e+43, 50, -4.2999999999999998, 0.0 },
+  { 1.3843548994480566e+43, 50, -4.1999999999999993, 0.0 },
+  { 6.3349790205303262e+42, 50, -4.0999999999999996, 0.0 },
+  { -9.5599640670553907e+41, 50, -4.0000000000000000, 0.0 },
+  { -3.6202558158287989e+42, 50, -3.8999999999999995, 0.0 },
+  { -2.5206461734624493e+42, 50, -3.7999999999999998, 0.0 },
+  { -3.7818051510730675e+41, 50, -3.6999999999999993, 0.0 },
+  { 8.8921371165335050e+41, 50, -3.5999999999999996, 0.0 },
+  { 9.2055485763852770e+41, 50, -3.5000000000000000, 0.0 },
+  { 3.2535765707282432e+41, 50, -3.3999999999999995, 0.0 },
+  { -1.9358941418244578e+41, 50, -3.2999999999999998, 0.0 },
+  { -3.3076282847915616e+41, 50, -3.1999999999999993, 0.0 },
+  { -1.7764977066639160e+41, 50, -3.0999999999999996, 0.0 },
+  { 2.6751882008697154e+40, 50, -3.0000000000000000, 0.0 },
+  { 1.2025382369996071e+41, 50, -2.8999999999999995, 0.0 },
+  { 8.8383035103557973e+40, 50, -2.7999999999999998, 0.0 },
+  { 7.7733606479635628e+39, 50, -2.6999999999999993, 0.0 },
+  { -4.4696811758713757e+40, 50, -2.5999999999999996, 0.0 },
+  { -4.3715062488963453e+40, 50, -2.5000000000000000, 0.0 },
+  { -1.1390080390574979e+40, 50, -2.3999999999999995, 0.0 },
+  { 1.6938519751181342e+40, 50, -2.2999999999999998, 0.0 },
+  { 2.2284509952956162e+40, 50, -2.1999999999999993, 0.0 },
+  { 9.0967994280570531e+39, 50, -2.0999999999999996, 0.0 },
+  { -6.4126677997472978e+39, 50, -2.0000000000000000, 0.0 },
+  { -1.1926839454034341e+40, 50, -1.9000000000000004, 0.0 },
+  { -6.5436654274697603e+39, 50, -1.7999999999999989, 0.0 },
+  { 2.2779499542550411e+39, 50, -1.6999999999999993, 0.0 },
+  { 6.7720530889699639e+39, 50, -1.5999999999999996, 0.0 },
+  { 4.6884851188034300e+39, 50, -1.5000000000000000, 0.0 },
+  { -5.9005001052557463e+38, 50, -1.4000000000000004, 0.0 },
+  { -4.1028320210430837e+39, 50, -1.2999999999999989, 0.0 },
+  { -3.4780049977083965e+39, 50, -1.1999999999999993, 0.0 },
+  { -1.3484918476373692e+38, 50, -1.0999999999999996, 0.0 },
+  { 2.6586815431645456e+39, 50, -1.0000000000000000, 0.0 },
+  { 2.7225429473661429e+39, 50, -0.90000000000000036, 0.0 },
+  { 4.7785441024946841e+38, 50, -0.79999999999999893, 0.0 },
+  { -1.8416784378790159e+39, 50, -0.69999999999999929, 0.0 },
+  { -2.2725918816693132e+39, 50, -0.59999999999999964, 0.0 },
+  { -6.7948375014926916e+38, 50, -0.50000000000000000, 0.0 },
+  { 1.3581645858906036e+39, 50, -0.39999999999999858, 0.0 },
+  { 2.0349661043040443e+39, 50, -0.29999999999999893, 0.0 },
+  { 8.5049248815817037e+38, 50, -0.19999999999999929, 0.0 },
+  { -1.0564542132990048e+39, 50, -0.099999999999999645, 0.0 },
+  { -1.9607814681608194e+39, 50, 0.0000000000000000, 0.0 },
+  { -1.0564542132989758e+39, 50, 0.10000000000000142, 0.0 },
+  { 8.5049248815820240e+38, 50, 0.20000000000000107, 0.0 },
+  { 2.0349661043040497e+39, 50, 0.30000000000000071, 0.0 },
+  { 1.3581645858905750e+39, 50, 0.40000000000000036, 0.0 },
+  { -6.7948375014926916e+38, 50, 0.50000000000000000, 0.0 },
+  { -2.2725918816693268e+39, 50, 0.60000000000000142, 0.0 },
+  { -1.8416784378789875e+39, 50, 0.70000000000000107, 0.0 },
+  { 4.7785441024951729e+38, 50, 0.80000000000000071, 0.0 },
+  { 2.7225429473661429e+39, 50, 0.90000000000000036, 0.0 },
+  { 2.6586815431645456e+39, 50, 1.0000000000000000, 0.0 },
+  { -1.3484918476380069e+38, 50, 1.1000000000000014, 0.0 },
+  { -3.4780049977084394e+39, 50, 1.2000000000000011, 0.0 },
+  { -4.1028320210430589e+39, 50, 1.3000000000000007, 0.0 },
+  { -5.9005001052557463e+38, 50, 1.4000000000000004, 0.0 },
+  { 4.6884851188034300e+39, 50, 1.5000000000000000, 0.0 },
+  { 6.7720530889699470e+39, 50, 1.6000000000000014, 0.0 },
+  { 2.2779499542549072e+39, 50, 1.7000000000000011, 0.0 },
+  { -6.5436654274699114e+39, 50, 1.8000000000000007, 0.0 },
+  { -1.1926839454034341e+40, 50, 1.9000000000000004, 0.0 },
+  { -6.4126677997472978e+39, 50, 2.0000000000000000, 0.0 },
+  { 9.0967994280573626e+39, 50, 2.1000000000000014, 0.0 },
+  { 2.2284509952956273e+40, 50, 2.2000000000000011, 0.0 },
+  { 1.6938519751181172e+40, 50, 2.3000000000000007, 0.0 },
+  { -1.1390080390575289e+40, 50, 2.4000000000000004, 0.0 },
+  { -4.3715062488963453e+40, 50, 2.5000000000000000, 0.0 },
+  { -4.4696811758713303e+40, 50, 2.6000000000000014, 0.0 },
+  { 7.7733606479648733e+39, 50, 2.7000000000000011, 0.0 },
+  { 8.8383035103558611e+40, 50, 2.8000000000000007, 0.0 },
+  { 1.2025382369996052e+41, 50, 2.9000000000000004, 0.0 },
+  { 2.6751882008697154e+40, 50, 3.0000000000000000, 0.0 },
+  { -1.7764977066639554e+41, 50, 3.1000000000000014, 0.0 },
+  { -3.3076282847915716e+41, 50, 3.2000000000000011, 0.0 },
+  { -1.9358941418244260e+41, 50, 3.3000000000000007, 0.0 },
+  { 3.2535765707283020e+41, 50, 3.4000000000000004, 0.0 },
+  { 9.2055485763852770e+41, 50, 3.5000000000000000, 0.0 },
+  { 8.8921371165333905e+41, 50, 3.6000000000000014, 0.0 },
+  { -3.7818051510734018e+41, 50, 3.7000000000000011, 0.0 },
+  { -2.5206461734624660e+42, 50, 3.8000000000000007, 0.0 },
+  { -3.6202558158287927e+42, 50, 3.9000000000000004, 0.0 },
+  { -9.5599640670553907e+41, 50, 4.0000000000000000, 0.0 },
+  { 6.3349790205304773e+42, 50, 4.1000000000000014, 0.0 },
+  { 1.3843548994480653e+43, 50, 4.2000000000000011, 0.0 },
+  { 1.1214652543461340e+43, 50, 4.3000000000000007, 0.0 },
+  { -1.1434943490345182e+43, 50, 4.4000000000000004, 0.0 },
+  { -4.9181639709997461e+43, 50, 4.5000000000000000, 0.0 },
+  { -6.8449168639700617e+43, 50, 4.6000000000000014, 0.0 },
+  { -1.3078430866967542e+43, 50, 4.7000000000000011, 0.0 },
+  { 1.4896819114978953e+44, 50, 4.8000000000000007, 0.0 },
+  { 3.4169399444879600e+44, 50, 4.9000000000000004, 0.0 },
+  { 3.1953926721271990e+44, 50, 5.0000000000000000, 0.0 },
+  { -2.4845518743340037e+44, 50, 5.1000000000000014, 0.0 },
+  { -1.4270495629649556e+45, 50, 5.2000000000000011, 0.0 },
+  { -2.4465265559935458e+45, 50, 5.3000000000000007, 0.0 },
+  { -1.3680638882145392e+45, 50, 5.4000000000000004, 0.0 },
+  { 4.0920495328093750e+45, 50, 5.5000000000000000, 0.0 },
+  { 1.3630554018676023e+46, 50, 5.6000000000000014, 0.0 },
+  { 1.9676012349652035e+46, 50, 5.7000000000000011, 0.0 },
+  { 4.6577356827460393e+45, 50, 5.8000000000000007, 0.0 },
+  { -5.1482200905566146e+46, 50, 5.9000000000000004, 0.0 },
+  { -1.4355266959903589e+47, 50, 6.0000000000000000, 0.0 },
+  { -1.9304630401841966e+47, 50, 6.1000000000000014, 0.0 },
+  { -1.1477672402384868e+46, 50, 6.1999999999999993, 0.0 },
+  { 6.3834558285146981e+47, 50, 6.3000000000000007, 0.0 },
+  { 1.7500305481204346e+48, 50, 6.4000000000000021, 0.0 },
+  { 2.4709663739849681e+48, 50, 6.5000000000000000, 0.0 },
+  { 4.2529238530171793e+47, 50, 6.6000000000000014, 0.0 },
+  { -8.0684355476446876e+48, 50, 6.6999999999999993, 0.0 },
+  { -2.4864980414057495e+49, 50, 6.8000000000000007, 0.0 },
+  { -4.1428217272044745e+49, 50, 6.9000000000000021, 0.0 },
+  { -2.4714855983436561e+49, 50, 7.0000000000000000, 0.0 },
+  { 9.3178966245760310e+49, 50, 7.1000000000000014, 0.0 },
+  { 3.9143899315095070e+50, 50, 7.1999999999999993, 0.0 },
+  { 8.4241263694549925e+50, 50, 7.3000000000000007, 0.0 },
+  { 1.0219511166806373e+51, 50, 7.4000000000000021, 0.0 },
+  { -3.5808467693113330e+50, 50, 7.5000000000000000, 0.0 },
+  { -5.7887622198710268e+51, 50, 7.6000000000000014, 0.0 },
+  { -1.8076371748762319e+52, 50, 7.6999999999999993, 0.0 },
+  { -3.5678031330023971e+52, 50, 7.8000000000000007, 0.0 },
+  { -3.9982544106299987e+52, 50, 7.9000000000000021, 0.0 },
+  { 2.9492797132685063e+52, 50, 8.0000000000000000, 0.0 },
+  { 3.0699480272358086e+53, 50, 8.1000000000000014, 0.0 },
+  { 1.0009712198862341e+54, 50, 8.1999999999999993, 0.0 },
+  { 2.2368641272300899e+54, 50, 8.3000000000000007, 0.0 },
+  { 3.4325365049909476e+54, 50, 8.4000000000000021, 0.0 },
+  { 1.5935887905806307e+54, 50, 8.5000000000000000, 0.0 },
+  { -1.2392013720948937e+55, 50, 8.6000000000000014, 0.0 },
+  { -6.0082225302289557e+55, 50, 8.6999999999999993, 0.0 },
+  { -1.8210771577645630e+56, 50, 8.8000000000000007, 0.0 },
+  { -4.3145937406322482e+56, 50, 8.9000000000000021, 0.0 },
+  { -8.0563930902368911e+56, 50, 9.0000000000000000, 0.0 },
+  { -9.7863165370930194e+56, 50, 9.1000000000000014, 0.0 },
+  { 5.3163209769540389e+56, 50, 9.2000000000000028, 0.0 },
+  { 8.6500158470917270e+57, 50, 9.3000000000000007, 0.0 },
+  { 3.7546881918013903e+58, 50, 9.4000000000000021, 0.0 },
+  { 1.2454022521696361e+59, 50, 9.5000000000000000, 0.0 },
+  { 3.6194312967780793e+59, 50, 9.6000000000000014, 0.0 },
+  { 9.6739828066589016e+59, 50, 9.7000000000000028, 0.0 },
+  { 2.4344814863741168e+60, 50, 9.8000000000000007, 0.0 },
+  { 5.8466703062266974e+60, 50, 9.9000000000000021, 0.0 },
+  { 1.3516643049819314e+61, 50, 10.000000000000000, 0.0 },
+};
+const double toler007 = 2.5000000000000020e-13;
+
+// Test data for n=100.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data008[201] =
+{
+  { -1.8738689223256612e+115, 100, -10.000000000000000, 0.0 },
+  { -4.4232904120311186e+114, 100, -9.9000000000000004, 0.0 },
+  { 8.3761676654305186e+113, 100, -9.8000000000000007, 0.0 },
+  { 9.4857435427570856e+113, 100, -9.6999999999999993, 0.0 },
+  { 2.4904626130429828e+113, 100, -9.5999999999999996, 0.0 },
+  { -4.2265051766934789e+112, 100, -9.5000000000000000, 0.0 },
+  { -5.3374224541142079e+112, 100, -9.4000000000000004, 0.0 },
+  { -1.3977488190034162e+112, 100, -9.3000000000000007, 0.0 },
+  { 2.9686037583393142e+111, 100, -9.1999999999999993, 0.0 },
+  { 3.3341330166544008e+111, 100, -9.0999999999999996, 0.0 },
+  { 7.7294136683043515e+110, 100, -9.0000000000000000, 0.0 },
+  { -2.6071876743328352e+110, 100, -8.9000000000000004, 0.0 },
+  { -2.2669773300293168e+110, 100, -8.8000000000000007, 0.0 },
+  { -3.8930624477368766e+109, 100, -8.6999999999999993, 0.0 },
+  { 2.5386102824684956e+109, 100, -8.5999999999999996, 0.0 },
+  { 1.6203702280499544e+109, 100, -8.5000000000000000, 0.0 },
+  { 1.2481735250539652e+108, 100, -8.4000000000000004, 0.0 },
+  { -2.5611278359589723e+108, 100, -8.3000000000000007, 0.0 },
+  { -1.1534178973583771e+108, 100, -8.1999999999999993, 0.0 },
+  { 8.4932594446954126e+106, 100, -8.0999999999999996, 0.0 },
+  { 2.5761505535443451e+107, 100, -8.0000000000000000, 0.0 },
+  { 7.3445622927437730e+106, 100, -7.9000000000000004, 0.0 },
+  { -2.7252309851017323e+106, 100, -7.7999999999999998, 0.0 },
+  { -2.4850432648123868e+106, 100, -7.6999999999999993, 0.0 },
+  { -2.7486638813238851e+105, 100, -7.5999999999999996, 0.0 },
+  { 4.4772364475394960e+105, 100, -7.5000000000000000, 0.0 },
+  { 2.1375121759800508e+105, 100, -7.4000000000000004, 0.0 },
+  { -2.9237691057265876e+104, 100, -7.2999999999999998, 0.0 },
+  { -5.9348804074874565e+104, 100, -7.1999999999999993, 0.0 },
+  { -1.2947583568692734e+104, 100, -7.0999999999999996, 0.0 },
+  { 1.0002273523275075e+104, 100, -7.0000000000000000, 0.0 },
+  { 6.4900499886057735e+103, 100, -6.9000000000000004, 0.0 },
+  { -3.7817730019124298e+102, 100, -6.7999999999999998, 0.0 },
+  { -1.7849709684883083e+103, 100, -6.6999999999999993, 0.0 },
+  { -4.8039047085580619e+102, 100, -6.5999999999999996, 0.0 },
+  { 3.2072472002047670e+102, 100, -6.5000000000000000, 0.0 },
+  { 2.3341289432999226e+102, 100, -6.4000000000000004, 0.0 },
+  { -1.4587350659146165e+101, 100, -6.2999999999999998, 0.0 },
+  { -7.0672139150705246e+101, 100, -6.1999999999999993, 0.0 },
+  { -1.8039133351601998e+101, 100, -6.0999999999999996, 0.0 },
+  { 1.5170693933260738e+101, 100, -6.0000000000000000, 0.0 },
+  { 1.0141407690966841e+101, 100, -5.8999999999999995, 0.0 },
+  { -1.5140717605507886e+100, 100, -5.7999999999999998, 0.0 },
+  { -3.6379102593330533e+100, 100, -5.7000000000000002, 0.0 },
+  { -6.2933057672779134e+99, 100, -5.5999999999999996, 0.0 },
+  { 9.9309186425970402e+99, 100, -5.5000000000000000, 0.0 },
+  { 5.0935670879055936e+99, 100, -5.3999999999999995, 0.0 },
+  { -1.8337906983006129e+99, 100, -5.2999999999999998, 0.0 },
+  { -2.3096466887887237e+99, 100, -5.1999999999999993, 0.0 },
+  { -4.0259235416602546e+97, 100, -5.0999999999999996, 0.0 },
+  { 8.1931937130591466e+98, 100, -5.0000000000000000, 0.0 },
+  { 2.5601172475776284e+98, 100, -4.8999999999999995, 0.0 },
+  { -2.3193021196802698e+98, 100, -4.7999999999999998, 0.0 },
+  { -1.6545238014142650e+98, 100, -4.6999999999999993, 0.0 },
+  { 4.2440218943299170e+97, 100, -4.5999999999999996, 0.0 },
+  { 7.8073853756187101e+97, 100, -4.5000000000000000, 0.0 },
+  { 5.2136163919270720e+96, 100, -4.3999999999999995, 0.0 },
+  { -3.0837503404959950e+97, 100, -4.2999999999999998, 0.0 },
+  { -1.0988290456447506e+97, 100, -4.1999999999999993, 0.0 },
+  { 1.0173847230741884e+97, 100, -4.0999999999999996, 0.0 },
+  { 7.7070682747643550e+96, 100, -4.0000000000000000, 0.0 },
+  { -2.3947326745293985e+96, 100, -3.8999999999999995, 0.0 },
+  { -4.1993887070961596e+96, 100, -3.7999999999999998, 0.0 },
+  { -5.5521768050503009e+94, 100, -3.6999999999999993, 0.0 },
+  { 1.9852724296241180e+96, 100, -3.5999999999999996, 0.0 },
+  { 5.7841213444838915e+95, 100, -3.5000000000000000, 0.0 },
+  { -8.2433116644948985e+95, 100, -3.3999999999999995, 0.0 },
+  { -5.2035951331058195e+95, 100, -3.2999999999999998, 0.0 },
+  { 2.8212012454566478e+95, 100, -3.1999999999999993, 0.0 },
+  { 3.5161870090563867e+95, 100, -3.0999999999999996, 0.0 },
+  { -5.5084542871196523e+94, 100, -3.0000000000000000, 0.0 },
+  { -2.0784160746797530e+95, 100, -2.8999999999999995, 0.0 },
+  { -2.6058116248679496e+94, 100, -2.7999999999999998, 0.0 },
+  { 1.1147132226581881e+95, 100, -2.6999999999999993, 0.0 },
+  { 4.5607706742532875e+94, 100, -2.5999999999999996, 0.0 },
+  { -5.3758761713337664e+94, 100, -2.5000000000000000, 0.0 },
+  { -4.2303228932575310e+94, 100, -2.3999999999999995, 0.0 },
+  { 2.1691501564685499e+94, 100, -2.2999999999999998, 0.0 },
+  { 3.2602488340116774e+94, 100, -2.1999999999999993, 0.0 },
+  { -5.0527155039787607e+93, 100, -2.0999999999999996, 0.0 },
+  { -2.2785574311661325e+94, 100, -2.0000000000000000, 0.0 },
+  { -2.8549527653152903e+93, 100, -1.9000000000000004, 0.0 },
+  { 1.4787573463714434e+94, 100, -1.7999999999999989, 0.0 },
+  { 6.0554070654771248e+93, 100, -1.6999999999999993, 0.0 },
+  { -8.8496828346970978e+93, 100, -1.5999999999999996, 0.0 },
+  { -6.8402151897169509e+93, 100, -1.5000000000000000, 0.0 },
+  { 4.6555468819923166e+93, 100, -1.4000000000000004, 0.0 },
+  { 6.4625437128322607e+93, 100, -1.2999999999999989, 0.0 },
+  { -1.7820042440391653e+93, 100, -1.1999999999999993, 0.0 },
+  { -5.5814393347235886e+93, 100, -1.0999999999999996, 0.0 },
+  { -1.4487067293379347e+92, 100, -1.0000000000000000, 0.0 },
+  { 4.5268398678911204e+93, 100, -0.90000000000000036, 0.0 },
+  { 1.4120762149477404e+93, 100, -0.79999999999999893, 0.0 },
+  { -3.4510765981144258e+93, 100, -0.69999999999999929, 0.0 },
+  { -2.2242581581553176e+93, 100, -0.59999999999999964, 0.0 },
+  { 2.4129827902061037e+93, 100, -0.50000000000000000, 0.0 },
+  { 2.7195429139752020e+93, 100, -0.39999999999999858, 0.0 },
+  { -1.4235309630837636e+93, 100, -0.29999999999999893, 0.0 },
+  { -2.9850618739468043e+93, 100, -0.19999999999999929, 0.0 },
+  { 4.7017027479251074e+92, 100, -0.099999999999999645, 0.0 },
+  { 3.0685187562549660e+93, 100, 0.0000000000000000, 0.0 },
+  { 4.7017027479243444e+92, 100, 0.10000000000000142, 0.0 },
+  { -2.9850618739468293e+93, 100, 0.20000000000000107, 0.0 },
+  { -1.4235309630836904e+93, 100, 0.30000000000000071, 0.0 },
+  { 2.7195429139752497e+93, 100, 0.40000000000000036, 0.0 },
+  { 2.4129827902061037e+93, 100, 0.50000000000000000, 0.0 },
+  { -2.2242581581553936e+93, 100, 0.60000000000000142, 0.0 },
+  { -3.4510765981143827e+93, 100, 0.70000000000000107, 0.0 },
+  { 1.4120762149478435e+93, 100, 0.80000000000000071, 0.0 },
+  { 4.5268398678911204e+93, 100, 0.90000000000000036, 0.0 },
+  { -1.4487067293379347e+92, 100, 1.0000000000000000, 0.0 },
+  { -5.5814393347236145e+93, 100, 1.1000000000000014, 0.0 },
+  { -1.7820042440390210e+93, 100, 1.2000000000000011, 0.0 },
+  { 6.4625437128323579e+93, 100, 1.3000000000000007, 0.0 },
+  { 4.6555468819923166e+93, 100, 1.4000000000000004, 0.0 },
+  { -6.8402151897169509e+93, 100, 1.5000000000000000, 0.0 },
+  { -8.8496828346969644e+93, 100, 1.6000000000000014, 0.0 },
+  { 6.0554070654774249e+93, 100, 1.7000000000000011, 0.0 },
+  { 1.4787573463714363e+94, 100, 1.8000000000000007, 0.0 },
+  { -2.8549527653152903e+93, 100, 1.9000000000000004, 0.0 },
+  { -2.2785574311661325e+94, 100, 2.0000000000000000, 0.0 },
+  { -5.0527155039780687e+93, 100, 2.1000000000000014, 0.0 },
+  { 3.2602488340117204e+94, 100, 2.2000000000000011, 0.0 },
+  { 2.1691501564685076e+94, 100, 2.3000000000000007, 0.0 },
+  { -4.2303228932575769e+94, 100, 2.4000000000000004, 0.0 },
+  { -5.3758761713337664e+94, 100, 2.5000000000000000, 0.0 },
+  { 4.5607706742535083e+94, 100, 2.6000000000000014, 0.0 },
+  { 1.1147132226581835e+95, 100, 2.7000000000000011, 0.0 },
+  { -2.6058116248681564e+94, 100, 2.8000000000000007, 0.0 },
+  { -2.0784160746797610e+95, 100, 2.9000000000000004, 0.0 },
+  { -5.5084542871196523e+94, 100, 3.0000000000000000, 0.0 },
+  { 3.5161870090564436e+95, 100, 3.1000000000000014, 0.0 },
+  { 2.8212012454565588e+95, 100, 3.2000000000000011, 0.0 },
+  { -5.2035951331058918e+95, 100, 3.3000000000000007, 0.0 },
+  { -8.2433116644948570e+95, 100, 3.4000000000000004, 0.0 },
+  { 5.7841213444838915e+95, 100, 3.5000000000000000, 0.0 },
+  { 1.9852724296241191e+96, 100, 3.6000000000000014, 0.0 },
+  { -5.5521768050576049e+94, 100, 3.7000000000000011, 0.0 },
+  { -4.1993887070961795e+96, 100, 3.8000000000000007, 0.0 },
+  { -2.3947326745293331e+96, 100, 3.9000000000000004, 0.0 },
+  { 7.7070682747643550e+96, 100, 4.0000000000000000, 0.0 },
+  { 1.0173847230741732e+97, 100, 4.1000000000000014, 0.0 },
+  { -1.0988290456448056e+97, 100, 4.2000000000000011, 0.0 },
+  { -3.0837503404959957e+97, 100, 4.3000000000000007, 0.0 },
+  { 5.2136163919277588e+96, 100, 4.4000000000000004, 0.0 },
+  { 7.8073853756187101e+97, 100, 4.5000000000000000, 0.0 },
+  { 4.2440218943296749e+97, 100, 4.6000000000000014, 0.0 },
+  { -1.6545238014143033e+98, 100, 4.7000000000000011, 0.0 },
+  { -2.3193021196802549e+98, 100, 4.8000000000000007, 0.0 },
+  { 2.5601172475776894e+98, 100, 4.9000000000000004, 0.0 },
+  { 8.1931937130591466e+98, 100, 5.0000000000000000, 0.0 },
+  { -4.0259235416636422e+97, 100, 5.1000000000000014, 0.0 },
+  { -2.3096466887887553e+99, 100, 5.2000000000000011, 0.0 },
+  { -1.8337906983005823e+99, 100, 5.3000000000000007, 0.0 },
+  { 5.0935670879056567e+99, 100, 5.4000000000000004, 0.0 },
+  { 9.9309186425970402e+99, 100, 5.5000000000000000, 0.0 },
+  { -6.2933057672784165e+99, 100, 5.6000000000000014, 0.0 },
+  { -3.6379102593330720e+100, 100, 5.7000000000000011, 0.0 },
+  { -1.5140717605507249e+100, 100, 5.8000000000000007, 0.0 },
+  { 1.0141407690966954e+101, 100, 5.9000000000000004, 0.0 },
+  { 1.5170693933260738e+101, 100, 6.0000000000000000, 0.0 },
+  { -1.8039133351602961e+101, 100, 6.1000000000000014, 0.0 },
+  { -7.0672139150705246e+101, 100, 6.1999999999999993, 0.0 },
+  { -1.4587350659144549e+101, 100, 6.3000000000000007, 0.0 },
+  { 2.3341289432999758e+102, 100, 6.4000000000000021, 0.0 },
+  { 3.2072472002047670e+102, 100, 6.5000000000000000, 0.0 },
+  { -4.8039047085582927e+102, 100, 6.6000000000000014, 0.0 },
+  { -1.7849709684883083e+103, 100, 6.6999999999999993, 0.0 },
+  { -3.7817730019120996e+102, 100, 6.8000000000000007, 0.0 },
+  { 6.4900499886059199e+103, 100, 6.9000000000000021, 0.0 },
+  { 1.0002273523275075e+104, 100, 7.0000000000000000, 0.0 },
+  { -1.2947583568693485e+104, 100, 7.1000000000000014, 0.0 },
+  { -5.9348804074874565e+104, 100, 7.1999999999999993, 0.0 },
+  { -2.9237691057264679e+104, 100, 7.3000000000000007, 0.0 },
+  { 2.1375121759801080e+105, 100, 7.4000000000000021, 0.0 },
+  { 4.4772364475394960e+105, 100, 7.5000000000000000, 0.0 },
+  { -2.7486638813241244e+105, 100, 7.6000000000000014, 0.0 },
+  { -2.4850432648123868e+106, 100, 7.6999999999999993, 0.0 },
+  { -2.7252309851017070e+106, 100, 7.8000000000000007, 0.0 },
+  { 7.3445622927440321e+106, 100, 7.9000000000000021, 0.0 },
+  { 2.5761505535443451e+107, 100, 8.0000000000000000, 0.0 },
+  { 8.4932594446944218e+106, 100, 8.1000000000000014, 0.0 },
+  { -1.1534178973583771e+108, 100, 8.1999999999999993, 0.0 },
+  { -2.5611278359589723e+108, 100, 8.3000000000000007, 0.0 },
+  { 1.2481735250541195e+108, 100, 8.4000000000000021, 0.0 },
+  { 1.6203702280499544e+109, 100, 8.5000000000000000, 0.0 },
+  { 2.5386102824684747e+109, 100, 8.6000000000000014, 0.0 },
+  { -3.8930624477368766e+109, 100, 8.6999999999999993, 0.0 },
+  { -2.2669773300293168e+110, 100, 8.8000000000000007, 0.0 },
+  { -2.6071876743327728e+110, 100, 8.9000000000000021, 0.0 },
+  { 7.7294136683043515e+110, 100, 9.0000000000000000, 0.0 },
+  { 3.3341330166544429e+111, 100, 9.1000000000000014, 0.0 },
+  { 2.9686037583391038e+111, 100, 9.2000000000000028, 0.0 },
+  { -1.3977488190034162e+112, 100, 9.3000000000000007, 0.0 },
+  { -5.3374224541142660e+112, 100, 9.4000000000000021, 0.0 },
+  { -4.2265051766934789e+112, 100, 9.5000000000000000, 0.0 },
+  { 2.4904626130430740e+113, 100, 9.6000000000000014, 0.0 },
+  { 9.4857435427573289e+113, 100, 9.7000000000000028, 0.0 },
+  { 8.3761676654305186e+113, 100, 9.8000000000000007, 0.0 },
+  { -4.4232904120312991e+114, 100, 9.9000000000000021, 0.0 },
+  { -1.8738689223256612e+115, 100, 10.000000000000000, 0.0 },
+};
+const double toler008 = 2.5000000000000020e-13;
+//  hermite
+
+// Test data for n=8.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data009[9] =
+{
+  { 5324432.0000000000, 8, 4.0000000000000000, 0.0 },
+  { 279702672.00000000, 8, 6.0000000000000000, 0.0 },
+  { 3409634960.0000000, 8, 8.0000000000000000, 0.0 },
+  { 22149057680.000000, 8, 10.000000000000000, 0.0 },
+  { 99650305680.000000, 8, 12.000000000000000, 0.0 },
+  { 1040259450512.0000, 8, 16.000000000000000, 0.0 },
+  { 6326369025680.0000, 8, 20.000000000000000, 0.0 },
+  { 9944083966401680.0, 8, 50.000000000000000, 0.0 },
+  { 2.5564173438656015e+18, 8, 100.00000000000000, 0.0 },
+};
+const double toler009 = 2.5000000000000020e-13;
+
+// Test data for n=18.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data010[9] =
+{
+  { 54268892282368.000, 18, 4.0000000000000000, 0.0 },
+  { 1.3505976034605665e+18, 18, 6.0000000000000000, 0.0 },
+  { 1.1719308290279925e+21, 18, 8.0000000000000000, 0.0 },
+  { 1.1336099533194677e+23, 18, 10.000000000000000, 0.0 },
+  { 3.9670688759298557e+24, 18, 12.000000000000000, 0.0 },
+  { 9.0887304967960375e+26, 18, 16.000000000000000, 0.0 },
+  { 5.6525959758874797e+28, 18, 20.000000000000000, 0.0 },
+  { 9.6976497965812384e+35, 18, 50.000000000000000, 0.0 },
+  { 2.6014460548774723e+41, 18, 100.00000000000000, 0.0 },
+};
+const double toler010 = 2.5000000000000020e-13;
+
+// Test data for n=32.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data011[9] =
+{
+  { 3.4488006171532706e+25, 32, 4.0000000000000000, 0.0 },
+  { 8.6646829675369123e+29, 32, 6.0000000000000000, 0.0 },
+  { 1.2445939522057109e+36, 32, 8.0000000000000000, 0.0 },
+  { 2.1381589300683108e+40, 32, 10.000000000000000, 0.0 },
+  { 2.0979395756455302e+43, 32, 12.000000000000000, 0.0 },
+  { 5.2024646069361253e+47, 32, 16.000000000000000, 0.0 },
+  { 9.6759233738497726e+50, 32, 20.000000000000000, 0.0 },
+  { 9.0500820467530134e+63, 32, 50.000000000000000, 0.0 },
+  { 4.1896031916819710e+73, 32, 100.00000000000000, 0.0 },
+};
+const double toler011 = 2.5000000000000020e-13;
 
 // Test data for n=50.
-// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
-testcase_hermite<double>
-data007[] =
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data012[9] =
 {
-  { 1.3516643049819314e+61, 50, -10.000000000000000 },
-  { 5.8466703062266110e+60, 50, -9.9000000000000004 },
-  { 2.4344814863741168e+60, 50, -9.8000000000000007 },
-  { 9.6739828066585787e+59, 50, -9.6999999999999993 },
-  { 3.6194312967780128e+59, 50, -9.5999999999999996 },
-  { 1.2454022521696361e+59, 50, -9.5000000000000000 },
-  { 3.7546881918013145e+58, 50, -9.4000000000000004 },
-  { 8.6500158470917270e+57, 50, -9.3000000000000007 },
-  { 5.3163209769527426e+56, 50, -9.1999999999999993 },
-  { -9.7863165370930473e+56, 50, -9.0999999999999996 },
-  { -8.0563930902368911e+56, 50, -9.0000000000000000 },
-  { -4.3145937406321933e+56, 50, -8.9000000000000004 },
-  { -1.8210771577645630e+56, 50, -8.8000000000000007 },
-  { -6.0082225302289557e+55, 50, -8.6999999999999993 },
-  { -1.2392013720948442e+55, 50, -8.5999999999999996 },
-  { 1.5935887905806307e+54, 50, -8.5000000000000000 },
-  { 3.4325365049909381e+54, 50, -8.4000000000000004 },
-  { 2.2368641272300899e+54, 50, -8.3000000000000007 },
-  { 1.0009712198862341e+54, 50, -8.1999999999999993 },
-  { 3.0699480272357337e+53, 50, -8.0999999999999996 },
-  { 2.9492797132685063e+52, 50, -8.0000000000000000 },
-  { -3.9982544106300062e+52, 50, -7.9000000000000004 },
-  { -3.5678031330023779e+52, 50, -7.7999999999999998 },
-  { -1.8076371748762468e+52, 50, -7.7000000000000002 },
-  { -5.7887622198708925e+51, 50, -7.5999999999999996 },
-  { -3.5808467693113330e+50, 50, -7.5000000000000000 },
-  { 1.0219511166806405e+51, 50, -7.4000000000000004 },
-  { 8.4241263694549560e+50, 50, -7.2999999999999998 },
-  { 3.9143899315095369e+50, 50, -7.2000000000000002 },
-  { 9.3178966245756654e+49, 50, -7.0999999999999996 },
-  { -2.4714855983436561e+49, 50, -7.0000000000000000 },
-  { -4.1428217272044600e+49, 50, -6.9000000000000004 },
-  { -2.4864980414057334e+49, 50, -6.7999999999999998 },
-  { -8.0684355476447979e+48, 50, -6.7000000000000002 },
-  { 4.2529238530179841e+47, 50, -6.5999999999999996 },
-  { 2.4709663739849681e+48, 50, -6.5000000000000000 },
-  { 1.7500305481204125e+48, 50, -6.4000000000000004 },
-  { 6.3834558285146007e+47, 50, -6.2999999999999998 },
-  { -1.1477672402381055e+46, 50, -6.2000000000000002 },
-  { -1.9304630401841983e+47, 50, -6.0999999999999996 },
-  { -1.4355266959903589e+47, 50, -6.0000000000000000 },
-  { -5.1482200905566146e+46, 50, -5.9000000000000004 },
-  { 4.6577356827463283e+45, 50, -5.7999999999999998 },
-  { 1.9676012349652066e+46, 50, -5.7000000000000002 },
-  { 1.3630554018675846e+46, 50, -5.5999999999999996 },
-  { 4.0920495328093750e+45, 50, -5.5000000000000000 },
-  { -1.3680638882145392e+45, 50, -5.4000000000000004 },
-  { -2.4465265559935436e+45, 50, -5.2999999999999998 },
-  { -1.4270495629649456e+45, 50, -5.2000000000000002 },
-  { -2.4845518743338381e+44, 50, -5.0999999999999996 },
-  { 3.1953926721271990e+44, 50, -5.0000000000000000 },
-  { 3.4169399444879600e+44, 50, -4.9000000000000004 },
-  { 1.4896819114978755e+44, 50, -4.7999999999999998 },
-  { -1.3078430866968493e+43, 50, -4.7000000000000002 },
-  { -6.8449168639700716e+43, 50, -4.5999999999999996 },
-  { -4.9181639709997461e+43, 50, -4.5000000000000000 },
-  { -1.1434943490345182e+43, 50, -4.4000000000000004 },
-  { 1.1214652543461432e+43, 50, -4.2999999999999998 },
-  { 1.3843548994480608e+43, 50, -4.2000000000000002 },
-  { 6.3349790205303262e+42, 50, -4.0999999999999996 },
-  { -9.5599640670553907e+41, 50, -4.0000000000000000 },
-  { -3.6202558158287927e+42, 50, -3.9000000000000004 },
-  { -2.5206461734624493e+42, 50, -3.7999999999999998 },
-  { -3.7818051510732439e+41, 50, -3.7000000000000002 },
-  { 8.8921371165335050e+41, 50, -3.5999999999999996 },
-  { 9.2055485763852770e+41, 50, -3.5000000000000000 },
-  { 3.2535765707283020e+41, 50, -3.4000000000000004 },
-  { -1.9358941418244578e+41, 50, -3.2999999999999998 },
-  { -3.3076282847915670e+41, 50, -3.2000000000000002 },
-  { -1.7764977066639160e+41, 50, -3.0999999999999996 },
-  { 2.6751882008697154e+40, 50, -3.0000000000000000 },
-  { 1.2025382369996052e+41, 50, -2.9000000000000004 },
-  { 8.8383035103557973e+40, 50, -2.7999999999999998 },
-  { 7.7733606479641769e+39, 50, -2.7000000000000002 },
-  { -4.4696811758713757e+40, 50, -2.5999999999999996 },
-  { -4.3715062488963453e+40, 50, -2.5000000000000000 },
-  { -1.1390080390575289e+40, 50, -2.4000000000000004 },
-  { 1.6938519751181342e+40, 50, -2.2999999999999998 },
-  { 2.2284509952956210e+40, 50, -2.2000000000000002 },
-  { 9.0967994280570531e+39, 50, -2.0999999999999996 },
-  { -6.4126677997472978e+39, 50, -2.0000000000000000 },
-  { -1.1926839454034341e+40, 50, -1.9000000000000004 },
-  { -6.5436654274699114e+39, 50, -1.8000000000000007 },
-  { 2.2779499542550411e+39, 50, -1.6999999999999993 },
-  { 6.7720530889699639e+39, 50, -1.5999999999999996 },
-  { 4.6884851188034300e+39, 50, -1.5000000000000000 },
-  { -5.9005001052557463e+38, 50, -1.4000000000000004 },
-  { -4.1028320210430589e+39, 50, -1.3000000000000007 },
-  { -3.4780049977083965e+39, 50, -1.1999999999999993 },
-  { -1.3484918476373692e+38, 50, -1.0999999999999996 },
-  { 2.6586815431645456e+39, 50, -1.0000000000000000 },
-  { 2.7225429473661429e+39, 50, -0.90000000000000036 },
-  { 4.7785441024951729e+38, 50, -0.80000000000000071 },
-  { -1.8416784378790159e+39, 50, -0.69999999999999929 },
-  { -2.2725918816693132e+39, 50, -0.59999999999999964 },
-  { -6.7948375014926916e+38, 50, -0.50000000000000000 },
-  { 1.3581645858905750e+39, 50, -0.40000000000000036 },
-  { 2.0349661043040497e+39, 50, -0.30000000000000071 },
-  { 8.5049248815817037e+38, 50, -0.19999999999999929 },
-  { -1.0564542132990048e+39, 50, -0.099999999999999645 },
-  { -1.9607814681608194e+39, 50, 0.0000000000000000 },
-  { -1.0564542132990048e+39, 50, 0.099999999999999645 },
-  { 8.5049248815817037e+38, 50, 0.19999999999999929 },
-  { 2.0349661043040497e+39, 50, 0.30000000000000071 },
-  { 1.3581645858905750e+39, 50, 0.40000000000000036 },
-  { -6.7948375014926916e+38, 50, 0.50000000000000000 },
-  { -2.2725918816693132e+39, 50, 0.59999999999999964 },
-  { -1.8416784378790159e+39, 50, 0.69999999999999929 },
-  { 4.7785441024951729e+38, 50, 0.80000000000000071 },
-  { 2.7225429473661429e+39, 50, 0.90000000000000036 },
-  { 2.6586815431645456e+39, 50, 1.0000000000000000 },
-  { -1.3484918476373692e+38, 50, 1.0999999999999996 },
-  { -3.4780049977083965e+39, 50, 1.1999999999999993 },
-  { -4.1028320210430589e+39, 50, 1.3000000000000007 },
-  { -5.9005001052557463e+38, 50, 1.4000000000000004 },
-  { 4.6884851188034300e+39, 50, 1.5000000000000000 },
-  { 6.7720530889699639e+39, 50, 1.5999999999999996 },
-  { 2.2779499542550411e+39, 50, 1.6999999999999993 },
-  { -6.5436654274699114e+39, 50, 1.8000000000000007 },
-  { -1.1926839454034341e+40, 50, 1.9000000000000004 },
-  { -6.4126677997472978e+39, 50, 2.0000000000000000 },
-  { 9.0967994280570531e+39, 50, 2.0999999999999996 },
-  { 2.2284509952956162e+40, 50, 2.1999999999999993 },
-  { 1.6938519751181172e+40, 50, 2.3000000000000007 },
-  { -1.1390080390575289e+40, 50, 2.4000000000000004 },
-  { -4.3715062488963453e+40, 50, 2.5000000000000000 },
-  { -4.4696811758713757e+40, 50, 2.5999999999999996 },
-  { 7.7733606479635628e+39, 50, 2.6999999999999993 },
-  { 8.8383035103558611e+40, 50, 2.8000000000000007 },
-  { 1.2025382369996052e+41, 50, 2.9000000000000004 },
-  { 2.6751882008697154e+40, 50, 3.0000000000000000 },
-  { -1.7764977066639160e+41, 50, 3.0999999999999996 },
-  { -3.3076282847915616e+41, 50, 3.1999999999999993 },
-  { -1.9358941418244260e+41, 50, 3.3000000000000007 },
-  { 3.2535765707283020e+41, 50, 3.4000000000000004 },
-  { 9.2055485763852770e+41, 50, 3.5000000000000000 },
-  { 8.8921371165335050e+41, 50, 3.5999999999999996 },
-  { -3.7818051510730675e+41, 50, 3.6999999999999993 },
-  { -2.5206461734624660e+42, 50, 3.8000000000000007 },
-  { -3.6202558158287927e+42, 50, 3.9000000000000004 },
-  { -9.5599640670553907e+41, 50, 4.0000000000000000 },
-  { 6.3349790205303262e+42, 50, 4.0999999999999996 },
-  { 1.3843548994480566e+43, 50, 4.1999999999999993 },
-  { 1.1214652543461340e+43, 50, 4.3000000000000007 },
-  { -1.1434943490345182e+43, 50, 4.4000000000000004 },
-  { -4.9181639709997461e+43, 50, 4.5000000000000000 },
-  { -6.8449168639700716e+43, 50, 4.5999999999999996 },
-  { -1.3078430866969463e+43, 50, 4.6999999999999993 },
-  { 1.4896819114978953e+44, 50, 4.8000000000000007 },
-  { 3.4169399444879600e+44, 50, 4.9000000000000004 },
-  { 3.1953926721271990e+44, 50, 5.0000000000000000 },
-  { -2.4845518743338381e+44, 50, 5.0999999999999996 },
-  { -1.4270495629649337e+45, 50, 5.1999999999999993 },
-  { -2.4465265559935458e+45, 50, 5.3000000000000007 },
-  { -1.3680638882145392e+45, 50, 5.4000000000000004 },
-  { 4.0920495328093750e+45, 50, 5.5000000000000000 },
-  { 1.3630554018675846e+46, 50, 5.5999999999999996 },
-  { 1.9676012349652081e+46, 50, 5.6999999999999993 },
-  { 4.6577356827460393e+45, 50, 5.8000000000000007 },
-  { -5.1482200905566146e+46, 50, 5.9000000000000004 },
-  { -1.4355266959903589e+47, 50, 6.0000000000000000 },
-  { -1.9304630401841966e+47, 50, 6.1000000000000014 },
-  { -1.1477672402384868e+46, 50, 6.1999999999999993 },
-  { 6.3834558285146981e+47, 50, 6.3000000000000007 },
-  { 1.7500305481203924e+48, 50, 6.3999999999999986 },
-  { 2.4709663739849681e+48, 50, 6.5000000000000000 },
-  { 4.2529238530171793e+47, 50, 6.6000000000000014 },
-  { -8.0684355476446876e+48, 50, 6.6999999999999993 },
-  { -2.4864980414057495e+49, 50, 6.8000000000000007 },
-  { -4.1428217272044496e+49, 50, 6.8999999999999986 },
-  { -2.4714855983436561e+49, 50, 7.0000000000000000 },
-  { 9.3178966245760310e+49, 50, 7.1000000000000014 },
-  { 3.9143899315095070e+50, 50, 7.1999999999999993 },
-  { 8.4241263694549925e+50, 50, 7.3000000000000007 },
-  { 1.0219511166806458e+51, 50, 7.3999999999999986 },
-  { -3.5808467693113330e+50, 50, 7.5000000000000000 },
-  { -5.7887622198710268e+51, 50, 7.6000000000000014 },
-  { -1.8076371748762319e+52, 50, 7.6999999999999993 },
-  { -3.5678031330023971e+52, 50, 7.8000000000000007 },
-  { -3.9982544106300530e+52, 50, 7.8999999999999986 },
-  { 2.9492797132685063e+52, 50, 8.0000000000000000 },
-  { 3.0699480272358086e+53, 50, 8.1000000000000014 },
-  { 1.0009712198862341e+54, 50, 8.1999999999999993 },
-  { 2.2368641272300899e+54, 50, 8.3000000000000007 },
-  { 3.4325365049909340e+54, 50, 8.3999999999999986 },
-  { 1.5935887905806307e+54, 50, 8.5000000000000000 },
-  { -1.2392013720948937e+55, 50, 8.6000000000000014 },
-  { -6.0082225302289557e+55, 50, 8.6999999999999993 },
-  { -1.8210771577645630e+56, 50, 8.8000000000000007 },
-  { -4.3145937406321376e+56, 50, 8.8999999999999986 },
-  { -8.0563930902368911e+56, 50, 9.0000000000000000 },
-  { -9.7863165370930194e+56, 50, 9.1000000000000014 },
-  { 5.3163209769527426e+56, 50, 9.1999999999999993 },
-  { 8.6500158470917270e+57, 50, 9.3000000000000007 },
-  { 3.7546881918012164e+58, 50, 9.3999999999999986 },
-  { 1.2454022521696361e+59, 50, 9.5000000000000000 },
-  { 3.6194312967780793e+59, 50, 9.6000000000000014 },
-  { 9.6739828066585787e+59, 50, 9.6999999999999993 },
-  { 2.4344814863741168e+60, 50, 9.8000000000000007 },
-  { 5.8466703062265247e+60, 50, 9.8999999999999986 },
-  { 1.3516643049819314e+61, 50, 10.000000000000000 },
+  { -9.5599640670553907e+41, 50, 4.0000000000000000, 0.0 },
+  { -1.4355266959903589e+47, 50, 6.0000000000000000, 0.0 },
+  { 2.9492797132685063e+52, 50, 8.0000000000000000, 0.0 },
+  { 1.3516643049819314e+61, 50, 10.000000000000000, 0.0 },
+  { 5.1746552169783233e+66, 50, 12.000000000000000, 0.0 },
+  { 1.2608506104917666e+74, 50, 16.000000000000000, 0.0 },
+  { 2.4719364545684313e+79, 50, 20.000000000000000, 0.0 },
+  { 7.8081628444405771e+99, 50, 50.000000000000000, 0.0 },
+  { 1.0588500951956526e+115, 50, 100.00000000000000, 0.0 },
 };
+const double toler012 = 2.5000000000000020e-13;
 
-// Test function for n=50.
-template<typename Tp>
-  void
-  test007()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data007)
-                          / sizeof(testcase_hermite<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::hermite(Tp(data007[i].n), Tp(data007[i].x));
-       const Tp f0 = data007[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+// Test data for n=72.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data013[9] =
+{
+  { -5.0016344249093296e+65, 72, 4.0000000000000000, 0.0 },
+  { 1.1604343420664594e+70, 72, 6.0000000000000000, 0.0 },
+  { 1.1307673578364519e+76, 72, 8.0000000000000000, 0.0 },
+  { -6.9227458950910379e+83, 72, 10.000000000000000, 0.0 },
+  { 4.2761121656851757e+93, 72, 12.000000000000000, 0.0 },
+  { 6.4057452391049260e+105, 72, 16.000000000000000, 0.0 },
+  { 6.5532144335168848e+113, 72, 20.000000000000000, 0.0 },
+  { 5.9536449994832570e+143, 72, 50.000000000000000, 0.0 },
+  { 4.1539384208364770e+165, 72, 100.00000000000000, 0.0 },
+};
+const double toler013 = 2.5000000000000020e-13;
 
-// Test data for n=100.
-// max(|f - f_GSL|): 0.0000000000000000
+// Test data for n=128.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data014[9] =
+{
+  { 7.4843015969363893e+129, 128, 4.0000000000000000, 0.0 },
+  { 1.9427207779012687e+134, 128, 6.0000000000000000, 0.0 },
+  { -2.5332076374233721e+140, 128, 8.0000000000000000, 0.0 },
+  { -3.6481920485874574e+146, 128, 10.000000000000000, 0.0 },
+  { -6.6019131304361279e+157, 128, 12.000000000000000, 0.0 },
+  { 1.7909969314519483e+182, 128, 16.000000000000000, 0.0 },
+  { 4.6773285529590986e+199, 128, 20.000000000000000, 0.0 },
+  { 1.8851953794407319e+255, 128, 50.000000000000000, 0.0 },
+  { 2.2605490449873036e+294, 128, 100.00000000000000, 0.0 },
+};
+const double toler014 = 2.5000000000000020e-13;
+
+// Divergence at n=200 x=50.000000000000000 f=-nan f_GSL=inf
+// Divergence at n=200 x=100.00000000000000 f=-nan f_GSL=inf
+// Divergence at n=200 x=100.00000000000000 f=-nan f_GSL=inf
+// Test data for n=200.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
-testcase_hermite<double>
-data008[] =
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data015[7] =
 {
-  { -1.8738689223256612e+115, 100, -10.000000000000000 },
-  { -4.4232904120311186e+114, 100, -9.9000000000000004 },
-  { 8.3761676654305186e+113, 100, -9.8000000000000007 },
-  { 9.4857435427570856e+113, 100, -9.6999999999999993 },
-  { 2.4904626130429828e+113, 100, -9.5999999999999996 },
-  { -4.2265051766934789e+112, 100, -9.5000000000000000 },
-  { -5.3374224541142079e+112, 100, -9.4000000000000004 },
-  { -1.3977488190034162e+112, 100, -9.3000000000000007 },
-  { 2.9686037583393142e+111, 100, -9.1999999999999993 },
-  { 3.3341330166544008e+111, 100, -9.0999999999999996 },
-  { 7.7294136683043515e+110, 100, -9.0000000000000000 },
-  { -2.6071876743328352e+110, 100, -8.9000000000000004 },
-  { -2.2669773300293168e+110, 100, -8.8000000000000007 },
-  { -3.8930624477368766e+109, 100, -8.6999999999999993 },
-  { 2.5386102824684956e+109, 100, -8.5999999999999996 },
-  { 1.6203702280499544e+109, 100, -8.5000000000000000 },
-  { 1.2481735250539652e+108, 100, -8.4000000000000004 },
-  { -2.5611278359589723e+108, 100, -8.3000000000000007 },
-  { -1.1534178973583771e+108, 100, -8.1999999999999993 },
-  { 8.4932594446954126e+106, 100, -8.0999999999999996 },
-  { 2.5761505535443451e+107, 100, -8.0000000000000000 },
-  { 7.3445622927437730e+106, 100, -7.9000000000000004 },
-  { -2.7252309851017323e+106, 100, -7.7999999999999998 },
-  { -2.4850432648124068e+106, 100, -7.7000000000000002 },
-  { -2.7486638813238851e+105, 100, -7.5999999999999996 },
-  { 4.4772364475394960e+105, 100, -7.5000000000000000 },
-  { 2.1375121759800508e+105, 100, -7.4000000000000004 },
-  { -2.9237691057265876e+104, 100, -7.2999999999999998 },
-  { -5.9348804074874781e+104, 100, -7.2000000000000002 },
-  { -1.2947583568692734e+104, 100, -7.0999999999999996 },
-  { 1.0002273523275075e+104, 100, -7.0000000000000000 },
-  { 6.4900499886057735e+103, 100, -6.9000000000000004 },
-  { -3.7817730019124298e+102, 100, -6.7999999999999998 },
-  { -1.7849709684883137e+103, 100, -6.7000000000000002 },
-  { -4.8039047085580619e+102, 100, -6.5999999999999996 },
-  { 3.2072472002047670e+102, 100, -6.5000000000000000 },
-  { 2.3341289432999226e+102, 100, -6.4000000000000004 },
-  { -1.4587350659146165e+101, 100, -6.2999999999999998 },
-  { -7.0672139150705532e+101, 100, -6.2000000000000002 },
-  { -1.8039133351601998e+101, 100, -6.0999999999999996 },
-  { 1.5170693933260738e+101, 100, -6.0000000000000000 },
-  { 1.0141407690966954e+101, 100, -5.9000000000000004 },
-  { -1.5140717605507886e+100, 100, -5.7999999999999998 },
-  { -3.6379102593330533e+100, 100, -5.7000000000000002 },
-  { -6.2933057672779134e+99, 100, -5.5999999999999996 },
-  { 9.9309186425970402e+99, 100, -5.5000000000000000 },
-  { 5.0935670879056567e+99, 100, -5.4000000000000004 },
-  { -1.8337906983006129e+99, 100, -5.2999999999999998 },
-  { -2.3096466887887402e+99, 100, -5.2000000000000002 },
-  { -4.0259235416602546e+97, 100, -5.0999999999999996 },
-  { 8.1931937130591466e+98, 100, -5.0000000000000000 },
-  { 2.5601172475776894e+98, 100, -4.9000000000000004 },
-  { -2.3193021196802698e+98, 100, -4.7999999999999998 },
-  { -1.6545238014142802e+98, 100, -4.7000000000000002 },
-  { 4.2440218943299170e+97, 100, -4.5999999999999996 },
-  { 7.8073853756187101e+97, 100, -4.5000000000000000 },
-  { 5.2136163919277588e+96, 100, -4.4000000000000004 },
-  { -3.0837503404959950e+97, 100, -4.2999999999999998 },
-  { -1.0988290456447777e+97, 100, -4.2000000000000002 },
-  { 1.0173847230741884e+97, 100, -4.0999999999999996 },
-  { 7.7070682747643550e+96, 100, -4.0000000000000000 },
-  { -2.3947326745293331e+96, 100, -3.9000000000000004 },
-  { -4.1993887070961596e+96, 100, -3.7999999999999998 },
-  { -5.5521768050542138e+94, 100, -3.7000000000000002 },
-  { 1.9852724296241180e+96, 100, -3.5999999999999996 },
-  { 5.7841213444838915e+95, 100, -3.5000000000000000 },
-  { -8.2433116644948570e+95, 100, -3.4000000000000004 },
-  { -5.2035951331058195e+95, 100, -3.2999999999999998 },
-  { 2.8212012454566057e+95, 100, -3.2000000000000002 },
-  { 3.5161870090563867e+95, 100, -3.0999999999999996 },
-  { -5.5084542871196523e+94, 100, -3.0000000000000000 },
-  { -2.0784160746797610e+95, 100, -2.9000000000000004 },
-  { -2.6058116248679496e+94, 100, -2.7999999999999998 },
-  { 1.1147132226581844e+95, 100, -2.7000000000000002 },
-  { 4.5607706742532875e+94, 100, -2.5999999999999996 },
-  { -5.3758761713337664e+94, 100, -2.5000000000000000 },
-  { -4.2303228932575769e+94, 100, -2.4000000000000004 },
-  { 2.1691501564685499e+94, 100, -2.2999999999999998 },
-  { 3.2602488340116974e+94, 100, -2.2000000000000002 },
-  { -5.0527155039787607e+93, 100, -2.0999999999999996 },
-  { -2.2785574311661325e+94, 100, -2.0000000000000000 },
-  { -2.8549527653152903e+93, 100, -1.9000000000000004 },
-  { 1.4787573463714363e+94, 100, -1.8000000000000007 },
-  { 6.0554070654771248e+93, 100, -1.6999999999999993 },
-  { -8.8496828346970978e+93, 100, -1.5999999999999996 },
-  { -6.8402151897169509e+93, 100, -1.5000000000000000 },
-  { 4.6555468819923166e+93, 100, -1.4000000000000004 },
-  { 6.4625437128323579e+93, 100, -1.3000000000000007 },
-  { -1.7820042440391653e+93, 100, -1.1999999999999993 },
-  { -5.5814393347235886e+93, 100, -1.0999999999999996 },
-  { -1.4487067293379347e+92, 100, -1.0000000000000000 },
-  { 4.5268398678911204e+93, 100, -0.90000000000000036 },
-  { 1.4120762149478435e+93, 100, -0.80000000000000071 },
-  { -3.4510765981144258e+93, 100, -0.69999999999999929 },
-  { -2.2242581581553176e+93, 100, -0.59999999999999964 },
-  { 2.4129827902061037e+93, 100, -0.50000000000000000 },
-  { 2.7195429139752497e+93, 100, -0.40000000000000036 },
-  { -1.4235309630836904e+93, 100, -0.30000000000000071 },
-  { -2.9850618739468043e+93, 100, -0.19999999999999929 },
-  { 4.7017027479251074e+92, 100, -0.099999999999999645 },
-  { 3.0685187562549660e+93, 100, 0.0000000000000000 },
-  { 4.7017027479251074e+92, 100, 0.099999999999999645 },
-  { -2.9850618739468043e+93, 100, 0.19999999999999929 },
-  { -1.4235309630836904e+93, 100, 0.30000000000000071 },
-  { 2.7195429139752497e+93, 100, 0.40000000000000036 },
-  { 2.4129827902061037e+93, 100, 0.50000000000000000 },
-  { -2.2242581581553176e+93, 100, 0.59999999999999964 },
-  { -3.4510765981144258e+93, 100, 0.69999999999999929 },
-  { 1.4120762149478435e+93, 100, 0.80000000000000071 },
-  { 4.5268398678911204e+93, 100, 0.90000000000000036 },
-  { -1.4487067293379347e+92, 100, 1.0000000000000000 },
-  { -5.5814393347235886e+93, 100, 1.0999999999999996 },
-  { -1.7820042440391653e+93, 100, 1.1999999999999993 },
-  { 6.4625437128323579e+93, 100, 1.3000000000000007 },
-  { 4.6555468819923166e+93, 100, 1.4000000000000004 },
-  { -6.8402151897169509e+93, 100, 1.5000000000000000 },
-  { -8.8496828346970978e+93, 100, 1.5999999999999996 },
-  { 6.0554070654771248e+93, 100, 1.6999999999999993 },
-  { 1.4787573463714363e+94, 100, 1.8000000000000007 },
-  { -2.8549527653152903e+93, 100, 1.9000000000000004 },
-  { -2.2785574311661325e+94, 100, 2.0000000000000000 },
-  { -5.0527155039787607e+93, 100, 2.0999999999999996 },
-  { 3.2602488340116774e+94, 100, 2.1999999999999993 },
-  { 2.1691501564685076e+94, 100, 2.3000000000000007 },
-  { -4.2303228932575769e+94, 100, 2.4000000000000004 },
-  { -5.3758761713337664e+94, 100, 2.5000000000000000 },
-  { 4.5607706742532875e+94, 100, 2.5999999999999996 },
-  { 1.1147132226581881e+95, 100, 2.6999999999999993 },
-  { -2.6058116248681564e+94, 100, 2.8000000000000007 },
-  { -2.0784160746797610e+95, 100, 2.9000000000000004 },
-  { -5.5084542871196523e+94, 100, 3.0000000000000000 },
-  { 3.5161870090563867e+95, 100, 3.0999999999999996 },
-  { 2.8212012454566478e+95, 100, 3.1999999999999993 },
-  { -5.2035951331058918e+95, 100, 3.3000000000000007 },
-  { -8.2433116644948570e+95, 100, 3.4000000000000004 },
-  { 5.7841213444838915e+95, 100, 3.5000000000000000 },
-  { 1.9852724296241180e+96, 100, 3.5999999999999996 },
-  { -5.5521768050503009e+94, 100, 3.6999999999999993 },
-  { -4.1993887070961795e+96, 100, 3.8000000000000007 },
-  { -2.3947326745293331e+96, 100, 3.9000000000000004 },
-  { 7.7070682747643550e+96, 100, 4.0000000000000000 },
-  { 1.0173847230741884e+97, 100, 4.0999999999999996 },
-  { -1.0988290456447506e+97, 100, 4.1999999999999993 },
-  { -3.0837503404959957e+97, 100, 4.3000000000000007 },
-  { 5.2136163919277588e+96, 100, 4.4000000000000004 },
-  { 7.8073853756187101e+97, 100, 4.5000000000000000 },
-  { 4.2440218943299170e+97, 100, 4.5999999999999996 },
-  { -1.6545238014142650e+98, 100, 4.6999999999999993 },
-  { -2.3193021196802549e+98, 100, 4.8000000000000007 },
-  { 2.5601172475776894e+98, 100, 4.9000000000000004 },
-  { 8.1931937130591466e+98, 100, 5.0000000000000000 },
-  { -4.0259235416602546e+97, 100, 5.0999999999999996 },
-  { -2.3096466887887237e+99, 100, 5.1999999999999993 },
-  { -1.8337906983005823e+99, 100, 5.3000000000000007 },
-  { 5.0935670879056567e+99, 100, 5.4000000000000004 },
-  { 9.9309186425970402e+99, 100, 5.5000000000000000 },
-  { -6.2933057672779134e+99, 100, 5.5999999999999996 },
-  { -3.6379102593330386e+100, 100, 5.6999999999999993 },
-  { -1.5140717605507249e+100, 100, 5.8000000000000007 },
-  { 1.0141407690966954e+101, 100, 5.9000000000000004 },
-  { 1.5170693933260738e+101, 100, 6.0000000000000000 },
-  { -1.8039133351602961e+101, 100, 6.1000000000000014 },
-  { -7.0672139150705246e+101, 100, 6.1999999999999993 },
-  { -1.4587350659144549e+101, 100, 6.3000000000000007 },
-  { 2.3341289432998748e+102, 100, 6.3999999999999986 },
-  { 3.2072472002047670e+102, 100, 6.5000000000000000 },
-  { -4.8039047085582927e+102, 100, 6.6000000000000014 },
-  { -1.7849709684883083e+103, 100, 6.6999999999999993 },
-  { -3.7817730019120996e+102, 100, 6.8000000000000007 },
-  { 6.4900499886056430e+103, 100, 6.8999999999999986 },
-  { 1.0002273523275075e+104, 100, 7.0000000000000000 },
-  { -1.2947583568693485e+104, 100, 7.1000000000000014 },
-  { -5.9348804074874565e+104, 100, 7.1999999999999993 },
-  { -2.9237691057264679e+104, 100, 7.3000000000000007 },
-  { 2.1375121759799924e+105, 100, 7.3999999999999986 },
-  { 4.4772364475394960e+105, 100, 7.5000000000000000 },
-  { -2.7486638813241244e+105, 100, 7.6000000000000014 },
-  { -2.4850432648123868e+106, 100, 7.6999999999999993 },
-  { -2.7252309851017070e+106, 100, 7.8000000000000007 },
-  { 7.3445622927434568e+106, 100, 7.8999999999999986 },
-  { 2.5761505535443451e+107, 100, 8.0000000000000000 },
-  { 8.4932594446944218e+106, 100, 8.1000000000000014 },
-  { -1.1534178973583771e+108, 100, 8.1999999999999993 },
-  { -2.5611278359589723e+108, 100, 8.3000000000000007 },
-  { 1.2481735250538004e+108, 100, 8.3999999999999986 },
-  { 1.6203702280499544e+109, 100, 8.5000000000000000 },
-  { 2.5386102824684747e+109, 100, 8.6000000000000014 },
-  { -3.8930624477368766e+109, 100, 8.6999999999999993 },
-  { -2.2669773300293168e+110, 100, 8.8000000000000007 },
-  { -2.6071876743328939e+110, 100, 8.8999999999999986 },
-  { 7.7294136683043515e+110, 100, 9.0000000000000000 },
-  { 3.3341330166544429e+111, 100, 9.1000000000000014 },
-  { 2.9686037583393142e+111, 100, 9.1999999999999993 },
-  { -1.3977488190034162e+112, 100, 9.3000000000000007 },
-  { -5.3374224541141370e+112, 100, 9.3999999999999986 },
-  { -4.2265051766934789e+112, 100, 9.5000000000000000 },
-  { 2.4904626130430740e+113, 100, 9.6000000000000014 },
-  { 9.4857435427570856e+113, 100, 9.6999999999999993 },
-  { 8.3761676654305186e+113, 100, 9.8000000000000007 },
-  { -4.4232904120309469e+114, 100, 9.8999999999999986 },
-  { -1.8738689223256612e+115, 100, 10.000000000000000 },
+  { -1.3224398396684072e+220, 200, 4.0000000000000000, 0.0 },
+  { 2.8108557561597729e+224, 200, 6.0000000000000000, 0.0 },
+  { 2.2034127668580903e+230, 200, 8.0000000000000000, 0.0 },
+  { -4.7005387186273384e+238, 200, 10.000000000000000, 0.0 },
+  { 6.8125674650192333e+247, 200, 12.000000000000000, 0.0 },
+  { 2.8932855639383936e+272, 200, 16.000000000000000, 0.0 },
+  { 9.8757526545830183e+303, 200, 20.000000000000000, 0.0 },
 };
+const double toler015 = 2.5000000000000020e-13;
 
-// Test function for n=100.
-template<typename Tp>
+// Divergence at n=1250 x=4.0000000000000000 f=-nan f_GSL=-inf
+// Divergence at n=1250 x=6.0000000000000000 f=-nan f_GSL=inf
+// Divergence at n=1250 x=8.0000000000000000 f=-nan f_GSL=inf
+// ...
+// Divergence at n=1250 x=100.00000000000000 f=-nan f_GSL=inf
+// Divergence at n=5000 x=4.0000000000000000 f=-nan f_GSL=-inf
+// Divergence at n=5000 x=6.0000000000000000 f=-nan f_GSL=-inf
+// Divergence at n=5000 x=8.0000000000000000 f=-nan f_GSL=inf
+// ...
+// Divergence at n=5000 x=100.00000000000000 f=-nan f_GSL=inf
+template<typename Ret, unsigned int Num>
   void
-  test008()
+  test(const testcase_hermite<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data008)
-                          / sizeof(testcase_hermite<double>);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::tr1::hermite(Tp(data008[i].n), Tp(data008[i].x));
-       const Tp f0 = data008[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::tr1::hermite(data[i].n, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
       }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
+    VERIFY(max_abs_frac < toler);
   }
 
 int
 main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
   return 0;
 }
index 93c9ba0..558db8d 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  hyperg
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data001[] = {
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test001()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data001[i].a), Tp(data001[i].b),
-                   Tp(data001[i].c), Tp(data001[i].x));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data001[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler001 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data002[] = {
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test002()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data002)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data002[i].a), Tp(data002[i].b),
-                   Tp(data002[i].c), Tp(data002[i].x));
-      const Tp f0 = data002[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data002[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler002 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data003[] = {
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test003()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data003)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data003[i].a), Tp(data003[i].b),
-                   Tp(data003[i].c), Tp(data003[i].x));
-      const Tp f0 = data003[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data003[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler003 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data004[] = {
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test004()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data004)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data004[i].a), Tp(data004[i].b),
-                   Tp(data004[i].c), Tp(data004[i].x));
-      const Tp f0 = data004[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data004[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler004 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data005[] = {
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test005()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data005)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data005[i].a), Tp(data005[i].b),
-                   Tp(data005[i].c), Tp(data005[i].x));
-      const Tp f0 = data005[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data005[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler005 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data006[] = {
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test006()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data006)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data006[i].a), Tp(data006[i].b),
-                   Tp(data006[i].c), Tp(data006[i].x));
-      const Tp f0 = data006[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data006[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler006 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data007[] = {
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test007()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data007)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data007[i].a), Tp(data007[i].b),
-                   Tp(data007[i].c), Tp(data007[i].x));
-      const Tp f0 = data007[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data007[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler007 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data008[] = {
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test008()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data008)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data008[i].a), Tp(data008[i].b),
-                   Tp(data008[i].c), Tp(data008[i].x));
-      const Tp f0 = data008[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data008[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler008 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data009[] = {
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test009()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data009)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data009[i].a), Tp(data009[i].b),
-                   Tp(data009[i].c), Tp(data009[i].x));
-      const Tp f0 = data009[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data009[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler009 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data010[] = {
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test010()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data010)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data010[i].a), Tp(data010[i].b),
-                   Tp(data010[i].c), Tp(data010[i].x));
-      const Tp f0 = data010[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data010[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler010 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data011[] = {
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test011()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data011)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data011[i].a), Tp(data011[i].b),
-                   Tp(data011[i].c), Tp(data011[i].x));
-      const Tp f0 = data011[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data011[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler011 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data012[] = {
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test012()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data012)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data012[i].a), Tp(data012[i].b),
-                   Tp(data012[i].c), Tp(data012[i].x));
-      const Tp f0 = data012[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data012[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler012 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data013[] = {
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test013()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data013)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data013[i].a), Tp(data013[i].b),
-                   Tp(data013[i].c), Tp(data013[i].x));
-      const Tp f0 = data013[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data013[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler013 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data014[] = {
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test014()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data014)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data014[i].a), Tp(data014[i].b),
-                   Tp(data014[i].c), Tp(data014[i].x));
-      const Tp f0 = data014[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data014[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler014 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data015[] = {
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test015()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data015)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data015[i].a), Tp(data015[i].b),
-                   Tp(data015[i].c), Tp(data015[i].x));
-      const Tp f0 = data015[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data015[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler015 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data016[] = {
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test016()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data016)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data016[i].a), Tp(data016[i].b),
-                   Tp(data016[i].c), Tp(data016[i].x));
-      const Tp f0 = data016[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data016[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler016 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data017[] = {
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test017()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data017)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data017[i].a), Tp(data017[i].b),
-                   Tp(data017[i].c), Tp(data017[i].x));
-      const Tp f0 = data017[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data017[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler017 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data018[] = {
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test018()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data018)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data018[i].a), Tp(data018[i].b),
-                   Tp(data018[i].c), Tp(data018[i].x));
-      const Tp f0 = data018[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data018[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler018 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data019[] = {
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test019()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data019)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data019[i].a), Tp(data019[i].b),
-                   Tp(data019[i].c), Tp(data019[i].x));
-      const Tp f0 = data019[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data019[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler019 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data020[] = {
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test020()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data020)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data020[i].a), Tp(data020[i].b),
-                   Tp(data020[i].c), Tp(data020[i].x));
-      const Tp f0 = data020[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data020[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler020 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data021[] = {
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test021()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data021)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data021[i].a), Tp(data021[i].b),
-                   Tp(data021[i].c), Tp(data021[i].x));
-      const Tp f0 = data021[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data021[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler021 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data022[] = {
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test022()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data022)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data022[i].a), Tp(data022[i].b),
-                   Tp(data022[i].c), Tp(data022[i].x));
-      const Tp f0 = data022[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data022[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler022 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data023[] = {
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test023()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data023)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data023[i].a), Tp(data023[i].b),
-                   Tp(data023[i].c), Tp(data023[i].x));
-      const Tp f0 = data023[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data023[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler023 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data024[] = {
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test024()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data024)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data024[i].a), Tp(data024[i].b),
-                   Tp(data024[i].c), Tp(data024[i].x));
-      const Tp f0 = data024[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data024[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler024 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data025[] = {
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test025()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data025)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data025[i].a), Tp(data025[i].b),
-                   Tp(data025[i].c), Tp(data025[i].x));
-      const Tp f0 = data025[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data025[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler025 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data026[] = {
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test026()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data026)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data026[i].a), Tp(data026[i].b),
-                   Tp(data026[i].c), Tp(data026[i].x));
-      const Tp f0 = data026[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data026[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler026 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data027[] = {
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test027()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data027)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data027[i].a), Tp(data027[i].b),
-                   Tp(data027[i].c), Tp(data027[i].x));
-      const Tp f0 = data027[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data027[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler027 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data028[] = {
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test028()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data028)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data028[i].a), Tp(data028[i].b),
-                   Tp(data028[i].c), Tp(data028[i].x));
-      const Tp f0 = data028[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data028[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler028 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data029[] = {
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test029()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data029)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data029[i].a), Tp(data029[i].b),
-                   Tp(data029[i].c), Tp(data029[i].x));
-      const Tp f0 = data029[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data029[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler029 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=10.000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data030[] = {
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=10.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test030()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data030)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data030[i].a), Tp(data030[i].b),
-                   Tp(data030[i].c), Tp(data030[i].x));
-      const Tp f0 = data030[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data030[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler030 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data031[] = {
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test031()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data031)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data031[i].a), Tp(data031[i].b),
-                   Tp(data031[i].c), Tp(data031[i].x));
-      const Tp f0 = data031[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data031[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler031 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data032[] = {
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test032()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data032)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data032[i].a), Tp(data032[i].b),
-                   Tp(data032[i].c), Tp(data032[i].x));
-      const Tp f0 = data032[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data032[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler032 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data033[] = {
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test033()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data033)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data033[i].a), Tp(data033[i].b),
-                   Tp(data033[i].c), Tp(data033[i].x));
-      const Tp f0 = data033[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data033[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler033 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data034[] = {
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test034()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data034)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data034[i].a), Tp(data034[i].b),
-                   Tp(data034[i].c), Tp(data034[i].x));
-      const Tp f0 = data034[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data034[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler034 = 2.5000000000000020e-13;
 
 // Test data for a=0.0000000000000000, b=20.000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data035[] = {
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.0000000000000000, b=20.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test035()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data035)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data035[i].a), Tp(data035[i].b),
-                   Tp(data035[i].c), Tp(data035[i].x));
-      const Tp f0 = data035[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data035[19] =
+{
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler035 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data036[] = {
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test036()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data036)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data036[i].a), Tp(data036[i].b),
-                   Tp(data036[i].c), Tp(data036[i].x));
-      const Tp f0 = data036[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data036[19] =
+{
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler036 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data037[] = {
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test037()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data037)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data037[i].a), Tp(data037[i].b),
-                   Tp(data037[i].c), Tp(data037[i].x));
-      const Tp f0 = data037[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data037[19] =
+{
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler037 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data038[] = {
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test038()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data038)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data038[i].a), Tp(data038[i].b),
-                   Tp(data038[i].c), Tp(data038[i].x));
-      const Tp f0 = data038[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data038[19] =
+{
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler038 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data039[] = {
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test039()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data039)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data039[i].a), Tp(data039[i].b),
-                   Tp(data039[i].c), Tp(data039[i].x));
-      const Tp f0 = data039[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data039[19] =
+{
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler039 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data040[] = {
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=0.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test040()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data040)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data040[i].a), Tp(data040[i].b),
-                   Tp(data040[i].c), Tp(data040[i].x));
-      const Tp f0 = data040[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data040[19] =
+{
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler040 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data041[] = {
-  { 0.91383715388743758, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.92151232618202283, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.92955086110354823, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.93798900119104844, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.94686887307107304, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.95623987262143295, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.96616049387450154, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.97670078782187519, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.98794573712298384, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0129947682256604, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0270980168168973, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0425304520063581, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.0595915916161471, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0787052023767585, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.1005053642285867, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.1260196351148746, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.1571341977338991, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.1982111053717450, 0.50000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test041()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data041)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data041[i].a), Tp(data041[i].b),
-                   Tp(data041[i].c), Tp(data041[i].x));
-      const Tp f0 = data041[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.7062685186203797e-16
+// mean(f - f_GSL): 1.1686558153949016e-17
+// variance(f - f_GSL): 1.0964410526798704e-32
+// stddev(f - f_GSL): 1.0471108120346530e-16
+const testcase_hyperg<double>
+data041[19] =
+{
+  { 0.91383715388743736, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.92151232618202372, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.92955086110354845, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.93798900119104855, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.94686887307107392, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.95623987262143295, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.96616049387450120, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.97670078782187519, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.98794573712298384, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0129947682256604, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0270980168168973, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0425304520063581, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0595915916161471, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0787052023767585, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.1005053642285867, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1260196351148746, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.1571341977338991, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.1982111053717452, 0.50000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler041 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data042[] = {
-  { 0.95255425675562733, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.95712841850078245, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.96184734120034532, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.96672141255196242, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.97176228710138646, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.97698311668286286, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.98239883902556069, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.98802654401961032, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.99388594556732701, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0063957328951061, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0131053706824598, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0201679332118803, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0276315524377497, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0355569942816882, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0440233080381554, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.0531375808028993, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.0630536689840200, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.0740149570414563, 0.50000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test042()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data042)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data042[i].a), Tp(data042[i].b),
-                   Tp(data042[i].c), Tp(data042[i].x));
-      const Tp f0 = data042[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.3306690738754696e-16 at index 8
+// max(|f - f_GSL| / |f_GSL|): 3.3511582377535958e-16
+// mean(f - f_GSL): 4.0902953538821554e-17
+// variance(f - f_GSL): 1.9241779613319129e-33
+// stddev(f - f_GSL): 4.3865452936586813e-17
+const testcase_hyperg<double>
+data042[19] =
+{
+  { 0.95255425675562699, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.95712841850078267, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.96184734120034554, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.96672141255196176, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.97176228710138646, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.97698311668286308, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.98239883902556036, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.98802654401961032, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.99388594556732701, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0063957328951061, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0131053706824598, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0201679332118803, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0276315524377497, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0355569942816882, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0440233080381554, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0531375808028993, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0630536689840200, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0740149570414563, 0.50000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler042 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data043[] = {
-  { 0.96694084713323891, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.97024454918852587, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.97362815600391461, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.97709622064205115, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.98065374770570624, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.98430626119885489, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.98805988669621037, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.99192145185739655, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.99589861079880937, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0042354366729904, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0086161755545404, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0131552481403503, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0178679218284707, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0227723400312978, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0278904483717863, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0332494012993472, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0388838453357794, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0448400142331342, 0.50000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test043()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data043)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data043[i].a), Tp(data043[i].b),
-                   Tp(data043[i].c), Tp(data043[i].x));
-      const Tp f0 = data043[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 5.5511151231257827e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 5.5963253065363064e-16
+// mean(f - f_GSL): 5.8432790769745078e-18
+// variance(f - f_GSL): 2.0022663489405960e-36
+// stddev(f - f_GSL): 1.4150146108576393e-18
+const testcase_hyperg<double>
+data043[19] =
+{
+  { 0.96694084713323880, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.97024454918852632, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.97362815600391439, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.97709622064205104, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.98065374770570635, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.98430626119885523, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.98805988669621037, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.99192145185739655, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.99589861079880937, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0042354366729904, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0086161755545404, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0131552481403503, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0178679218284707, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0227723400312978, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0278904483717863, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0332494012993474, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0388838453357794, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0448400142331342, 0.50000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler043 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data044[] = {
-  { 0.97456073259047449, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.97715689327833344, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.97980416868943099, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.98250498942832509, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.98526199049760832, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.98807803762902813, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.99095625840920332, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.99390007937387959, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.99691327061866730, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0031648997547440, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0064131494767281, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0097505810668461, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0131838138968663, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0167204326938339, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0203692279382193, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0241405318057402, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0280467087844301, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0321029179180026, 0.50000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test044()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data044)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data044[i].a), Tp(data044[i].b),
-                   Tp(data044[i].c), Tp(data044[i].x));
-      const Tp f0 = data044[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.3306690738754696e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 3.3511105824376917e-16
+// mean(f - f_GSL): -1.7529837230923523e-17
+// variance(f - f_GSL): 3.3658097325691423e-33
+// stddev(f - f_GSL): 5.8015599045163211e-17
+const testcase_hyperg<double>
+data044[19] =
+{
+  { 0.97456073259047449, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.97715689327833399, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.97980416868943110, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.98250498942832487, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.98526199049760810, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.98807803762902791, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.99095625840920332, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.99390007937387959, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.99691327061866730, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0031648997547440, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0064131494767281, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0097505810668461, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0131838138968663, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0167204326938339, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0203692279382193, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0241405318057402, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0280467087844301, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0321029179180026, 0.50000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler044 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data045[] = {
-  { 0.97930223035212161, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.98144406855076416, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.98362155940297302, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.98583616201745805, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.98808944235385077, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.99038308530635433, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.99271890872975732, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.99509887982916734, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.99752513445413604, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0025260228440118, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0051060015613384, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0077430276253163, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0104405359789990, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0132023689128868, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0160328583559475, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0189369344885053, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0219202735809589, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0249895076611382, 0.50000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=0.50000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test045()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data045)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data045[i].a), Tp(data045[i].b),
-                   Tp(data045[i].c), Tp(data045[i].x));
-      const Tp f0 = data045[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.1102230246251565e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 1.1156911610791411e-16
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data045[19] =
+{
+  { 0.97930223035212138, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.98144406855076427, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.98362155940297280, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.98583616201745783, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.98808944235385032, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.99038308530635433, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.99271890872975732, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.99509887982916734, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.99752513445413604, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0025260228440118, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0051060015613384, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0077430276253163, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0104405359789990, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0132023689128868, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0160328583559475, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0189369344885053, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0219202735809589, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0249895076611382, 0.50000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler045 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data046[] = {
-  { 0.84089972268671609, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.85410196624968437, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.86811566011579933, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.88303688022450544, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.89897948556635565, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.91607978309961580, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.93450283399425305, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.95445115010332193, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.97617696340303095, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0263340389897240, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0557280900008410, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0889331564394962, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.1270166537925830, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.1715728752538095, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.2251482265544145, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.2922212642709541, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.3819660112501042, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.5194938532959119, 0.50000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test046()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data046)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data046[i].a), Tp(data046[i].b),
-                   Tp(data046[i].c), Tp(data046[i].x));
-      const Tp f0 = data046[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8.8817841970012523e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.8452254859313207e-16
+// mean(f - f_GSL): 8.1805907077643109e-17
+// variance(f - f_GSL): 3.8131160349224712e-32
+// stddev(f - f_GSL): 1.9527201629835421e-16
+const testcase_hyperg<double>
+data046[19] =
+{
+  { 0.84089972268671531, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.85410196624968460, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.86811566011579955, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.88303688022450522, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.89897948556635621, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91607978309961580, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93450283399425327, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.95445115010332193, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.97617696340303095, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0263340389897240, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0557280900008412, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0889331564394962, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1270166537925830, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.1715728752538095, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2251482265544145, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.2922212642709543, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.3819660112501042, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5194938532959121, 0.50000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler046 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data047[] = {
-  { 0.90992197313391499, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.91822592662244507, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.92687104566419531, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.93588628166548815, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.94530459215552909, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.95516374875247467, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.96550736800511827, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.97638624595136270, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.98786011482678993, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0128914530682316, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0266391040215350, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0413732738729464, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0572599536532992, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0745166004060953, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0934387388831386, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.1144486980714641, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.1381966011250106, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.1658171625342397, 0.50000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test047()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data047)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data047[i].a), Tp(data047[i].b),
-                   Tp(data047[i].c), Tp(data047[i].x));
-      const Tp f0 = data047[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.9508457915403988e-16
+// mean(f - f_GSL): 2.3373116307898031e-17
+// variance(f - f_GSL): 2.3146198993753289e-33
+// stddev(f - f_GSL): 4.8110496769159731e-17
+const testcase_hyperg<double>
+data047[19] =
+{
+  { 0.90992197313391454, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.91822592662244484, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.92687104566419554, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.93588628166548848, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.94530459215552909, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.95516374875247434, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.96550736800511816, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.97638624595136270, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.98786011482678993, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0128914530682316, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0266391040215350, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0413732738729464, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0572599536532992, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0745166004060953, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0934387388831386, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1144486980714641, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.1381966011250106, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.1658171625342397, 0.50000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler047 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data048[] = {
-  { 0.93641908369732885, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.94256349654111315, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.94890138508461319, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.95544578858430007, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.96221121193620718, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.96921386948293542, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.97647198488394704, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.98400616412578656, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.99183986544963032, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0085177124149158, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0174294150407122, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0267781897388850, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0366157405967285, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0470052068648839, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0580253905513313, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0697774741209765, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0823965556448414, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0960739512057103, 0.50000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test048()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data048)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data048[i].a), Tp(data048[i].b),
-                   Tp(data048[i].c), Tp(data048[i].x));
-      const Tp f0 = data048[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 4.5130734546221216e-16
+// mean(f - f_GSL): 4.6746232615796062e-17
+// variance(f - f_GSL): 1.2814504633219814e-34
+// stddev(f - f_GSL): 1.1320116886861114e-17
+const testcase_hyperg<double>
+data048[19] =
+{
+  { 0.93641908369732896, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.94256349654111271, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.94890138508461319, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.95544578858430029, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.96221121193620762, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.96921386948293542, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.97647198488394704, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.98400616412578656, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.99183986544963032, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0085177124149158, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0174294150407122, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0267781897388850, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0366157405967287, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0470052068648839, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0580253905513313, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0697774741209765, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0823965556448414, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0960739512057103, 0.50000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler048 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data049[] = {
-  { 0.95069883346936235, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.95559618047704165, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.96061938755931653, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.96577553912851344, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.97107239473807716, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.97651848528588503, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.98212322830227139, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.98789706736195781, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.99385164237825074, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0063568569383123, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0129389344715818, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0197653907773940, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0268583912277143, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0342438793937092, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0419526514766855, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0500219124976327, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0584976491907043, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0674385240268101, 0.50000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test049()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data049)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data049[i].a), Tp(data049[i].b),
-                   Tp(data049[i].c), Tp(data049[i].x));
-      const Tp f0 = data049[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 2.2476491960642283e-16
+// mean(f - f_GSL): -5.8432790769745078e-18
+// variance(f - f_GSL): 2.0022663489405960e-36
+// stddev(f - f_GSL): 1.4150146108576393e-18
+const testcase_hyperg<double>
+data049[19] =
+{
+  { 0.95069883346936235, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.95559618047704131, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.96061938755931664, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.96577553912851333, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.97107239473807716, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.97651848528588481, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.98212322830227128, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.98789706736195781, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.99385164237825074, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0063568569383123, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0129389344715818, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0197653907773940, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0268583912277143, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0342438793937092, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0419526514766855, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0500219124976327, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0584976491907043, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0674385240268101, 0.50000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler049 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data050[] = {
-  { 0.95968319138913893, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.96376169072755768, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.96792900082729316, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.97218942798115737, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.97654763592586857, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.98100869054353856, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.98557811238699278, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.99026193885795544, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.99506679842072221, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0050696417919618, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0102847452747090, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0156554225057022, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0211930882963096, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0269107343740711, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0328232917216298, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0389481230247195, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0453057164134614, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0519207114461246, 0.50000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=1.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test050()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data050)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data050[i].a), Tp(data050[i].b),
-                   Tp(data050[i].c), Tp(data050[i].x));
-      const Tp f0 = data050[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data050[19] =
+{
+  { 0.95968319138913905, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.96376169072755802, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.96792900082729372, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.97218942798115737, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.97654763592586835, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.98100869054353890, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.98557811238699278, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.99026193885795544, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.99506679842072221, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0050696417919618, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0102847452747090, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0156554225057022, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0211930882963096, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0269107343740711, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0328232917216298, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0389481230247195, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0453057164134614, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0519207114461246, 0.50000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler050 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data051[] = {
-  { 0.72547625011001171, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.74535599249992990, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.76696498884737041, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.79056941504209477, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.81649658092772603, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.84515425472851657, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.87705801930702920, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.91287092917527690, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.95346258924559224, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0540925533894598, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.1180339887498949, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.1952286093343938, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.2909944487358056, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.4142135623730949, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.5811388300841900, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.8257418583505536, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 2.2360679774997898, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 3.1622776601683782, 0.50000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test051()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data051)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data051[i].a), Tp(data051[i].b),
-                   Tp(data051[i].c), Tp(data051[i].x));
-      const Tp f0 = data051[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8577584504832499e-16
+// mean(f - f_GSL): 5.8432790769745078e-18
+// variance(f - f_GSL): 1.1262748212790853e-32
+// stddev(f - f_GSL): 1.0612609581432294e-16
+const testcase_hyperg<double>
+data051[19] =
+{
+  { 0.72547625011001160, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.74535599249992990, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.76696498884737041, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.79056941504209477, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.81649658092772603, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.84515425472851669, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.87705801930702931, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.91287092917527690, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.95346258924559224, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0540925533894598, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1180339887498949, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1952286093343938, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2909944487358058, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.4142135623730951, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.5811388300841900, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.8257418583505542, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2.2360679774997898, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 3.1622776601683809, 0.50000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler051 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data052[] = {
-  { 0.83664260086443798, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.85046584300227146, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.86509574979651593, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.88062082573041867, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.89714464248521586, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.91478946588967558, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.93370105322348573, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.95405511057700887, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.97606616007978142, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0261916902334731, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0550723519434702, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0872106588188091, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.1233801699379020, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.1646752981725688, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.2127272514219511, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.2701518651068637, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.3416407864998725, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.4374795179111102, 0.50000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test052()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data052)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data052[i].a), Tp(data052[i].b),
-                   Tp(data052[i].c), Tp(data052[i].x));
-      const Tp f0 = data052[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 6.6613381477509392e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.6340403913587147e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 2.0425119025543020e-32
+// stddev(f - f_GSL): 1.4291647569662155e-16
+const testcase_hyperg<double>
+data052[19] =
+{
+  { 0.83664260086443765, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.85046584300227079, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.86509574979651649, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.88062082573041911, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.89714464248521597, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91478946588967569, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93370105322348607, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.95405511057700887, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.97606616007978142, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0261916902334731, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0550723519434702, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0872106588188091, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1233801699379022, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.1646752981725688, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2127272514219511, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.2701518651068637, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.3416407864998725, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.4374795179111106, 0.50000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler052 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data053[] = {
-  { 0.88195381730235833, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.89265078469555093, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.90382937908303707, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.91553161389880577, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.92780530349281576, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.94070521140346042, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.95429450630523349, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.96864663325785849, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.98384775588541795, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0172258496884334, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0356742479163459, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0555293036908924, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0770231491562379, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.1004557416484888, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.1262270515731978, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.1548932919125086, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.1872757758134724, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.2247091713458949, 0.50000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test053()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data053)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data053[i].a), Tp(data053[i].b),
-                   Tp(data053[i].c), Tp(data053[i].x));
-      const Tp f0 = data053[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.3306690738754696e-16 at index 8
+// max(|f - f_GSL| / |f_GSL|): 3.3853500746952663e-16
+// mean(f - f_GSL): 1.1686558153949016e-17
+// variance(f - f_GSL): 2.5949371882270124e-33
+// stddev(f - f_GSL): 5.0940525990875012e-17
+const testcase_hyperg<double>
+data053[19] =
+{
+  { 0.88195381730235822, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.89265078469555081, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.90382937908303673, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.91553161389880600, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.92780530349281509, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.94070521140346020, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.95429450630523349, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.96864663325785849, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.98384775588541795, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0172258496884334, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0356742479163461, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0555293036908924, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0770231491562379, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.1004557416484888, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.1262270515731978, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1548932919125088, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.1872757758134724, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.2247091713458949, 0.50000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler053 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data054[] = {
-  { 0.90716919697107301, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.91592299407142519, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.92500027075874236, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.93442464185467167, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.94422248683737009, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.95442341810133347, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.96506085725516400, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.97617275213704069, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.98780247986309799, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0128233505813447, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0263406246541855, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0406326381700366, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0557966239802845, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0719515075786321, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0892457392422055, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.1078695188000958, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.1280752258974340, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.1502152002706476, 0.50000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test054()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data054)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data054[i].a), Tp(data054[i].b),
-                   Tp(data054[i].c), Tp(data054[i].x));
-      const Tp f0 = data054[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.9683492716399738e-16
+// mean(f - f_GSL): 1.7529837230923523e-17
+// variance(f - f_GSL): 2.4527762774522302e-33
+// stddev(f - f_GSL): 4.9525511380017369e-17
+const testcase_hyperg<double>
+data054[19] =
+{
+  { 0.90716919697107279, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.91592299407142508, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.92500027075874192, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.93442464185467122, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.94422248683737076, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.95442341810133347, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.96506085725516355, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.97617275213704069, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.98780247986309799, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0128233505813447, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0263406246541855, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0406326381700366, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0557966239802845, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0719515075786321, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0892457392422055, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1078695188000958, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.1280752258974340, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.1502152002706476, 0.50000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler054 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data055[] = {
-  { 0.92336416053263093, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.93078397248364519, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.93843714333600226, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.94633837784068076, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.95450388104967909, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.96295158125742764, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.97170139827854296, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.98077556918512687, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.99019904777750845, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0102104261941198, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0208669540935695, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0320118665407505, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0436944599504387, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0559728828278145, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0689166967761712, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0826105758119842, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0971599106346146, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.1126998828023964, 0.50000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=2.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test055()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data055)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data055[i].a), Tp(data055[i].b),
-                   Tp(data055[i].c), Tp(data055[i].x));
-      const Tp f0 = data055[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.3306690738754696e-16 at index 8
+// max(|f - f_GSL| / |f_GSL|): 3.3636359087105992e-16
+// mean(f - f_GSL): 2.9216395384872539e-17
+// variance(f - f_GSL): 2.1804680539963092e-33
+// stddev(f - f_GSL): 4.6695482158302094e-17
+const testcase_hyperg<double>
+data055[19] =
+{
+  { 0.92336416053263082, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.93078397248364542, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.93843714333600259, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.94633837784068098, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.95450388104967876, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.96295158125742752, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.97170139827854329, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.98077556918512687, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.99019904777750845, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0102104261941198, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0208669540935695, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0320118665407505, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0436944599504387, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0559728828278145, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0689166967761712, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0826105758119842, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0971599106346146, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.1126998828023964, 0.50000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler055 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data056[] = {
-  { 0.52275983209457511, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.54700336898142965, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.57468955512601971, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.60665490543315015, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.64403057859056123, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.68838183648623719, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.74193265039311085, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.80794095908995300, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.89135275749639320, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.1469266219310688, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.3552340708357489, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.6690840478838305, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 2.1815415453174483, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 3.1156892546032235, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 5.1109077417760416, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 10.560352936466296, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 33.541019662496815, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 300.66343065819501, 0.50000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test056()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data056)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data056[i].a), Tp(data056[i].b),
-                   Tp(data056[i].c), Tp(data056[i].x));
-      const Tp f0 = data056[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.5474735088646412e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5124797514980592e-15
+// mean(f - f_GSL): 2.5336458077761468e-14
+// variance(f - f_GSL): 1.0813211674051158e-26
+// stddev(f - f_GSL): 1.0398659372270619e-13
+const testcase_hyperg<double>
+data056[19] =
+{
+  { 0.52275983209457544, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.54700336898143009, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.57468955512602038, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.60665490543315048, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.64403057859056190, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.68838183648623719, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.74193265039311118, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.80794095908995300, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.89135275749639320, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1469266219310688, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3552340708357493, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.6690840478838305, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.1815415453174500, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 3.1156892546032235, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 5.1109077417760416, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 10.560352936466318, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 33.541019662496815, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 300.66343065819723, 0.50000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler056 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data057[] = {
-  { 0.68252041951139264, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.70394732624993395, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.72748884971552041, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.75351147371199689, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.78247589005573748, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.81497017420249818, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.85175826875009564, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.89385278481745867, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.94262778709507411, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0687327277420910, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.1529725508983291, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.2592587134058799, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.3985773194637892, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.5909902576697317, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.8776023607249752, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 2.3582499003694646, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 3.3541019662496838, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 6.7198400278577859, 0.50000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test057()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data057)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data057[i].a), Tp(data057[i].b),
-                   Tp(data057[i].c), Tp(data057[i].x));
-      const Tp f0 = data057[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8.8817841970012523e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3217255411112292e-15
+// mean(f - f_GSL): 6.8950693108299193e-16
+// variance(f - f_GSL): 3.9356627445430313e-30
+// stddev(f - f_GSL): 1.9838504844224102e-15
+const testcase_hyperg<double>
+data057[19] =
+{
+  { 0.68252041951139286, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.70394732624993395, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.72748884971552052, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.75351147371199667, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.78247589005573737, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.81497017420249795, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.85175826875009608, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.89385278481745867, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.94262778709507411, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0687327277420910, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1529725508983291, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.2592587134058799, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.3985773194637896, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.5909902576697317, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.8776023607249752, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.3582499003694664, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 3.3541019662496838, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 6.7198400278578028, 0.50000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler057 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data058[] = {
-  { 0.75755211927082589, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.77603550233010998, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.79596241913438492, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.81753360792105201, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.84099165409805521, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.86663303852180873, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.89482475828629970, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.92602774279590350, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.96083064727087386, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0445570841313008, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0959004638926031, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.1560106261370562, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.2278121770678145, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.3158640214709998, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.4278095344155000, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.5778700502946612, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.7972173289196469, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 2.1789970569269732, 0.50000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test058()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data058)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data058[i].a), Tp(data058[i].b),
-                   Tp(data058[i].c), Tp(data058[i].x));
-      const Tp f0 = data058[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.6645352591003757e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2228264607471081e-15
+// mean(f - f_GSL): 2.2788788400200583e-16
+// variance(f - f_GSL): 3.4817209315093131e-31
+// stddev(f - f_GSL): 5.9006109272763554e-16
+const testcase_hyperg<double>
+data058[19] =
+{
+  { 0.75755211927082600, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.77603550233010965, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.79596241913438504, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.81753360792105212, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.84099165409805532, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.86663303852180906, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.89482475828629915, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.92602774279590350, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.96083064727087386, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0445570841313008, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0959004638926033, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1560106261370562, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2278121770678148, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.3158640214709998, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.4278095344155000, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.5778700502946617, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.7972173289196469, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.1789970569269732, 0.50000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler058 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data059[] = {
-  { 0.80270093579329471, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.81884974572462788, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.83605266330015271, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.85443340762795972, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.87413762182790655, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.89533826626907331, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.91824276674115268, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.94310265050720576, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.97022678857609712, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0329098673199812, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0695865684573389, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.1108642103944570, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.1578795055970506, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.2122394794169442, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.2763274721556934, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.3539179650251021, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.4515986118197148, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.5829284571614219, 0.50000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test059()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data059)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data059[i].a), Tp(data059[i].b),
-                   Tp(data059[i].c), Tp(data059[i].x));
-      const Tp f0 = data059[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8.8817841970012523e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.6109827053892650e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 3.8685788127881258e-32
+// stddev(f - f_GSL): 1.9668703090921186e-16
+const testcase_hyperg<double>
+data059[19] =
+{
+  { 0.80270093579329460, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.81884974572462765, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.83605266330015260, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.85443340762796027, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.87413762182790711, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.89533826626907298, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.91824276674115313, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.94310265050720576, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.97022678857609712, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0329098673199812, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0695865684573389, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1108642103944570, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1578795055970506, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.2122394794169442, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2763274721556934, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.3539179650251021, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.4515986118197148, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5829284571614224, 0.50000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler059 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data060[] = {
-  { 0.83322694172301959, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.84753931604765664, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.86265784532195022, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.87866479300707079, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.89565516540263501, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.91373946207610557, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.93304721345881891, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.95373159512905148, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.97597554238828121, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0260752851887982, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0545371197996178, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0858099017045830, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.1204416568688709, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.1591587835964847, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.2029564720303347, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.2532588722007874, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.3122319926925459, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.3834948587364100, 0.50000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=5.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test060()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data060)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data060[i].a), Tp(data060[i].b),
-                   Tp(data060[i].c), Tp(data060[i].x));
-      const Tp f0 = data060[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.2099086385883890e-16
+// mean(f - f_GSL): 5.8432790769745078e-17
+// variance(f - f_GSL): 8.7218722159852367e-33
+// stddev(f - f_GSL): 9.3390964316604188e-17
+const testcase_hyperg<double>
+data060[19] =
+{
+  { 0.83322694172301981, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.84753931604765675, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.86265784532195022, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.87866479300707090, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.89565516540263501, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91373946207610557, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93304721345881914, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.95373159512905148, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.97597554238828121, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0260752851887982, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0545371197996178, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0858099017045830, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1204416568688709, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.1591587835964847, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2029564720303347, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.2532588722007874, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.3122319926925459, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.3834948587364102, 0.50000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler060 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=10.000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data061[] = {
-  { 0.37727530159464628, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.39816010922169010, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.42283703041362453, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.45255640448730505, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.48919507154431141, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.53569358917731880, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.59689778897029566, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.68128587569875731, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.80478739308790359, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.3408664196153621, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 2.0175364359923860, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 3.6011214553736646, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 8.1799429939495312, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 25.644834637536000, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 123.13738891597615, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1088.7122410321333, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 27358.291704709951, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 8174369.0266731177, 0.50000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=10.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test061()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data061)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data061[i].a), Tp(data061[i].b),
-                   Tp(data061[i].c), Tp(data061[i].x));
-      const Tp f0 = data061[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.4901161193847656e-08 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8229127098647768e-15
+// mean(f - f_GSL): 7.8543415046726153e-10
+// variance(f - f_GSL): 1.1684633485497506e-17
+// stddev(f - f_GSL): 3.4182793164832956e-09
+const testcase_hyperg<double>
+data061[19] =
+{
+  { 0.37727530159464628, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.39816010922169059, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.42283703041362447, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.45255640448730527, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.48919507154431119, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.53569358917731902, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.59689778897029577, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.68128587569875765, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.80478739308790359, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3408664196153621, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.0175364359923882, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 3.6011214553736646, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 8.1799429939495489, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 25.644834637536000, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 123.13738891597615, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1088.7122410321385, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 27358.291704709951, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 8174369.0266732639, 0.50000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler061 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=10.000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data062[] = {
-  { 0.53905528308450834, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.56235533974376162, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.58887657983263575, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.61941227047262915, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.65504896640793853, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.69731666644529999, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.74844073299399128, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.81178446800105752, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.89266981277598023, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.1497248473106778, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.3729717112654571, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.7374982340374392, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 2.4134479340960580, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 3.9191255240471192, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 8.3316373077761270, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 28.323020339843335, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 225.84286572747891, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 12757.127591286655, 0.50000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=10.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test062()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data062)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data062[i].a), Tp(data062[i].b),
-                   Tp(data062[i].c), Tp(data062[i].x));
-      const Tp f0 = data062[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.0008883439004421e-11 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5684473872214445e-15
+// mean(f - f_GSL): 1.0626587329385841e-12
+// variance(f - f_GSL): 2.1050090066796454e-23
+// stddev(f - f_GSL): 4.5880377141863658e-12
+const testcase_hyperg<double>
+data062[19] =
+{
+  { 0.53905528308450823, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.56235533974376162, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.58887657983263575, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.61941227047262937, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.65504896640793864, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.69731666644529977, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.74844073299399116, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.81178446800105830, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.89266981277598045, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1497248473106778, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3729717112654578, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.7374982340374392, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.4134479340960602, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 3.9191255240471192, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 8.3316373077761270, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 28.323020339843417, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 225.84286572747891, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 12757.127591286826, 0.50000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler062 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=10.000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data063[] = {
-  { 0.62672622092226071, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.64931010269769829, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.67448067519076316, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.70276306239803676, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.73484179773087555, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.77162761412743897, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.81436116844816531, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.86477994787944557, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.92539820516603888, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0945599448210315, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.2190897395597264, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.3916844336856475, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.6484497630432013, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 2.0717772717131155, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 2.8893613630810924, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 4.9459404075413529, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 13.487394149998716, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 136.57616044013972, 0.50000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=10.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test063()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data063)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data063[i].a), Tp(data063[i].b),
-                   Tp(data063[i].c), Tp(data063[i].x));
-      const Tp f0 = data063[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.9895196601282805e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4567107859209851e-15
+// mean(f - f_GSL): 1.1043797455481820e-14
+// variance(f - f_GSL): 2.0706176432127926e-27
+// stddev(f - f_GSL): 4.5504039855959963e-14
+const testcase_hyperg<double>
+data063[19] =
+{
+  { 0.62672622092226027, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.64931010269769840, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.67448067519076293, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.70276306239803643, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.73484179773087521, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.77162761412743874, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.81436116844816553, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.86477994787944579, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.92539820516603888, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0945599448210315, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2190897395597269, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.3916844336856475, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.6484497630432020, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 2.0717772717131155, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2.8893613630810924, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 4.9459404075413573, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 13.487394149998716, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 136.57616044014080, 0.50000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler063 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=10.000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data064[] = {
-  { 0.68421604440344341, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.70548098055548891, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.72884342311710348, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.75466953437856243, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.78342090924662600, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.81568884278645049, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.85224480241465206, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.89411692571131696, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.94270986892954756, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0688682849120232, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.1537004376097553, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.2615455028370031, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.4045541456153436, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.6057216489444517, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.9146603020550739, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 2.4617931307620298, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 3.7267799624996498, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 9.3880118036248401, 0.50000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=10.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test064()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data064)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data064[i].a), Tp(data064[i].b),
-                   Tp(data064[i].c), Tp(data064[i].x));
-      const Tp f0 = data064[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.2434497875801753e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3245081211977792e-15
+// mean(f - f_GSL): 8.5311874523827817e-16
+// variance(f - f_GSL): 7.8655509529357183e-30
+// stddev(f - f_GSL): 2.8045589587198410e-15
+const testcase_hyperg<double>
+data064[19] =
+{
+  { 0.68421604440344319, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.70548098055548925, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.72884342311710337, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.75466953437856232, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.78342090924662589, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.81568884278645115, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.85224480241465261, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.89411692571131685, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.94270986892954811, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0688682849120232, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1537004376097553, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.2615455028370031, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.4045541456153443, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.6057216489444517, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.9146603020550739, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.4617931307620307, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 3.7267799624996498, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 9.3880118036248721, 0.50000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler064 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=10.000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data065[] = {
-  { 0.72547625011001171, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.74535599249992990, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.76696498884737041, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.79056941504209477, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.81649658092772603, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.84515425472851657, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.87705801930702920, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.91287092917527690, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.95346258924559224, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0540925533894598, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.1180339887498949, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.1952286093343938, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.2909944487358056, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.4142135623730949, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.5811388300841900, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.8257418583505536, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 2.2360679774997898, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 3.1622776601683782, 0.50000000000000000, 10.000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=10.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test065()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data065)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data065[i].a), Tp(data065[i].b),
-                   Tp(data065[i].c), Tp(data065[i].x));
-      const Tp f0 = data065[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8577584504832499e-16
+// mean(f - f_GSL): 5.8432790769745078e-18
+// variance(f - f_GSL): 1.1262748212790853e-32
+// stddev(f - f_GSL): 1.0612609581432294e-16
+const testcase_hyperg<double>
+data065[19] =
+{
+  { 0.72547625011001160, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.74535599249992990, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.76696498884737041, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.79056941504209477, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.81649658092772603, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.84515425472851669, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.87705801930702931, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.91287092917527690, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.95346258924559224, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0540925533894598, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1180339887498949, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1952286093343938, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2909944487358058, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.4142135623730951, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.5811388300841900, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.8257418583505542, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 2.2360679774997898, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 3.1622776601683809, 0.50000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler065 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=20.000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data066[] = {
-  { 0.26690449940521566, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.28252302866181805, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.30123616141153819, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.32421384687602628, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.35334630811776752, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.39191793127467034, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.44620488618129206, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.52980896919265685, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.67754711477562357, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.9567557771780317, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 6.1816042148333086, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 35.653088618561227, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 377.51482843179906, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 7645.8816551195359, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 354791.74537980522, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 57009889.966638684, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 83771357024.863937, 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 25866972896376408., 0.50000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=20.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test066()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data066)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data066[i].a), Tp(data066[i].b),
-                   Tp(data066[i].c), Tp(data066[i].x));
-      const Tp f0 = data066[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 48.000000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8556481344874416e-15
+// mean(f - f_GSL): 2.5263190030329112
+// variance(f - f_GSL): 121.26314075575490
+// stddev(f - f_GSL): 11.011954447588080
+const testcase_hyperg<double>
+data066[19] =
+{
+  { 0.26690449940521549, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.28252302866181833, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.30123616141153836, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.32421384687602633, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.35334630811776774, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.39191793127466995, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.44620488618129212, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.52980896919265719, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.67754711477562324, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.9567557771780317, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 6.1816042148333272, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 35.653088618561227, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 377.51482843180133, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 7645.8816551195359, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 354791.74537980522, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 57009889.966639392, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 83771357024.863937, 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 25866972896377436., 0.50000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler066 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=20.000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data067[] = {
-  { 0.40342659436153405, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.42420571192034318, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.44852768286073008, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.47751245808592863, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.51283632632707754, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.55713468814894307, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.61481320817757312, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.69383483410097202, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.81012002526006033, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.3622225506603911, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 2.2349513086109001, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 5.1864917536761723, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 21.020560423779411, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 175.19649997100612, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 3467.1587803688708, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 225003.88683445856, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 110837674.65652709, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 6688966964170.6807, 0.50000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=20.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test067()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data067)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data067[i].a), Tp(data067[i].b),
-                   Tp(data067[i].c), Tp(data067[i].x));
-      const Tp f0 = data067[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.011718750000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7519521419033478e-15
+// mean(f - f_GSL): 0.00061678102606403001
+// variance(f - f_GSL): 7.2278413174892008e-06
+// stddev(f - f_GSL): 0.0026884644906506020
+const testcase_hyperg<double>
+data067[19] =
+{
+  { 0.40342659436153389, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.42420571192034318, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.44852768286073041, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.47751245808592863, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.51283632632707765, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.55713468814894329, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.61481320817757346, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.69383483410097213, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.81012002526006044, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3622225506603911, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.2349513086109027, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 5.1864917536761723, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 21.020560423779497, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 175.19649997100612, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 3467.1587803688708, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 225003.88683446089, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 110837674.65652709, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 6688966964170.9326, 0.50000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler067 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=20.000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data068[] = {
-  { 0.48716309885816761, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.50965859152542281, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.53554809210658971, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.56576689207507136, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.60164849637133688, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.64516711595404375, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.69938278735493542, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.76931621518401860, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.86381808725530695, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.2152051956815531, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.6052546785425543, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 2.4765586046012635, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 5.1564492216997486, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 18.446158392136365, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 150.44577670123971, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 3862.6317400115768, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 632428.34833625401, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 7426927663.3808765, 0.50000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=20.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test068()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data068)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data068[i].a), Tp(data068[i].b),
-                   Tp(data068[i].c), Tp(data068[i].x));
-      const Tp f0 = data068[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.4305114746093750e-05 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9261147266353426e-15
+// mean(f - f_GSL): 7.5292535813082699e-07
+// variance(f - f_GSL): 1.0770292922645316e-11
+// stddev(f - f_GSL): 3.2818124447697064e-06
+const testcase_hyperg<double>
+data068[19] =
+{
+  { 0.48716309885816822, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.50965859152542337, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.53554809210658938, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.56576689207507136, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.60164849637133655, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.64516711595404408, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.69938278735493553, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.76931621518401860, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.86381808725530662, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.2152051956815531, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.6052546785425557, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 2.4765586046012635, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 5.1564492216997611, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 18.446158392136365, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 150.44577670123971, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3862.6317400116104, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 632428.34833625401, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 7426927663.3810987, 0.50000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler068 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=20.000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data069[] = {
-  { 0.54703266209548362, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.56997321774144971, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.59603026159654970, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.62596978851120511, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.66084565876898926, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.70215256667232839, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.75208916592008568, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.81403631111658648, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.89348608489854608, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.1517793185139173, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.3878110313656598, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.8061071794572381, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 2.7148594517859586, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 5.4529435709049361, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 19.487310275377109, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 191.69079165937470, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 10218.543981792311, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 23160836.646583911, 0.50000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=20.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test069()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data069)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data069[i].a), Tp(data069[i].b),
-                   Tp(data069[i].c), Tp(data069[i].x));
-      const Tp f0 = data069[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.0978193283081055e-08 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7692881266931270e-15
+// mean(f - f_GSL): 2.1571346930926438e-09
+// variance(f - f_GSL): 8.8377830897836260e-17
+// stddev(f - f_GSL): 9.4009484041683924e-09
+const testcase_hyperg<double>
+data069[19] =
+{
+  { 0.54703266209548373, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.56997321774144960, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.59603026159654982, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.62596978851120511, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.66084565876898915, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.70215256667232862, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.75208916592008568, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.81403631111658625, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.89348608489854597, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1517793185139173, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3878110313656606, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.8061071794572381, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.7148594517859612, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 5.4529435709049361, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 19.487310275377109, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 191.69079165937592, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 10218.543981792311, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 23160836.646584522, 0.50000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler069 = 2.5000000000000020e-13;
 
 // Test data for a=0.50000000000000000, b=20.000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data070[] = {
-  { 0.59292067298616002, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.61572496720679915, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.64135339122875623, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.67043457419280483, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.70380956268170980, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.74263251901495231, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.78853555445528278, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.84391122775673766, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.91242401018807406, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.1169059681274873, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.2825928301302667, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.5385937789924939, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.9895771187893898, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 2.9707335806970168, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 6.0299506157180467, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 24.259090336955577, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 406.27267173257223, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 174330.03997220192, 0.50000000000000000, 20.000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=0.50000000000000000, b=20.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test070()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data070)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data070[i].a), Tp(data070[i].b),
-                   Tp(data070[i].c), Tp(data070[i].x));
-      const Tp f0 = data070[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.9103830456733704e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6694673196526424e-15
+// mean(f - f_GSL): 1.5333453804912193e-11
+// variance(f - f_GSL): 4.4575621294589140e-21
+// stddev(f - f_GSL): 6.6764976817631821e-11
+const testcase_hyperg<double>
+data070[19] =
+{
+  { 0.59292067298616025, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.61572496720679892, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.64135339122875590, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.67043457419280461, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.70380956268170969, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.74263251901495264, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.78853555445528289, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.84391122775673755, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.91242401018807373, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1169059681274873, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2825928301302669, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.5385937789924939, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.9895771187893914, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 2.9707335806970168, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 6.0299506157180467, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 24.259090336955669, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 406.27267173257223, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 174330.03997220617, 0.50000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler070 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data071[] = {
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test071()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data071)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data071[i].a), Tp(data071[i].b),
-                   Tp(data071[i].c), Tp(data071[i].x));
-      const Tp f0 = data071[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data071[19] =
+{
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler071 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data072[] = {
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test072()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data072)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data072[i].a), Tp(data072[i].b),
-                   Tp(data072[i].c), Tp(data072[i].x));
-      const Tp f0 = data072[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data072[19] =
+{
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler072 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data073[] = {
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test073()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data073)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data073[i].a), Tp(data073[i].b),
-                   Tp(data073[i].c), Tp(data073[i].x));
-      const Tp f0 = data073[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data073[19] =
+{
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler073 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data074[] = {
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test074()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data074)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data074[i].a), Tp(data074[i].b),
-                   Tp(data074[i].c), Tp(data074[i].x));
-      const Tp f0 = data074[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data074[19] =
+{
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler074 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data075[] = {
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test075()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data075)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data075[i].a), Tp(data075[i].b),
-                   Tp(data075[i].c), Tp(data075[i].x));
-      const Tp f0 = data075[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data075[19] =
+{
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler075 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data076[] = {
-  { 0.84089972268671609, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.85410196624968437, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.86811566011579933, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.88303688022450544, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.89897948556635565, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.91607978309961580, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.93450283399425305, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.95445115010332193, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.97617696340303095, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0263340389897240, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0557280900008410, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0889331564394962, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.1270166537925830, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.1715728752538095, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.2251482265544145, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.2922212642709541, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.3819660112501042, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.5194938532959119, 1.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test076()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data076)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data076[i].a), Tp(data076[i].b),
-                   Tp(data076[i].c), Tp(data076[i].x));
-      const Tp f0 = data076[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8.8817841970012523e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.8452254859313207e-16
+// mean(f - f_GSL): 8.1805907077643109e-17
+// variance(f - f_GSL): 3.8131160349224712e-32
+// stddev(f - f_GSL): 1.9527201629835421e-16
+const testcase_hyperg<double>
+data076[19] =
+{
+  { 0.84089972268671531, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.85410196624968460, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.86811566011579955, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.88303688022450522, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.89897948556635621, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91607978309961580, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93450283399425327, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.95445115010332193, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.97617696340303095, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0263340389897240, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0557280900008412, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0889331564394962, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1270166537925830, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.1715728752538095, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2251482265544145, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.2922212642709543, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.3819660112501042, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5194938532959121, 1.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler076 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data077[] = {
-  { 0.90992197313391499, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.91822592662244507, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.92687104566419531, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.93588628166548815, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.94530459215552909, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.95516374875247467, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.96550736800511827, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.97638624595136270, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.98786011482678993, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0128914530682316, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0266391040215350, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0413732738729464, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0572599536532992, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0745166004060953, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0934387388831386, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.1144486980714641, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.1381966011250106, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.1658171625342397, 1.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test077()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data077)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data077[i].a), Tp(data077[i].b),
-                   Tp(data077[i].c), Tp(data077[i].x));
-      const Tp f0 = data077[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.9508457915403988e-16
+// mean(f - f_GSL): 2.3373116307898031e-17
+// variance(f - f_GSL): 2.3146198993753289e-33
+// stddev(f - f_GSL): 4.8110496769159731e-17
+const testcase_hyperg<double>
+data077[19] =
+{
+  { 0.90992197313391454, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.91822592662244484, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.92687104566419554, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.93588628166548848, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.94530459215552909, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.95516374875247434, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.96550736800511816, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.97638624595136270, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.98786011482678993, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0128914530682316, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0266391040215350, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0413732738729464, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0572599536532992, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0745166004060953, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0934387388831386, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1144486980714641, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.1381966011250106, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.1658171625342397, 1.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler077 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data078[] = {
-  { 0.93641908369732885, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.94256349654111315, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.94890138508461319, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.95544578858430007, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.96221121193620718, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.96921386948293542, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.97647198488394704, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.98400616412578656, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.99183986544963032, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0085177124149158, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0174294150407122, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0267781897388850, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0366157405967285, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0470052068648839, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0580253905513313, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0697774741209765, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0823965556448414, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0960739512057103, 1.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test078()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data078)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data078[i].a), Tp(data078[i].b),
-                   Tp(data078[i].c), Tp(data078[i].x));
-      const Tp f0 = data078[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 4.5130734546221216e-16
+// mean(f - f_GSL): 4.6746232615796062e-17
+// variance(f - f_GSL): 1.2814504633219814e-34
+// stddev(f - f_GSL): 1.1320116886861114e-17
+const testcase_hyperg<double>
+data078[19] =
+{
+  { 0.93641908369732896, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.94256349654111271, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.94890138508461319, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.95544578858430029, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.96221121193620762, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.96921386948293542, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.97647198488394704, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.98400616412578656, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.99183986544963032, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0085177124149158, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0174294150407122, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0267781897388850, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0366157405967287, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0470052068648839, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0580253905513313, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0697774741209765, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0823965556448414, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0960739512057103, 1.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler078 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data079[] = {
-  { 0.95069883346936235, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.95559618047704165, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.96061938755931653, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.96577553912851344, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.97107239473807716, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.97651848528588503, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.98212322830227139, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.98789706736195781, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.99385164237825074, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0063568569383123, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0129389344715818, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0197653907773940, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0268583912277143, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0342438793937092, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0419526514766855, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0500219124976327, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0584976491907043, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0674385240268101, 1.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test079()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data079)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data079[i].a), Tp(data079[i].b),
-                   Tp(data079[i].c), Tp(data079[i].x));
-      const Tp f0 = data079[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 2.2476491960642283e-16
+// mean(f - f_GSL): -5.8432790769745078e-18
+// variance(f - f_GSL): 2.0022663489405960e-36
+// stddev(f - f_GSL): 1.4150146108576393e-18
+const testcase_hyperg<double>
+data079[19] =
+{
+  { 0.95069883346936235, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.95559618047704131, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.96061938755931664, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.96577553912851333, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.97107239473807716, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.97651848528588481, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.98212322830227128, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.98789706736195781, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.99385164237825074, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0063568569383123, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0129389344715818, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0197653907773940, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0268583912277143, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0342438793937092, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0419526514766855, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0500219124976327, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0584976491907043, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0674385240268101, 1.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler079 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data080[] = {
-  { 0.95968319138913893, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.96376169072755768, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.96792900082729316, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.97218942798115737, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.97654763592586857, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.98100869054353856, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.98557811238699278, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.99026193885795544, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.99506679842072221, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0050696417919618, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0102847452747090, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0156554225057022, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0211930882963096, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0269107343740711, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0328232917216298, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0389481230247195, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0453057164134614, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0519207114461246, 1.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test080()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data080)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data080[i].a), Tp(data080[i].b),
-                   Tp(data080[i].c), Tp(data080[i].x));
-      const Tp f0 = data080[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data080[19] =
+{
+  { 0.95968319138913905, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.96376169072755802, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.96792900082729372, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.97218942798115737, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.97654763592586835, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.98100869054353890, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.98557811238699278, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.99026193885795544, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.99506679842072221, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0050696417919618, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0102847452747090, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0156554225057022, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0211930882963096, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0269107343740711, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0328232917216298, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0389481230247195, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0453057164134614, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0519207114461246, 1.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler080 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data081[] = {
-  { 0.71317098463599404, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.73473333112764871, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.75804035866024377, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.78333938207622600, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.81093021621632877, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.84118059155303226, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.87454754822497005, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.91160778396977304, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.95310179804324857, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0536051565782629, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.1157177565710485, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.1889164797957747, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.2770640594149765, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.3862943611198899, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.5271512197902593, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.7199611490370503, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 2.0117973905426232, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 2.5584278811044912, 1.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test081()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data081)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data081[i].a), Tp(data081[i].b),
-                   Tp(data081[i].c), Tp(data081[i].x));
-      const Tp f0 = data081[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.5527136788005009e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3886315518367350e-15
+// mean(f - f_GSL): 2.6879083754082737e-16
+// variance(f - f_GSL): 6.3240381271479359e-31
+// stddev(f - f_GSL): 7.9523821130199324e-16
+const testcase_hyperg<double>
+data081[19] =
+{
+  { 0.71317098463599415, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.73473333112764883, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.75804035866024344, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.78333938207622589, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.81093021621632866, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.84118059155303215, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.87454754822497005, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.91160778396977304, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.95310179804324857, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0536051565782629, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1157177565710485, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1889164797957747, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2770640594149769, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.3862943611198899, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.5271512197902593, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.7199611490370503, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2.0117973905426232, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.5584278811044925, 1.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler081 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data082[] = {
-  { 0.83165649828125576, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.84626246650116577, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.86165287670267410, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.87790681762615241, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.89511583784087689, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.91338673957393823, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.93284521667331954, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.95364066873549813, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.97595268969924187, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0260530485179122, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0544523154103413, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0856358366643180, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.1201824010510930, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.1588830833596719, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.2028682930536780, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.2538561433469468, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.3147120107267418, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.3910528844853491, 1.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test082()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data082)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data082[i].a), Tp(data082[i].b),
-                   Tp(data082[i].c), Tp(data082[i].x));
-      const Tp f0 = data082[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.1924682001889760e-16
+// mean(f - f_GSL): 6.4276069846719592e-17
+// variance(f - f_GSL): 8.4595753242740185e-33
+// stddev(f - f_GSL): 9.1975949705746545e-17
+const testcase_hyperg<double>
+data082[19] =
+{
+  { 0.83165649828125487, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.84626246650116621, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.86165287670267476, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.87790681762615264, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.89511583784087634, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91338673957393823, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93284521667332010, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.95364066873549813, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.97595268969924187, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0260530485179122, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0544523154103413, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0856358366643180, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1201824010510930, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.1588830833596719, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2028682930536780, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.2538561433469468, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.3147120107267418, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.3910528844853491, 1.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler082 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data083[] = {
-  { 0.87917686994924527, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.89033956110358414, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.90196195126098366, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.91408080149514692, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.92673756761314952, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.93997926630123407, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.95385955885019291, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.96844012412988900, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.98379242268046208, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0171615499181177, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0353950776091037, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0548437030651112, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0756840039415978, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0981384722661196, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.1224950318916129, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.1491396357184527, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.1786158344507012, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.2117500593515478, 1.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test083()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data083)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data083[i].a), Tp(data083[i].b),
-                   Tp(data083[i].c), Tp(data083[i].x));
-      const Tp f0 = data083[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 4.5856134910670077e-16
+// mean(f - f_GSL): 5.2589511692770570e-17
+// variance(f - f_GSL): 8.9881736403943358e-33
+// stddev(f - f_GSL): 9.4805978927461832e-17
+const testcase_hyperg<double>
+data083[19] =
+{
+  { 0.87917686994924560, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.89033956110358403, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.90196195126098355, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.91408080149514681, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.92673756761314952, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.93997926630123430, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.95385955885019325, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.96844012412988900, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.98379242268046208, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0171615499181177, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0353950776091039, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0548437030651112, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0756840039415978, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0981384722661196, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.1224950318916129, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1491396357184527, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.1786158344507012, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.2117500593515478, 1.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler083 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data084[] = {
-  { 0.90538259348578409, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.91444830598832050, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.92381915945974002, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.93351553488501815, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.94356001859234884, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.95397775039949584, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.96479684710618019, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.97604892281308531, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.98776973540356938, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0127864273812119, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0261830717772533, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0402531144740719, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0550712790827002, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0707271945059007, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0873302420658923, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.1050168587085545, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.1239622188477687, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.1444006183097781, 1.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test084()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data084)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data084[i].a), Tp(data084[i].b),
-                   Tp(data084[i].c), Tp(data084[i].x));
-      const Tp f0 = data084[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.9755522134245812e-16
+// mean(f - f_GSL): 1.7529837230923523e-17
+// variance(f - f_GSL): 1.8020397140465364e-35
+// stddev(f - f_GSL): 4.2450438325729174e-18
+const testcase_hyperg<double>
+data084[19] =
+{
+  { 0.90538259348578420, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.91444830598832061, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.92381915945973991, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.93351553488501793, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.94356001859234861, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.95397775039949628, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.96479684710618008, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.97604892281308531, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.98776973540356938, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0127864273812119, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0261830717772533, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0402531144740719, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0550712790827002, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0707271945059007, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0873302420658923, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1050168587085545, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.1239622188477687, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.1444006183097781, 1.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler084 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data085[] = {
-  { 0.92211295632330403, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.92975727737040659, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.93761992348333467, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.94571346180587801, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.95405164371146867, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.96264956879205954, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.97152388013493096, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.98069299877709348, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.99017740778385854, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0101865087004833, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0207660479892111, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0317718013185031, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0432419144892398, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0552206786504446, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0677601383233675, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0809223485579968, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0947826783002668, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.1094349304493603, 1.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test085()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data085)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data085[i].a), Tp(data085[i].b),
-                   Tp(data085[i].c), Tp(data085[i].x));
-      const Tp f0 = data085[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.0014207127505480e-16
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 2.8912726078702206e-33
+// stddev(f - f_GSL): 5.3770555212590287e-17
+const testcase_hyperg<double>
+data085[19] =
+{
+  { 0.92211295632330392, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.92975727737040625, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.93761992348333489, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.94571346180587790, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.95405164371146900, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.96264956879205987, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.97152388013493107, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.98069299877709348, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.99017740778385854, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0101865087004833, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0207660479892111, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0317718013185031, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0432419144892398, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0552206786504446, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0677601383233675, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0809223485579968, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0947826783002668, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.1094349304493603, 1.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler085 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data086[] = {
-  { 0.52631578947368429, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.55555555555555558, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.58823529411764708, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.62500000000000000, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.66666666666666663, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.71428571428571430, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.76923076923076927, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.83333333333333337, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.90909090909090906, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.1111111111111112, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.2500000000000000, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.4285714285714286, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.6666666666666663, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 2.0000000000000000, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 2.5000000000000004, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 3.3333333333333330, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 5.0000000000000009, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 9.9999999999999929, 1.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test086()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data086)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data086[i].a), Tp(data086[i].b),
-                   Tp(data086[i].c), Tp(data086[i].x));
-      const Tp f0 = data086[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.7763568394002505e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9984014443252816e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 1.6955391669463862e-31
+// stddev(f - f_GSL): 4.1176925175957300e-16
+const testcase_hyperg<double>
+data086[19] =
+{
+  { 0.52631578947368429, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.55555555555555558, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.58823529411764708, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.62500000000000000, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.66666666666666663, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.71428571428571430, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.76923076923076938, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.83333333333333337, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.90909090909090906, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1111111111111112, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2500000000000002, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.4285714285714286, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.6666666666666670, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 2.0000000000000000, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2.5000000000000009, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3.3333333333333348, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 5.0000000000000009, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 10.000000000000011, 1.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler086 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data087[] = {
-  { 0.70351947549341520, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.72637503722092711, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.75099661564391251, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.77761647796730871, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.80651221621216451, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.83801894346580275, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.87254582050258467, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.91059888544083678, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.95281329145592386, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0532154477379738, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.1138692114741471, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.1838976095305187, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.2660586631630237, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.3644676665613118, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.4856585347316102, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.6409590443536872, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.8528798927325769, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 2.1789423102929644, 1.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test087()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data087)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data087[i].a), Tp(data087[i].b),
-                   Tp(data087[i].c), Tp(data087[i].x));
-      const Tp f0 = data087[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.6645352591003757e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2228571846595245e-15
+// mean(f - f_GSL): 1.9282820954015878e-16
+// variance(f - f_GSL): 3.5826351554959189e-31
+// stddev(f - f_GSL): 5.9855118039278136e-16
+const testcase_hyperg<double>
+data087[19] =
+{
+  { 0.70351947549341554, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.72637503722092756, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.75099661564391240, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.77761647796730871, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.80651221621216473, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.83801894346580275, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.87254582050258456, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.91059888544083678, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.95281329145592386, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0532154477379738, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1138692114741471, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1838976095305187, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2660586631630240, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.3644676665613118, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.4856585347316102, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.6409590443536872, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.8528798927325769, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.1789423102929653, 1.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler087 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data088[] = {
-  { 0.78068027379106253, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.79924541976981278, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.81891305585650942, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.83979799626213270, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.86203315303160166, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.88577352485361693, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.91120135738402208, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.93853291956703588, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.96802755388922956, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0348375559194773, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0730246119544820, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.1151788396279341, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.1621066403893472, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.2148922218710421, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.2750496810838674, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.3448048570872917, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.4276833109859521, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.5299976259379788, 1.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test088()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data088)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data088[i].a), Tp(data088[i].b),
-                   Tp(data088[i].c), Tp(data088[i].x));
-      const Tp f0 = data088[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8.8817841970012523e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.8050967180790176e-16
+// mean(f - f_GSL): 5.8432790769745078e-17
+// variance(f - f_GSL): 4.0373698660038179e-32
+// stddev(f - f_GSL): 2.0093207474178476e-16
+const testcase_hyperg<double>
+data088[19] =
+{
+  { 0.78068027379106275, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.79924541976981278, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.81891305585650975, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.83979799626213247, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.86203315303160111, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.88577352485361693, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.91120135738402230, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.93853291956703588, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.96802755388922956, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0348375559194773, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0730246119544820, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1151788396279341, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1621066403893472, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.2148922218710421, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2750496810838674, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.3448048570872917, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.4276833109859521, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5299976259379793, 1.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler088 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data089[] = {
-  { 0.82510759951857582, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.84072786892782092, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.85710884896562356, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.87431674418118333, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.89242659229727017, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.91152392685930339, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.93170685950993570, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.95308871926790661, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.97580144325325802, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0258682619030324, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0536269616706000, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0835447330793833, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.1159538758396654, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.1512736659291880, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.1900463690116090, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.2329961591622411, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.2811334345669059, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.3359629014132051, 1.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test089()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data089)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data089[i].a), Tp(data089[i].b),
-                   Tp(data089[i].c), Tp(data089[i].x));
-      const Tp f0 = data089[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.4946054932156233e-16
+// mean(f - f_GSL): 3.5059674461847047e-17
+// variance(f - f_GSL): 9.8111051098089209e-33
+// stddev(f - f_GSL): 9.9051022760034738e-17
+const testcase_hyperg<double>
+data089[19] =
+{
+  { 0.82510759951857615, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.84072786892782070, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.85710884896562356, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.87431674418118244, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.89242659229726995, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91152392685930339, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93170685950993570, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.95308871926790661, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.97580144325325802, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0258682619030324, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0536269616706000, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0835447330793833, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1159538758396654, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.1512736659291880, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.1900463690116090, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.2329961591622411, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.2811334345669059, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.3359629014132053, 1.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler089 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data090[] = {
-  { 0.85426123653345876, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.86774543390930370, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.88178859537254239, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.89643269097060951, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.91172456687216763, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.92771674975966134, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.94446842993888647, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.96204667481937678, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.98052794339012128, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0205643671068179, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0423395201078882, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0654651277885334, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0901078068101382, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.1164691415928940, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.1447972335326551, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.1754040384534161, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.2086928679893112, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.2452055640510711, 1.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test090()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data090)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data090[i].a), Tp(data090[i].b),
-                   Tp(data090[i].c), Tp(data090[i].x));
-      const Tp f0 = data090[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 4.6160879869309861e-16
+// mean(f - f_GSL): -2.9216395384872539e-17
+// variance(f - f_GSL): 3.7021904791911625e-33
+// stddev(f - f_GSL): 6.0845628266878486e-17
+const testcase_hyperg<double>
+data090[19] =
+{
+  { 0.85426123653345876, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.86774543390930414, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.88178859537254239, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.89643269097060951, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.91172456687216819, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.92771674975966134, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.94446842993888669, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.96204667481937678, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.98052794339012128, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0205643671068179, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0423395201078882, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0654651277885334, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0901078068101382, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.1164691415928940, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.1447972335326551, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1754040384534163, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.2086928679893112, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.2452055640510711, 1.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler090 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data091[] = {
-  { 0.25646288779245091, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.28273129096174382, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.31438201170962976, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.35308837890625017, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.40123456790123463, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.46230737192836319, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.54156016946185359, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.64718364197530875, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.79246636158732342, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.3103947568968148, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.8017578125000004, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 2.6374427321949185, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 4.1975308641975282, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 7.4999999999999964, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 15.859375000000012, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 43.734567901234513, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 194.99999999999994, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 2777.4999999999832, 1.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test091()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data091)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data091[i].a), Tp(data091[i].b),
-                   Tp(data091[i].c), Tp(data091[i].x));
-      const Tp f0 = data091[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.0927261579781771e-12 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4735287697491136e-15
+// mean(f - f_GSL): 2.2385017815981644e-13
+// variance(f - f_GSL): 8.7776489381819171e-25
+// stddev(f - f_GSL): 9.3689107895111895e-13
+const testcase_hyperg<double>
+data091[19] =
+{
+  { 0.25646288779245086, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.28273129096174376, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.31438201170962982, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.35308837890625017, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.40123456790123452, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.46230737192836352, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.54156016946185348, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.64718364197530875, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.79246636158732342, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3103947568968148, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.8017578125000016, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 2.6374427321949185, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 4.1975308641975335, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 7.4999999999999964, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 15.859375000000012, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 43.734567901234662, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 194.99999999999994, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2777.5000000000095, 1.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler091 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data092[] = {
-  { 0.46398891966759004, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.49382716049382713, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.52768166089965396, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.56640624999999978, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.61111111111111116, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.66326530612244894, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.72485207100591698, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.79861111111111094, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.88842975206611552, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.1419753086419753, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.3281249999999998, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.5816326530612239, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.9444444444444444, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 2.5000000000000000, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 3.4374999999999996, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 5.2777777777777715, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 9.9999999999999947, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 32.499999999999837, 1.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test092()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data092)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data092[i].a), Tp(data092[i].b),
-                   Tp(data092[i].c), Tp(data092[i].x));
-      const Tp f0 = data092[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.2632564145606011e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3117712044801870e-15
+// mean(f - f_GSL): 2.6879083754082736e-15
+// variance(f - f_GSL): 9.3567700516642700e-29
+// stddev(f - f_GSL): 9.6730398798228218e-15
+const testcase_hyperg<double>
+data092[19] =
+{
+  { 0.46398891966759009, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.49382716049382724, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.52768166089965407, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.56640625000000000, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.61111111111111094, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.66326530612244916, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.72485207100591709, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.79861111111111094, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.88842975206611552, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1419753086419753, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3281250000000000, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.5816326530612239, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.9444444444444458, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 2.5000000000000000, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 3.4374999999999996, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 5.2777777777777786, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 9.9999999999999947, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 32.499999999999950, 1.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler092 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data093[] = {
-  { 0.57476744883397501, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.60302731682513933, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.63425708719096396, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.66895764182970419, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.70775063063963428, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.75141762103495924, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.80095569442603298, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.85765823887436754, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.92323549576335540, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0911622464839472, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.2013226178607666, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.3373332072682687, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.5099074378209716, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.7368822229245819, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 2.0505871832661429, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 2.5172389775867967, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 3.3015631983556144, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 5.0005935155044519, 1.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test093()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data093)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data093[i].a), Tp(data093[i].b),
-                   Tp(data093[i].c), Tp(data093[i].x));
-      const Tp f0 = data093[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 6.2172489379008766e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2433022037532449e-15
+// mean(f - f_GSL): 4.9083544246585873e-16
+// variance(f - f_GSL): 1.9229766015225486e-30
+// stddev(f - f_GSL): 1.3867143186404864e-15
+const testcase_hyperg<double>
+data093[19] =
+{
+  { 0.57476744883397490, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.60302731682513966, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.63425708719096374, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.66895764182970430, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.70775063063963473, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.75141762103495946, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.80095569442603320, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.85765823887436754, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.92323549576335540, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0911622464839472, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2013226178607672, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.3373332072682687, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.5099074378209718, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.7368822229245819, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2.0505871832661429, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.5172389775867976, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 3.3015631983556144, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.0005935155044563, 1.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler093 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data094[] = {
-  { 0.64582752605387961, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.67184161997264169, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.70012779922368040, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.73100784656910256, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.76486919089091077, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.80218301124334579, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.84352883533234446, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.88962858902212572, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.94139473468584123, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0669812691939897, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.1443996012177726, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.2350966976721314, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.3431264370409088, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.4745266814162399, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.6388137104840066, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.8522074849776518, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 2.1458016978417458, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 2.5927464669826339, 1.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test094()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data094)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data094[i].a), Tp(data094[i].b),
-                   Tp(data094[i].c), Tp(data094[i].x));
-      const Tp f0 = data094[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.1086244689504383e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.1989697058841885e-15
+// mean(f - f_GSL): 2.4541772123292936e-16
+// variance(f - f_GSL): 4.8074415038063715e-31
+// stddev(f - f_GSL): 6.9335715932024320e-16
+const testcase_hyperg<double>
+data094[19] =
+{
+  { 0.64582752605387983, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.67184161997264191, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.70012779922368040, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.73100784656910278, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.76486919089091066, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.80218301124334590, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.84352883533234391, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.88962858902212572, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.94139473468584123, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0669812691939897, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1443996012177726, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.2350966976721314, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.3431264370409088, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.4745266814162399, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.6388137104840066, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.8522074849776522, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2.1458016978417458, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.5927464669826348, 1.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler094 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data095[] = {
-  { 0.69583236336670629, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.71968920666899694, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.74533885416044232, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.77300145361503014, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.80293630810919514, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.83545132638592035, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.87091544744412508, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.90977522877919847, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.95257738192069130, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0528968282789379, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.1123617169062123, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.1798254572896132, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.2572069000522696, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.3471600884974377, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.4535032279573519, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.5820245752814948, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.7421756366906538, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.9513145531098233, 1.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test095()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data095)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data095[i].a), Tp(data095[i].b),
-                   Tp(data095[i].c), Tp(data095[i].x));
-      const Tp f0 = data095[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 6.8275390424723874e-16
+// mean(f - f_GSL): 1.0517902338554114e-16
+// variance(f - f_GSL): 8.8299945988280290e-32
+// stddev(f - f_GSL): 2.9715306828010425e-16
+const testcase_hyperg<double>
+data095[19] =
+{
+  { 0.69583236336670584, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.71968920666899716, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.74533885416044232, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.77300145361503070, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.80293630810919447, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.83545132638592057, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.87091544744412497, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.90977522877919847, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.95257738192069130, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0528968282789379, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1123617169062123, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1798254572896132, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2572069000522701, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.3471600884974377, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.4535032279573519, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.5820245752814950, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.7421756366906538, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.9513145531098235, 1.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler095 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data096[] = {
-  { 0.12307420104127871, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.13818870041457423, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.15739165631811691, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.18249038606882068, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.21644171225027786, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.26433326159804160, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.33544459430654533, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.44788516696232517, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.63989153514168362, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.7568608796813312, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 3.5836558871799027, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 8.8077526749963226, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 27.285841702089190, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 113.55555555555557, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 706.24023437500091, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 8064.1687976651992, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 271267.22222222196, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 123456789.99999890, 1.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test096()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data096)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data096[i].a), Tp(data096[i].b),
-                   Tp(data096[i].c), Tp(data096[i].x));
-      const Tp f0 = data096[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.0861625671386719e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6897916810721003e-15
+// mean(f - f_GSL): 1.0989192059253727e-08
+// variance(f - f_GSL): 2.2903477685061008e-15
+// stddev(f - f_GSL): 4.7857577963224392e-08
+const testcase_hyperg<double>
+data096[19] =
+{
+  { 0.12307420104127866, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.13818870041457434, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.15739165631811705, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.18249038606882081, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.21644171225027795, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.26433326159804149, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.33544459430654527, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.44788516696232511, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.63989153514168373, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.7568608796813312, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.5836558871799102, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 8.8077526749963226, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 27.285841702089265, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 113.55555555555557, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 706.24023437500091, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 8064.1687976652511, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 271267.22222222196, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 123456790.00000113, 1.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler096 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data097[] = {
-  { 0.28363728383055758, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.30933003169808387, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.33998437757128797, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.37713553224291119, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.42299736538419658, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.48086597727600106, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.55583495759293045, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.65612850114039667, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.79573668772968120, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.3184712058058303, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.8576958065941214, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 2.8759509651764228, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 5.1046225531822182, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 11.095238095238095, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 32.797154017857174, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 158.01935680536477, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1815.9523809523814, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 163302.14285714156, 1.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test097()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data097)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data097[i].a), Tp(data097[i].b),
-                   Tp(data097[i].c), Tp(data097[i].x));
-      const Tp f0 = data097[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.6193447411060333e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6039867544159698e-15
+// mean(f - f_GSL): 1.3861192895235850e-11
+// variance(f - f_GSL): 3.6088478524883243e-21
+// stddev(f - f_GSL): 6.0073686856129647e-11
+const testcase_hyperg<double>
+data097[19] =
+{
+  { 0.28363728383055781, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.30933003169808387, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.33998437757128797, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.37713553224291113, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.42299736538419669, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.48086597727600089, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.55583495759293033, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.65612850114039678, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.79573668772968142, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3184712058058303, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.8576958065941236, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 2.8759509651764228, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 5.1046225531822289, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 11.095238095238095, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 32.797154017857174, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 158.01935680536548, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1815.9523809523814, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 163302.14285714392, 1.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler097 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data098[] = {
-  { 0.39006633302741794, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.41898885698103294, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.45245557983812590, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.49160548618861633, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.53798419230517980, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.59373881442067344, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.66193391357076115, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.74708402736952129, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.85609281019430605, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.1974451135148187, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.4820886036706347, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.9201183180477521, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 2.6569338297733336, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 4.0634920634920650, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 7.3102678571428568, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 17.512574302697733, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 74.206349206349131, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1342.8571428571363, 1.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test098()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data098)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data098[i].a), Tp(data098[i].b),
-                   Tp(data098[i].c), Tp(data098[i].x));
-      const Tp f0 = data098[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.0463630789890885e-12 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5238873992471854e-15
+// mean(f - f_GSL): 1.1029773585697082e-13
+// variance(f - f_GSL): 2.1981059026132227e-25
+// stddev(f - f_GSL): 4.6883962104468326e-13
+const testcase_hyperg<double>
+data098[19] =
+{
+  { 0.39006633302741811, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.41898885698103278, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.45245557983812590, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.49160548618861627, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.53798419230517991, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.59373881442067322, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.66193391357076092, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.74708402736952118, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.85609281019430605, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1974451135148187, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.4820886036706358, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.9201183180477521, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.6569338297733367, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 4.0634920634920650, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 7.3102678571428568, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 17.512574302697782, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 74.206349206349131, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1342.8571428571502, 1.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler098 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data099[] = {
-  { 0.46726928123633193, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.49687547629934464, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.53045208856322235, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.56884765624999978, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.61316872427983526, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.66488500161969544, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.72598998634501577, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.79925411522633782, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.88863845062192193, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.1423563481176653, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.3302951388888888, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.5889212827988335, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.9650205761316870, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 2.5555555555555549, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 3.5937500000000013, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 5.7818930041152203, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 12.222222222222220, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 54.999999999999780, 1.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test099()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data099)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data099[i].a), Tp(data099[i].b),
-                   Tp(data099[i].c), Tp(data099[i].x));
-      const Tp f0 = data099[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 7.8159700933611020e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4210854715201975e-15
+// mean(f - f_GSL): 4.6629367034256575e-15
+// variance(f - f_GSL): 3.1677071819086927e-28
+// stddev(f - f_GSL): 1.7798053775367387e-14
+const testcase_hyperg<double>
+data099[19] =
+{
+  { 0.46726928123633210, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.49687547629934464, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.53045208856322223, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.56884765624999989, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.61316872427983504, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.66488500161969544, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.72598998634501621, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.79925411522633760, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.88863845062192182, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1423563481176653, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3302951388888891, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.5889212827988335, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.9650205761316886, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 2.5555555555555549, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 3.5937500000000013, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 5.7818930041152274, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 12.222222222222220, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 55.000000000000114, 1.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler099 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=10.000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data100[] = {
-  { 0.52631578947368429, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.55555555555555558, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.58823529411764708, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.62500000000000000, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.66666666666666663, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.71428571428571430, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.76923076923076927, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.83333333333333337, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.90909090909090906, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.1111111111111112, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.2500000000000000, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.4285714285714286, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.6666666666666663, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 2.0000000000000000, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 2.5000000000000004, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 3.3333333333333330, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 5.0000000000000009, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 9.9999999999999929, 1.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=10.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test100()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data100)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data100[i].a), Tp(data100[i].b),
-                   Tp(data100[i].c), Tp(data100[i].x));
-      const Tp f0 = data100[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.7763568394002505e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9984014443252816e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 1.6955391669463862e-31
+// stddev(f - f_GSL): 4.1176925175957300e-16
+const testcase_hyperg<double>
+data100[19] =
+{
+  { 0.52631578947368429, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.55555555555555558, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.58823529411764708, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.62500000000000000, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.66666666666666663, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.71428571428571430, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.76923076923076938, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.83333333333333337, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.90909090909090906, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1111111111111112, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2500000000000002, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.4285714285714286, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.6666666666666670, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 2.0000000000000000, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 2.5000000000000009, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 3.3333333333333348, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 5.0000000000000009, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 10.000000000000011, 1.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler100 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data101[] = {
-  { 0.058479236576646373, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.065788544763137669, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.075184824937824662, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.087707688693157260, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.10521567442213345, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.13135877960541525, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.17423854066297104, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.25492082527223525, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.44025895219654843, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 3.3698615820910360, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 17.997089220808483, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 153.73298291118951, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 2159.1667587825627, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 55188.105263157879, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 3191209.3921857267, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 646910975.29152656, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1254834626850.2659, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 5.8479532163741414e+17, 1.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test101()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data101)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data101[i].a), Tp(data101[i].b),
-                   Tp(data101[i].c), Tp(data101[i].x));
-      const Tp f0 = data101[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1024.0000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7510399999999635e-15
+// mean(f - f_GSL): 53.894788252704814
+// variance(f - f_GSL): 55188.204676932175
+// stddev(f - f_GSL): 234.92169903381034
+const testcase_hyperg<double>
+data101[19] =
+{
+  { 0.058479236576646311, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.065788544763137821, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.075184824937824482, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.087707688693157121, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.10521567442213345, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.13135877960541509, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.17423854066297137, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.25492082527223520, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.44025895219654843, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 3.3698615820910360, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 17.997089220808562, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 153.73298291118951, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2159.1667587825768, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 55188.105263157879, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 3191209.3921857267, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 646910975.29153574, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1254834626850.2659, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.8479532163743910e+17, 1.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler101 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data102[] = {
-  { 0.15519511120894947, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.17197165701692899, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.19276847315207363, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.21920107206179093, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.25386158960390581, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.30115970686600657, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.36916408142057117, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.47406175901569558, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.65237908266239919, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.8227213362622299, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 4.3716358339791332, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 15.670841312959222, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 94.742651122760179, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1081.7275541795671, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 27809.787731465960, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 2329811.1715181042, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1537787532.6780224, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 141562653506999.88, 1.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test102()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data102)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data102[i].a), Tp(data102[i].b),
-                   Tp(data102[i].c), Tp(data102[i].x));
-      const Tp f0 = data102[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.21875000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5452521874999694e-15
+// mean(f - f_GSL): 0.011513220685868108
+// variance(f - f_GSL): 0.0025185017633005862
+// stddev(f - f_GSL): 0.050184676578618956
+const testcase_hyperg<double>
+data102[19] =
+{
+  { 0.15519511120894958, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.17197165701692893, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.19276847315207329, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.21920107206179093, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.25386158960390576, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.30115970686600663, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.36916408142057128, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.47406175901569547, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.65237908266239919, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.8227213362622299, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 4.3716358339791430, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 15.670841312959222, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 94.742651122760662, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1081.7275541795671, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 27809.787731465960, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2329811.1715181284, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1537787532.6780224, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 141562653507005.19, 1.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler102 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data103[] = {
-  { 0.23253645591196570, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.25484220947068353, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.28181987881113829, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.31508211677735765, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.35706285886959599, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.41160053409238195, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.48508083111181949, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.58885194371375260, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.74482241684585748, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.4700356864367146, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 2.4955144453055143, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 5.3506594845833471, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 16.618413752184221, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 89.310629514963878, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1029.3439900542960, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 35659.847863372350, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 8009309.6233230168, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 145640590027.39731, 1.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test103()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data103)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data103[i].a), Tp(data103[i].b),
-                   Tp(data103[i].c), Tp(data103[i].x));
-      const Tp f0 = data103[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.00024414062500000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6763226855512285e-15
+// mean(f - f_GSL): 1.2849899481406474e-05
+// variance(f - f_GSL): 3.1370759089735494e-09
+// stddev(f - f_GSL): 5.6009605506319623e-05
+const testcase_hyperg<double>
+data103[19] =
+{
+  { 0.23253645591196551, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.25484220947068342, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.28181987881113812, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.31508211677735770, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.35706285886959610, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.41160053409238190, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.48508083111181938, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.58885194371375260, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.74482241684585782, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.4700356864367146, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.4955144453055174, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 5.3506594845833471, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 16.618413752184267, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 89.310629514963878, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1029.3439900542960, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 35659.847863372670, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 8009309.6233230168, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 145640590027.40201, 1.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler103 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data104[] = {
-  { 0.29614148314592498, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.32176277356430810, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.35217870475550522, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.38885270445515091, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.43389978380608424, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.49048612522269436, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.56355539635634611, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.66123153239117682, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.79773363961895427, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.3245132157016595, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.9065148749742076, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 3.1328798652457452, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 6.4172532944033476, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 19.071683734222436, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 104.41989641582512, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1510.5743992324240, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 115518.14360562043, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 414930455.29173034, 1.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test104()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data104)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data104[i].a), Tp(data104[i].b),
-                   Tp(data104[i].c), Tp(data104[i].x));
-      const Tp f0 = data104[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 7.1525573730468750e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7237966704607975e-15
+// mean(f - f_GSL): 3.7648905700618082e-08
+// variance(f - f_GSL): 2.6925522674362989e-14
+// stddev(f - f_GSL): 1.6408998346749562e-07
+const testcase_hyperg<double>
+data104[19] =
+{
+  { 0.29614148314592509, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.32176277356430805, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.35217870475550511, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.38885270445515113, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.43389978380608418, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.49048612522269414, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.56355539635634599, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.66123153239117671, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.79773363961895416, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3245132157016595, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.9065148749742094, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 3.1328798652457452, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 6.4172532944033636, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 19.071683734222436, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 104.41989641582512, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1510.5743992324351, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 115518.14360562043, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 414930455.29174191, 1.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler104 = 2.5000000000000020e-13;
 
 // Test data for a=1.0000000000000000, b=20.000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data105[] = {
-  { 0.34954259539177696, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.37714038609235123, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.40942091659748725, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.44767109606846428, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.49368984777532254, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.55006638216982318, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.62065830207408912, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.71145554513583786, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.83223839666914623, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.2466748028187731, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.6386752725021749, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 2.3340068725479681, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 3.7848108613132054, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 7.6754638550304133, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 23.344217312927277, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 149.83491198246921, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 3936.9253501916060, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 2794143.5036480185, 1.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=1.0000000000000000, b=20.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test105()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data105)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data105[i].a), Tp(data105[i].b),
-                   Tp(data105[i].c), Tp(data105[i].x));
-      const Tp f0 = data105[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.6566128730773926e-09 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6665618165271877e-15
+// mean(f - f_GSL): 2.4523176471958370e-10
+// variance(f - f_GSL): 1.1411894517911952e-18
+// stddev(f - f_GSL): 1.0682646918208967e-09
+const testcase_hyperg<double>
+data105[19] =
+{
+  { 0.34954259539177701, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.37714038609235134, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.40942091659748781, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.44767109606846422, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.49368984777532227, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.55006638216982318, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.62065830207408901, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.71145554513583764, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.83223839666914623, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.2466748028187731, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.6386752725021760, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 2.3340068725479681, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 3.7848108613132099, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 7.6754638550304133, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 23.344217312927277, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 149.83491198246998, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 3936.9253501916060, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 2794143.5036480846, 1.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler105 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data106[] = {
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test106()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data106)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data106[i].a), Tp(data106[i].b),
-                   Tp(data106[i].c), Tp(data106[i].x));
-      const Tp f0 = data106[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data106[19] =
+{
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler106 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data107[] = {
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test107()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data107)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data107[i].a), Tp(data107[i].b),
-                   Tp(data107[i].c), Tp(data107[i].x));
-      const Tp f0 = data107[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data107[19] =
+{
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler107 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data108[] = {
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test108()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data108)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data108[i].a), Tp(data108[i].b),
-                   Tp(data108[i].c), Tp(data108[i].x));
-      const Tp f0 = data108[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data108[19] =
+{
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler108 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data109[] = {
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test109()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data109)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data109[i].a), Tp(data109[i].b),
-                   Tp(data109[i].c), Tp(data109[i].x));
-      const Tp f0 = data109[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data109[19] =
+{
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler109 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data110[] = {
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test110()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data110)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data110[i].a), Tp(data110[i].b),
-                   Tp(data110[i].c), Tp(data110[i].x));
-      const Tp f0 = data110[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data110[19] =
+{
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler110 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data111[] = {
-  { 0.72547625011001171, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.74535599249992990, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.76696498884737041, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.79056941504209477, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.81649658092772603, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.84515425472851657, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.87705801930702920, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.91287092917527690, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.95346258924559224, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0540925533894598, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.1180339887498949, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.1952286093343938, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.2909944487358056, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.4142135623730949, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.5811388300841900, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.8257418583505536, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 2.2360679774997898, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 3.1622776601683782, 2.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test111()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data111)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data111[i].a), Tp(data111[i].b),
-                   Tp(data111[i].c), Tp(data111[i].x));
-      const Tp f0 = data111[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8577584504832499e-16
+// mean(f - f_GSL): 5.8432790769745078e-18
+// variance(f - f_GSL): 1.1262748212790853e-32
+// stddev(f - f_GSL): 1.0612609581432294e-16
+const testcase_hyperg<double>
+data111[19] =
+{
+  { 0.72547625011001160, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.74535599249992990, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.76696498884737041, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.79056941504209477, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.81649658092772603, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.84515425472851669, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.87705801930702931, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.91287092917527690, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.95346258924559224, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0540925533894598, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1180339887498949, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1952286093343938, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2909944487358058, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.4142135623730951, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.5811388300841900, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.8257418583505542, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2.2360679774997898, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 3.1622776601683809, 2.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler111 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data112[] = {
-  { 0.83664260086443798, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.85046584300227146, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.86509574979651593, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.88062082573041867, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.89714464248521586, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.91478946588967558, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.93370105322348573, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.95405511057700887, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.97606616007978142, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0261916902334731, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0550723519434702, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0872106588188091, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.1233801699379020, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.1646752981725688, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.2127272514219511, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.2701518651068637, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.3416407864998725, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.4374795179111102, 2.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test112()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data112)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data112[i].a), Tp(data112[i].b),
-                   Tp(data112[i].c), Tp(data112[i].x));
-      const Tp f0 = data112[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 6.6613381477509392e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.6340403913587147e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 2.0425119025543020e-32
+// stddev(f - f_GSL): 1.4291647569662155e-16
+const testcase_hyperg<double>
+data112[19] =
+{
+  { 0.83664260086443765, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.85046584300227079, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.86509574979651649, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.88062082573041911, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.89714464248521597, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91478946588967569, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93370105322348607, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.95405511057700887, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.97606616007978142, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0261916902334731, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0550723519434702, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0872106588188091, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1233801699379022, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.1646752981725688, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2127272514219511, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.2701518651068637, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.3416407864998725, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.4374795179111106, 2.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler112 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data113[] = {
-  { 0.88195381730235833, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.89265078469555093, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.90382937908303707, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.91553161389880577, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.92780530349281576, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.94070521140346042, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.95429450630523349, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.96864663325785849, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.98384775588541795, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0172258496884334, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0356742479163459, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0555293036908924, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0770231491562379, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.1004557416484888, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.1262270515731978, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.1548932919125086, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.1872757758134724, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.2247091713458949, 2.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test113()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data113)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data113[i].a), Tp(data113[i].b),
-                   Tp(data113[i].c), Tp(data113[i].x));
-      const Tp f0 = data113[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.3306690738754696e-16 at index 8
+// max(|f - f_GSL| / |f_GSL|): 3.3853500746952663e-16
+// mean(f - f_GSL): 1.1686558153949016e-17
+// variance(f - f_GSL): 2.5949371882270124e-33
+// stddev(f - f_GSL): 5.0940525990875012e-17
+const testcase_hyperg<double>
+data113[19] =
+{
+  { 0.88195381730235822, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.89265078469555081, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.90382937908303673, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.91553161389880600, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.92780530349281509, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.94070521140346020, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.95429450630523349, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.96864663325785849, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.98384775588541795, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0172258496884334, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0356742479163461, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0555293036908924, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0770231491562379, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.1004557416484888, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.1262270515731978, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1548932919125088, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.1872757758134724, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.2247091713458949, 2.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler113 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data114[] = {
-  { 0.90716919697107301, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.91592299407142519, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.92500027075874236, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.93442464185467167, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.94422248683737009, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.95442341810133347, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.96506085725516400, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.97617275213704069, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.98780247986309799, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0128233505813447, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0263406246541855, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0406326381700366, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0557966239802845, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0719515075786321, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0892457392422055, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.1078695188000958, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.1280752258974340, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.1502152002706476, 2.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test114()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data114)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data114[i].a), Tp(data114[i].b),
-                   Tp(data114[i].c), Tp(data114[i].x));
-      const Tp f0 = data114[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.2204460492503131e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.9683492716399738e-16
+// mean(f - f_GSL): 1.7529837230923523e-17
+// variance(f - f_GSL): 2.4527762774522302e-33
+// stddev(f - f_GSL): 4.9525511380017369e-17
+const testcase_hyperg<double>
+data114[19] =
+{
+  { 0.90716919697107279, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.91592299407142508, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.92500027075874192, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.93442464185467122, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.94422248683737076, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.95442341810133347, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.96506085725516355, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.97617275213704069, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.98780247986309799, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0128233505813447, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0263406246541855, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0406326381700366, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0557966239802845, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0719515075786321, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0892457392422055, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1078695188000958, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.1280752258974340, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.1502152002706476, 2.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler114 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data115[] = {
-  { 0.92336416053263093, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.93078397248364519, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.93843714333600226, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.94633837784068076, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.95450388104967909, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.96295158125742764, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.97170139827854296, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.98077556918512687, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.99019904777750845, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0102104261941198, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0208669540935695, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0320118665407505, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0436944599504387, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0559728828278145, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0689166967761712, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0826105758119842, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0971599106346146, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.1126998828023964, 2.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test115()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data115)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data115[i].a), Tp(data115[i].b),
-                   Tp(data115[i].c), Tp(data115[i].x));
-      const Tp f0 = data115[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.3306690738754696e-16 at index 8
+// max(|f - f_GSL| / |f_GSL|): 3.3636359087105992e-16
+// mean(f - f_GSL): 2.9216395384872539e-17
+// variance(f - f_GSL): 2.1804680539963092e-33
+// stddev(f - f_GSL): 4.6695482158302094e-17
+const testcase_hyperg<double>
+data115[19] =
+{
+  { 0.92336416053263082, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.93078397248364542, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.93843714333600259, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.94633837784068098, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.95450388104967876, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.96295158125742752, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.97170139827854329, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.98077556918512687, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.99019904777750845, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0102104261941198, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0208669540935695, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0320118665407505, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0436944599504387, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0559728828278145, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0689166967761712, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0826105758119842, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0971599106346146, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.1126998828023964, 2.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler115 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data116[] = {
-  { 0.52631578947368429, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.55555555555555558, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.58823529411764708, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.62500000000000000, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.66666666666666663, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.71428571428571430, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.76923076923076927, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.83333333333333337, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.90909090909090906, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.1111111111111112, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.2500000000000000, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.4285714285714286, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.6666666666666663, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 2.0000000000000000, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 2.5000000000000004, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 3.3333333333333330, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 5.0000000000000009, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 9.9999999999999929, 2.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test116()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data116)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data116[i].a), Tp(data116[i].b),
-                   Tp(data116[i].c), Tp(data116[i].x));
-      const Tp f0 = data116[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.7763568394002505e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9984014443252816e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 1.6955391669463862e-31
+// stddev(f - f_GSL): 4.1176925175957300e-16
+const testcase_hyperg<double>
+data116[19] =
+{
+  { 0.52631578947368429, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.55555555555555558, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.58823529411764708, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.62500000000000000, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.66666666666666663, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.71428571428571430, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.76923076923076938, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.83333333333333337, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.90909090909090906, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1111111111111112, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2500000000000002, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.4285714285714286, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.6666666666666670, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 2.0000000000000000, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2.5000000000000009, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3.3333333333333348, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 5.0000000000000009, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 10.000000000000011, 2.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler116 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data117[] = {
-  { 0.70351947549341520, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.72637503722092711, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.75099661564391251, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.77761647796730871, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.80651221621216451, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.83801894346580275, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.87254582050258467, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.91059888544083678, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.95281329145592386, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0532154477379738, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.1138692114741471, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.1838976095305187, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.2660586631630237, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.3644676665613118, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.4856585347316102, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.6409590443536872, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.8528798927325769, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 2.1789423102929644, 2.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test117()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data117)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data117[i].a), Tp(data117[i].b),
-                   Tp(data117[i].c), Tp(data117[i].x));
-      const Tp f0 = data117[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.6645352591003757e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2228571846595245e-15
+// mean(f - f_GSL): 1.9282820954015878e-16
+// variance(f - f_GSL): 3.5826351554959189e-31
+// stddev(f - f_GSL): 5.9855118039278136e-16
+const testcase_hyperg<double>
+data117[19] =
+{
+  { 0.70351947549341554, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.72637503722092756, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.75099661564391240, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.77761647796730871, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.80651221621216473, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.83801894346580275, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.87254582050258456, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.91059888544083678, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.95281329145592386, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0532154477379738, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1138692114741471, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1838976095305187, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2660586631630240, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.3644676665613118, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.4856585347316102, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.6409590443536872, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.8528798927325769, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.1789423102929653, 2.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler117 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data118[] = {
-  { 0.78068027379106253, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.79924541976981278, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.81891305585650942, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.83979799626213270, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.86203315303160166, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.88577352485361693, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.91120135738402208, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.93853291956703588, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.96802755388922956, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0348375559194773, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0730246119544820, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.1151788396279341, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.1621066403893472, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.2148922218710421, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.2750496810838674, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.3448048570872917, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.4276833109859521, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.5299976259379788, 2.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test118()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data118)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data118[i].a), Tp(data118[i].b),
-                   Tp(data118[i].c), Tp(data118[i].x));
-      const Tp f0 = data118[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8.8817841970012523e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.8050967180790176e-16
+// mean(f - f_GSL): 5.8432790769745078e-17
+// variance(f - f_GSL): 4.0373698660038179e-32
+// stddev(f - f_GSL): 2.0093207474178476e-16
+const testcase_hyperg<double>
+data118[19] =
+{
+  { 0.78068027379106275, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.79924541976981278, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.81891305585650975, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.83979799626213247, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.86203315303160111, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.88577352485361693, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.91120135738402230, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.93853291956703588, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.96802755388922956, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0348375559194773, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0730246119544820, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1151788396279341, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1621066403893472, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.2148922218710421, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2750496810838674, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.3448048570872917, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.4276833109859521, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5299976259379793, 2.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler118 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data119[] = {
-  { 0.82510759951857582, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.84072786892782092, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.85710884896562356, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.87431674418118333, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.89242659229727017, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.91152392685930339, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.93170685950993570, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.95308871926790661, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.97580144325325802, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0258682619030324, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0536269616706000, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0835447330793833, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.1159538758396654, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.1512736659291880, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.1900463690116090, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.2329961591622411, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.2811334345669059, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.3359629014132051, 2.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test119()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data119)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data119[i].a), Tp(data119[i].b),
-                   Tp(data119[i].c), Tp(data119[i].x));
-      const Tp f0 = data119[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.4946054932156233e-16
+// mean(f - f_GSL): 3.5059674461847047e-17
+// variance(f - f_GSL): 9.8111051098089209e-33
+// stddev(f - f_GSL): 9.9051022760034738e-17
+const testcase_hyperg<double>
+data119[19] =
+{
+  { 0.82510759951857615, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.84072786892782070, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.85710884896562356, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.87431674418118244, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.89242659229726995, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91152392685930339, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93170685950993570, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.95308871926790661, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.97580144325325802, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0258682619030324, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0536269616706000, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0835447330793833, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1159538758396654, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.1512736659291880, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.1900463690116090, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.2329961591622411, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.2811334345669059, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.3359629014132053, 2.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler119 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data120[] = {
-  { 0.85426123653345876, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.86774543390930370, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.88178859537254239, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.89643269097060951, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.91172456687216763, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.92771674975966134, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.94446842993888647, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.96204667481937678, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.98052794339012128, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0205643671068179, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0423395201078882, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0654651277885334, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0901078068101382, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.1164691415928940, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.1447972335326551, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.1754040384534161, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.2086928679893112, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.2452055640510711, 2.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test120()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data120)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data120[i].a), Tp(data120[i].b),
-                   Tp(data120[i].c), Tp(data120[i].x));
-      const Tp f0 = data120[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 7
+// max(|f - f_GSL| / |f_GSL|): 4.6160879869309861e-16
+// mean(f - f_GSL): -2.9216395384872539e-17
+// variance(f - f_GSL): 3.7021904791911625e-33
+// stddev(f - f_GSL): 6.0845628266878486e-17
+const testcase_hyperg<double>
+data120[19] =
+{
+  { 0.85426123653345876, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.86774543390930414, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.88178859537254239, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.89643269097060951, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.91172456687216819, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.92771674975966134, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.94446842993888669, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.96204667481937678, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.98052794339012128, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0205643671068179, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0423395201078882, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0654651277885334, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0901078068101382, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.1164691415928940, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.1447972335326551, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.1754040384534163, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.2086928679893112, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.2452055640510711, 2.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler120 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data121[] = {
-  { 0.27700831024930750, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.30864197530864196, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.34602076124567477, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.39062499999999994, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.44444444444444442, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.51020408163265307, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.59171597633136097, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.69444444444444453, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.82644628099173545, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.2345679012345681, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.5624999999999998, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 2.0408163265306127, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 2.7777777777777768, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 4.0000000000000000, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 6.2500000000000036, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 11.111111111111109, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 25.000000000000007, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 99.999999999999872, 2.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test121()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data121)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data121[i].a), Tp(data121[i].b),
-                   Tp(data121[i].c), Tp(data121[i].x));
-      const Tp f0 = data121[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.2632564145606011e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.2632564145605916e-16
+// mean(f - f_GSL): 2.3636063866361887e-15
+// variance(f - f_GSL): 9.5093179694074762e-29
+// stddev(f - f_GSL): 9.7515731907254209e-15
+const testcase_hyperg<double>
+data121[19] =
+{
+  { 0.27700831024930750, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.30864197530864196, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.34602076124567477, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.39062500000000000, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.44444444444444442, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.51020408163265318, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.59171597633136108, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.69444444444444442, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.82644628099173545, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.2345679012345683, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.5625000000000007, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 2.0408163265306127, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.7777777777777795, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 4.0000000000000000, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 6.2500000000000027, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 11.111111111111125, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 25.000000000000007, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 100.00000000000023, 2.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler121 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data122[] = {
-  { 0.50515448477320868, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.53674994210078020, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.57194655162437447, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.61137322330312327, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.65581297297972574, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.70625323977290932, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.76395739449542643, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.83056871002513311, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.90826553449323655, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.1098784992198341, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.2437942741831700, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.4105343768544543, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.6238435648986016, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.9065970003160624, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 2.3001951284393627, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 2.8891774744673464, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 3.8827206436045336, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 6.0316345867773542, 2.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test122()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data122)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data122[i].a), Tp(data122[i].b),
-                   Tp(data122[i].c), Tp(data122[i].x));
-      const Tp f0 = data122[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 7.9936057773011271e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3252801810681345e-15
+// mean(f - f_GSL): 6.3107414031324687e-16
+// variance(f - f_GSL): 3.1787980555780903e-30
+// stddev(f - f_GSL): 1.7829184096806254e-15
+const testcase_hyperg<double>
+data122[19] =
+{
+  { 0.50515448477320835, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.53674994210078020, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.57194655162437413, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.61137322330312327, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.65581297297972585, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.70625323977290955, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.76395739449542666, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.83056871002513311, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.90826553449323655, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1098784992198341, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2437942741831702, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.4105343768544543, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.6238435648986023, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.9065970003160624, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2.3001951284393627, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.8891774744673469, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 3.8827206436045336, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 6.0316345867773640, 2.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler122 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data123[] = {
-  { 0.61824560969673303, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.64645665839161048, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.67712272792612083, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.71058076074636822, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.74723387423852861, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.78756892188863126, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.83218012557592713, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.88180144818204143, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.93735184459468934, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0712594799044883, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.1531330932162096, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.2483404191094898, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.3606934909972501, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.4957544469027071, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.6620777107871287, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.8738132387064506, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 2.1570670242247409, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 2.5700735959225494, 2.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test123()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data123)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data123[i].a), Tp(data123[i].b),
-                   Tp(data123[i].c), Tp(data123[i].x));
-      const Tp f0 = data123[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.1086244689504383e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2095468681839713e-15
+// mean(f - f_GSL): 2.5126100030990384e-16
+// variance(f - f_GSL): 4.7878393162502431e-31
+// stddev(f - f_GSL): 6.9194214470938558e-16
+const testcase_hyperg<double>
+data123[19] =
+{
+  { 0.61824560969673270, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.64645665839161026, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.67712272792612116, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.71058076074636822, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.74723387423852838, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.78756892188863170, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.83218012557592669, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.88180144818204143, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.93735184459468934, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0712594799044883, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1531330932162098, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.2483404191094898, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.3606934909972506, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.4957544469027071, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.6620777107871287, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.8738132387064512, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2.1570670242247409, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.5700735959225507, 2.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler123 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data124[] = {
-  { 0.68776713859043437, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.71280582849489826, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.73962983054724929, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.76844343025262085, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.79948476671182911, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.83303347721461229, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.86942060391338782, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.90904161711581655, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.95237381468647742, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0526413941912305, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.1112045278881502, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.1768500306393046, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.2510971588297888, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.3359896747789315, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.4343740183432725, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.5504011881337365, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.6905307012604318, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.8658920279264424, 2.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test124()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data124)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data124[i].a), Tp(data124[i].b),
-                   Tp(data124[i].c), Tp(data124[i].x));
-      const Tp f0 = data124[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 7.1401110547148366e-16
+// mean(f - f_GSL): 1.0517902338554114e-16
+// variance(f - f_GSL): 8.8299945988280290e-32
+// stddev(f - f_GSL): 2.9715306828010425e-16
+const testcase_hyperg<double>
+data124[19] =
+{
+  { 0.68776713859043437, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.71280582849489893, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.73962983054724896, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.76844343025262063, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.79948476671182900, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.83303347721461252, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.86942060391338805, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.90904161711581655, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.95237381468647742, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0526413941912305, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1112045278881502, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1768500306393046, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2510971588297890, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.3359896747789315, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.4343740183432725, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.5504011881337365, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.6905307012604318, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.8658920279264428, 2.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler124 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data125[] = {
-  { 0.73530262886958830, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.75768898977673638, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.78143483544640069, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.80667428603297209, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.83356078772438325, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.86227093001346145, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.89300925500556994, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.92601438873425990, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.96156696230910810, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0417127776179342, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0871896789480930, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.1370264514689949, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.1919677804049154, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.2529628761065934, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.3212511796458866, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.3985017309668506, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.4870567523847895, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.5904049523738040, 2.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test125()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data125)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data125[i].a), Tp(data125[i].b),
-                   Tp(data125[i].c), Tp(data125[i].x));
-      const Tp f0 = data125[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 6.6613381477509392e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.1884541027166499e-16
+// mean(f - f_GSL): 5.8432790769745078e-17
+// variance(f - f_GSL): 2.1656512830141486e-32
+// stddev(f - f_GSL): 1.4716151952919448e-16
+const testcase_hyperg<double>
+data125[19] =
+{
+  { 0.73530262886958797, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.75768898977673649, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.78143483544640080, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.80667428603297209, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.83356078772438313, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.86227093001346156, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.89300925500556971, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.92601438873425990, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.96156696230910810, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0417127776179342, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0871896789480930, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1370264514689949, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1919677804049158, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.2529628761065934, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.3212511796458866, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.3985017309668506, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.4870567523847895, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5904049523738044, 2.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler125 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data126[] = {
-  { 0.040386107340619266, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.052922149401344633, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.070429627772374270, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.095367431640624972, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.13168724279835387, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.18593443208187066, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.26932907434290437, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.40187757201646096, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.62092132305915493, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.6935087808430296, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 3.0517578124999991, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 5.9499018266198629, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 12.860082304526737, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 32.000000000000000, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 97.656250000000114, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 411.52263374485580, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 3124.9999999999991, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 99999.999999999665, 2.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test126()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data126)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data126[i].a), Tp(data126[i].b),
-                   Tp(data126[i].c), Tp(data126[i].x));
-      const Tp f0 = data126[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.0186340659856796e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.1641532182693482e-15
+// mean(f - f_GSL): 5.5487040400966458e-12
+// variance(f - f_GSL): 5.4399356990620132e-22
+// stddev(f - f_GSL): 2.3323669734975269e-11
+const testcase_hyperg<double>
+data126[19] =
+{
+  { 0.040386107340619273, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.052922149401344633, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.070429627772374270, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.095367431640624986, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.13168724279835389, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.18593443208187072, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.26932907434290460, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.40187757201646102, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.62092132305915493, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.6935087808430296, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.0517578125000036, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 5.9499018266198629, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 12.860082304526767, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 32.000000000000000, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 97.656250000000114, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 411.52263374485722, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 3124.9999999999995, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 100000.00000000055, 2.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler126 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data127[] = {
-  { 0.21140107887447140, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.24005486968449935, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.27478119275391821, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.31738281249999994, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.37037037037037035, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.43731778425655982, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.52344105598543444, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.63657407407407429, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.78888054094665638, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.3031550068587108, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.7578125000000002, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 2.4781341107871717, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 3.7037037037037037, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 5.9999999999999982, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 10.937500000000005, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 24.074074074074076, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 74.999999999999957, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 549.99999999999670, 2.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test127()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data127)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data127[i].a), Tp(data127[i].b),
-                   Tp(data127[i].c), Tp(data127[i].x));
-      const Tp f0 = data127[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 6.8212102632969618e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2402200478721734e-15
+// mean(f - f_GSL): 3.8828589466495609e-14
+// variance(f - f_GSL): 2.4267524775254640e-26
+// stddev(f - f_GSL): 1.5578037352392837e-13
+const testcase_hyperg<double>
+data127[19] =
+{
+  { 0.21140107887447138, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.24005486968449927, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.27478119275391810, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.31738281250000006, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.37037037037037024, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.43731778425655982, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.52344105598543467, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.63657407407407429, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.78888054094665638, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3031550068587108, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.7578125000000011, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 2.4781341107871717, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 3.7037037037037073, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 5.9999999999999982, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 10.937500000000005, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 24.074074074074115, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 74.999999999999957, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 550.00000000000068, 2.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler127 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data128[] = {
-  { 0.33250915203252107, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.36566851047721960, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.40414812182437942, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.44916943268118470, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.50233081077479569, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.56575808728873322, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.64233106844971422, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.73603371116919514, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.85251256240112439, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.1909065696197674, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.4447095285569311, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.7935243137840653, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 2.2937035820494454, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 3.0524711083016687, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 4.2976512669354259, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 6.5977107563194677, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 11.793747206577530, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 29.997625937982058, 2.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test128()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data128)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data128[i].a), Tp(data128[i].b),
-                   Tp(data128[i].c), Tp(data128[i].x));
-      const Tp f0 = data128[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.9737991503207013e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6580642616864621e-15
+// mean(f - f_GSL): 3.1670572597201835e-15
+// variance(f - f_GSL): 1.2718576052442072e-28
+// stddev(f - f_GSL): 1.1277666448535384e-14
+const testcase_hyperg<double>
+data128[19] =
+{
+  { 0.33250915203252129, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.36566851047721943, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.40414812182437959, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.44916943268118498, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.50233081077479547, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.56575808728873322, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.64233106844971455, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.73603371116919514, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.85251256240112439, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1909065696197674, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.4447095285569318, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.7935243137840653, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.2937035820494467, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 3.0524711083016687, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 4.2976512669354259, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 6.5977107563194739, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 11.793747206577530, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 29.997625937982132, 2.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler128 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data129[] = {
-  { 0.42108197362250305, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.45503172013983051, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.49345609813624303, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.53720880551221295, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.58736431524847466, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.64529222467897962, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.71276337354393904, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.79210466220795306, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.88643063455510596, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.1387832139040652, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.3114025920844752, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.5307655016768162, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.8170727950333345, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 2.2037865486700836, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 2.7506766056439380, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 3.5764534935716972, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 4.9587762302155403, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 7.7740847924166800, 2.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test129()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data129)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data129[i].a), Tp(data129[i].b),
-                   Tp(data129[i].c), Tp(data129[i].x));
-      const Tp f0 = data129[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.1546319456101628e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4852319937858925e-15
+// mean(f - f_GSL): 8.5896202431525265e-16
+// variance(f - f_GSL): 6.6980634833963886e-30
+// stddev(f - f_GSL): 2.5880617232586221e-15
+const testcase_hyperg<double>
+data129[19] =
+{
+  { 0.42108197362250294, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.45503172013983040, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.49345609813624314, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.53720880551221295, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.58736431524847466, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.64529222467897995, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.71276337354393959, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.79210466220795306, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.88643063455510596, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1387832139040652, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3114025920844754, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.5307655016768162, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.8170727950333352, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 2.2037865486700836, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2.7506766056439380, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3.5764534935716998, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 4.9587762302155403, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 7.7740847924166907, 2.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler129 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data130[] = {
-  { 0.48860241312958425, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.52193382517068487, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.55902375003954219, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.60049055150230346, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.64709127927203480, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.69976233335368998, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.75967529501081055, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.82831498895254407, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.90759090169653933, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.1088712278667465, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.2387445478440853, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.3959812720437546, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.5897930661091164, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.8340789380307454, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 2.1509548085970764, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 2.5782406951207504, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 3.1877847194242737, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 4.1421596631676900, 2.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test130()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data130)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data130[i].a), Tp(data130[i].b),
-                   Tp(data130[i].c), Tp(data130[i].x));
-      const Tp f0 = data130[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.0721199711322765e-15
+// mean(f - f_GSL): 3.5059674461847049e-16
+// variance(f - f_GSL): 9.8111051098089205e-31
+// stddev(f - f_GSL): 9.9051022760034740e-16
+const testcase_hyperg<double>
+data130[19] =
+{
+  { 0.48860241312958436, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.52193382517068487, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.55902375003954219, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.60049055150230324, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.64709127927203469, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.69976233335368998, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.75967529501080988, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.82831498895254407, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.90759090169653933, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1088712278667465, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2387445478440855, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.3959812720437546, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.5897930661091169, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.8340789380307454, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 2.1509548085970764, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 2.5782406951207526, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 3.1877847194242737, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 4.1421596631676918, 2.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler130 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data131[] = {
-  { 0.0016310376661280216, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.0028007538972582421, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.0049603324681551939, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.0090949470177292789, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.017341529915832606, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.034571613033607777, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.072538150286405714, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.16150558288984579, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.38554328942953148, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 2.8679719907924444, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 9.3132257461547816, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 35.401331746414378, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 165.38171687920172, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1024.0000000000000, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 9536.7431640625200, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 169350.87808430271, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 9765624.9999999944, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 9999999999.9999332, 2.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test131()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data131)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data131[i].a), Tp(data131[i].b),
-                   Tp(data131[i].c), Tp(data131[i].x));
-      const Tp f0 = data131[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.2888183593750000e-05 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.4795532226562509e-15
+// mean(f - f_GSL): 1.2059140510950354e-06
+// variance(f - f_GSL): 2.7568813079896666e-11
+// stddev(f - f_GSL): 5.2506012112801583e-06
+const testcase_hyperg<double>
+data131[19] =
+{
+  { 0.0016310376661280216, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.0028007538972582421, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.0049603324681551939, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.0090949470177292789, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.017341529915832606, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.034571613033607791, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.072538150286405839, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.16150558288984579, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.38554328942953142, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 2.8679719907924444, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 9.3132257461548065, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 35.401331746414378, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 165.38171687920246, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1024.0000000000000, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 9536.7431640625218, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 169350.87808430390, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 9765624.9999999963, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 10000000000.000111, 2.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler131 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data132[] = {
-  { 0.071191280690193509, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.085646504654238079, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.10478215656371073, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.13074816337653575, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.16701141666848116, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.21939323375313971, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.29813515331786627, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.42225974638874386, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.62942145962174867, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.7218685262373197, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 3.2855760483514689, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 7.1616652508907093, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 18.612326808485907, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 61.476190476190474, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 286.27580915178623, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 2274.9441142102296, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 47229.761904761865, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 9961460.7142856438, 2.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test132()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data132)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data132[i].a), Tp(data132[i].b),
-                   Tp(data132[i].c), Tp(data132[i].x));
-      const Tp f0 = data132[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.4901161193847656e-08 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4958811384436608e-15
+// mean(f - f_GSL): 7.8582773037277017e-10
+// variance(f - f_GSL): 1.1683981904064149e-17
+// stddev(f - f_GSL): 3.4181840067591665e-09
+const testcase_hyperg<double>
+data132[19] =
+{
+  { 0.071191280690193537, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.085646504654238384, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.10478215656371109, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.13074816337653578, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.16701141666848118, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.21939323375313963, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.29813515331786639, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.42225974638874397, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.62942145962174878, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.7218685262373197, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.2855760483514738, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 7.1616652508907093, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 18.612326808485950, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 61.476190476190474, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 286.27580915178623, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2274.9441142102414, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 47229.761904761865, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 9961460.7142858077, 2.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler132 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data133[] = {
-  { 0.14747230019381052, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.17073600100690603, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.19982795745135354, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.23681776864188067, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.28475624360398022, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.34827500743063144, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.43464829159684681, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.55576053438064787, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.73195020913445485, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.4310223867822929, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 2.1742563399057540, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 3.5769231236256043, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 6.5620441134844363, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 14.063492063492063, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 38.085937500000036, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 150.92973632068282, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1212.3015873015852, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 55107.142857142389, 2.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test133()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data133)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data133[i].a), Tp(data133[i].b),
-                   Tp(data133[i].c), Tp(data133[i].x));
-      const Tp f0 = data133[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8.7311491370201111e-11 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5843951771650161e-15
+// mean(f - f_GSL): 4.6467391338242840e-12
+// variance(f - f_GSL): 4.0072766661644994e-22
+// stddev(f - f_GSL): 2.0018183399510804e-11
+const testcase_hyperg<double>
+data133[19] =
+{
+  { 0.14747230019381058, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.17073600100690609, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.19982795745135354, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.23681776864188053, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.28475624360398011, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.34827500743063161, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.43464829159684687, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.55576053438064787, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.73195020913445530, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.4310223867822929, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.1742563399057566, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 3.5769231236256043, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 6.5620441134844469, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 14.063492063492063, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 38.085937500000036, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 150.92973632068330, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1212.3015873015852, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 55107.142857143110, 2.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler133 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data134[] = {
-  { 0.21658059714090588, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.24513539602702844, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.27967018274845046, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.32196044921874994, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.37448559670781900, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.44078856032208796, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.52606701446027815, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.63818158436214001, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.78944971882612769, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.3044251384443430, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.7659505208333335, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 2.5093710953769270, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 3.8065843621399158, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 6.3333333333333313, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 12.109375000000004, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 29.115226337448540, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 108.33333333333330, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1224.9999999999923, 2.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test134()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data134)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data134[i].a), Tp(data134[i].b),
-                   Tp(data134[i].c), Tp(data134[i].x));
-      const Tp f0 = data134[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.8189894035458565e-12 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4848893090170230e-15
+// mean(f - f_GSL): 1.0027066896088256e-13
+// variance(f - f_GSL): 1.7322804840633983e-25
+// stddev(f - f_GSL): 4.1620673757922257e-13
+const testcase_hyperg<double>
+data134[19] =
+{
+  { 0.21658059714090577, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.24513539602702861, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.27967018274845046, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.32196044921875022, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.37448559670781911, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.44078856032208802, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.52606701446027793, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.63818158436213956, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.78944971882612769, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3044251384443430, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.7659505208333344, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 2.5093710953769270, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 3.8065843621399202, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 6.3333333333333313, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 12.109375000000004, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 29.115226337448608, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 108.33333333333330, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1225.0000000000023, 2.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler134 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=10.000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data135[] = {
-  { 0.27700831024930750, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.30864197530864196, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.34602076124567477, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.39062499999999994, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.44444444444444442, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.51020408163265307, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.59171597633136097, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.69444444444444453, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.82644628099173545, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.2345679012345681, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.5624999999999998, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 2.0408163265306127, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 2.7777777777777768, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 4.0000000000000000, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 6.2500000000000036, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 11.111111111111109, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 25.000000000000007, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 99.999999999999872, 2.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=10.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test135()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data135)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data135[i].a), Tp(data135[i].b),
-                   Tp(data135[i].c), Tp(data135[i].x));
-      const Tp f0 = data135[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.2632564145606011e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.2632564145605916e-16
+// mean(f - f_GSL): 2.3636063866361887e-15
+// variance(f - f_GSL): 9.5093179694074762e-29
+// stddev(f - f_GSL): 9.7515731907254209e-15
+const testcase_hyperg<double>
+data135[19] =
+{
+  { 0.27700831024930750, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.30864197530864196, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.34602076124567477, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.39062500000000000, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.44444444444444442, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.51020408163265318, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.59171597633136108, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.69444444444444442, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.82644628099173545, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.2345679012345683, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.5625000000000007, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 2.0408163265306127, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 2.7777777777777795, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 4.0000000000000000, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 6.2500000000000027, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 11.111111111111125, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 25.000000000000007, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 100.00000000000023, 2.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler135 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data136[] = {
-  { 2.6602838683283435e-06, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 7.8442223930072316e-06, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 2.4604898194634598e-05, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 8.2718061255302686e-05, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.00030072865982171723, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.0011951964277455193, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.0052617832469731814, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.026084053304588847, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.14864362802414346, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 8.2252633399699757, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 86.736173798840269, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1253.2542894196865, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 27351.112277912434, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1048576.0000000000, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 90949470.177293226, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 28679719907.924358, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 95367431640624.906, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 9.9999999999998657e+19, 2.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test136()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data136)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data136[i].a), Tp(data136[i].b),
-                   Tp(data136[i].c), Tp(data136[i].x));
-      const Tp f0 = data136[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+// max(|f - f_GSL|): 475136.00000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.4067200000000052e-15
+// mean(f - f_GSL): 25007.185032091642
+// variance(f - f_GSL): 11881799540.814577
+// stddev(f - f_GSL): 109003.66755671379
+const testcase_hyperg<double>
+data136[19] =
+{
+  { 2.6602838683283435e-06, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 7.8442223930072316e-06, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 2.4604898194634598e-05, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 8.2718061255302686e-05, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.00030072865982171723, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0011951964277455204, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0052617832469731996, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.026084053304588850, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.14864362802414346, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 8.2252633399699757, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 86.736173798840738, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1253.2542894196868, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 27351.112277912678, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1048576.0000000000, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 90949470.177293226, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 28679719907.924767, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 95367431640624.906, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000220e+20, 2.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler136 = 5.0000000000000039e-13;
 
 // Test data for a=2.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data137[] = {
-  { 0.018828092583720951, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.023381944060455316, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.029789623984280793, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.039191021482500497, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.053727813036721514, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.077762010061669024, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.12110505620123302, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.20870149809080590, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.41429234328785769, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 3.1308087404153113, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 13.586180626453050, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 87.117304082784415, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 889.26474381242826, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 16231.913312693494, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 653537.51168945129, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 87756230.793848589, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 101493977171.74945, 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 21375960679556916., 2.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test137()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data137)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data137[i].a), Tp(data137[i].b),
-                   Tp(data137[i].c), Tp(data137[i].x));
-      const Tp f0 = data137[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+// max(|f - f_GSL|): 40.000000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8712609271522778e-15
+// mean(f - f_GSL): 2.1052671749403089
+// variance(f - f_GSL): 84.210508462254538
+// stddev(f - f_GSL): 9.1766283820504881
+const testcase_hyperg<double>
+data137[19] =
+{
+  { 0.018828092583720632, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.023381944060455365, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.029789623984280887, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.039191021482500567, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.053727813036721528, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.077762010061668857, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.12110505620123323, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.20870149809080582, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.41429234328785763, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 3.1308087404153113, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 13.586180626453100, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 87.117304082784415, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 889.26474381243384, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 16231.913312693494, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 653537.51168945129, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 87756230.793849647, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 101493977171.74945, 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 21375960679557820., 2.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler137 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data138[] = {
-  { 0.049200410661854252, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.059460876757152226, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.073244762686653350, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.092334626017932922, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.11976760350696837, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.16102414609169383, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.22670456785796222, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.33912903252727361, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.55049794600858060, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 2.1254722872032232, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 5.6261213886736172, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 20.137315891130996, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 108.04381584643853, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 992.41692466460245, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 19055.363816004465, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1105471.9504312086, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 448521363.90608919, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 19078917293639.004, 2.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test138()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data138)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data138[i].a), Tp(data138[i].b),
-                   Tp(data138[i].c), Tp(data138[i].x));
-      const Tp f0 = data138[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+// max(|f - f_GSL|): 0.031250000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6379336164121759e-15
+// mean(f - f_GSL): 0.0016447556893365942
+// variance(f - f_GSL): 5.1397960874034849e-05
+// stddev(f - f_GSL): 0.0071692371193896806
+const testcase_hyperg<double>
+data138[19] =
+{
+  { 0.049200410661854238, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.059460876757152607, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.073244762686653225, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.092334626017932769, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.11976760350696856, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.16102414609169405, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.22670456785796236, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.33912903252727361, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.55049794600858049, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 2.1254722872032232, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 5.6261213886736314, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 20.137315891130996, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 108.04381584643900, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 992.41692466460245, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 19055.363816004465, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1105471.9504312191, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 448521363.90608919, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 19078917293639.652, 2.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler138 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data139[] = {
-  { 0.083753547015334745, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.099238444687035701, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.11938294012867758, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.14622683905023326, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.18303556733713025, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.23527764069382409, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.31261681740827085, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.43327581880538862, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.63445840637296658, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.7438842395813297, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 3.5070840938209269, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 8.6573372006089713, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 28.779342118408906, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 147.50178613955714, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1427.1686016136398, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 36780.643714655642, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 5313869.6058585485, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 46057280607.381966, 2.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test139()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data139)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data139[i].a), Tp(data139[i].b),
-                   Tp(data139[i].c), Tp(data139[i].x));
-      const Tp f0 = data139[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8.3923339843750000e-05 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8221514326726564e-15
+// mean(f - f_GSL): 4.4172143495227617e-06
+// variance(f - f_GSL): 3.7068906120670492e-10
+// stddev(f - f_GSL): 1.9253287023433297e-05
+const testcase_hyperg<double>
+data139[19] =
+{
+  { 0.083753547015334884, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.099238444687035743, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.11938294012867748, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.14622683905023329, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.18303556733713028, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.23527764069382415, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.31261681740827069, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.43327581880538862, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.63445840637296680, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.7438842395813297, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.5070840938209331, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 8.6573372006089713, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 28.779342118408998, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 147.50178613955714, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1427.1686016136398, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 36780.643714655955, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 5313869.6058585485, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 46057280607.383286, 2.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler139 = 2.5000000000000020e-13;
 
 // Test data for a=2.0000000000000000, b=20.000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data140[] = {
-  { 0.11920045035073683, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.13907946814302774, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.16431439792559688, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.19698796016987008, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.24028510928790570, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.29926031296483119, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.38229327814229169, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.50402047283093110, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.69167261179586503, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.5503152253394308, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 2.6469548193635797, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 5.1882631330566813, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 12.476792759124516, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 41.026391565091259, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 220.92584715988204, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 2677.0834450236207, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 141774.31260689779, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 254267148.83196995, 2.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=2.0000000000000000, b=20.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test140()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data140)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data140[i].a), Tp(data140[i].b),
-                   Tp(data140[i].c), Tp(data140[i].x));
-      const Tp f0 = data140[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 5.0663948059082031e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9925479281069681e-15
+// mean(f - f_GSL): 2.6669880993704522e-08
+// variance(f - f_GSL): 1.3509399735218820e-14
+// stddev(f - f_GSL): 1.1622994336752823e-07
+const testcase_hyperg<double>
+data140[19] =
+{
+  { 0.11920045035073676, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.13907946814302777, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.16431439792559696, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.19698796016986989, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.24028510928790547, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.29926031296483130, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.38229327814229175, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.50402047283093132, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.69167261179586526, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.5503152253394308, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 2.6469548193635828, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 5.1882631330566813, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 12.476792759124546, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 41.026391565091259, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 220.92584715988204, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 2677.0834450236389, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 141774.31260689779, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 254267148.83197621, 2.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler140 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data141[] = {
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test141()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data141)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data141[i].a), Tp(data141[i].b),
-                   Tp(data141[i].c), Tp(data141[i].x));
-      const Tp f0 = data141[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data141[19] =
+{
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler141 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data142[] = {
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test142()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data142)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data142[i].a), Tp(data142[i].b),
-                   Tp(data142[i].c), Tp(data142[i].x));
-      const Tp f0 = data142[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data142[19] =
+{
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler142 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data143[] = {
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test143()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data143)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data143[i].a), Tp(data143[i].b),
-                   Tp(data143[i].c), Tp(data143[i].x));
-      const Tp f0 = data143[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data143[19] =
+{
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler143 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data144[] = {
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test144()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data144)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data144[i].a), Tp(data144[i].b),
-                   Tp(data144[i].c), Tp(data144[i].x));
-      const Tp f0 = data144[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data144[19] =
+{
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler144 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data145[] = {
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test145()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data145)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data145[i].a), Tp(data145[i].b),
-                   Tp(data145[i].c), Tp(data145[i].x));
-      const Tp f0 = data145[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data145[19] =
+{
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler145 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data146[] = {
-  { 0.52275983209457511, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.54700336898142965, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.57468955512601971, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.60665490543315015, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.64403057859056123, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.68838183648623719, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.74193265039311085, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.80794095908995300, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.89135275749639320, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.1469266219310688, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.3552340708357489, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.6690840478838305, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 2.1815415453174483, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 3.1156892546032235, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 5.1109077417760416, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 10.560352936466296, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 33.541019662496815, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 300.66343065819501, 5.0000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test146()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data146)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data146[i].a), Tp(data146[i].b),
-                   Tp(data146[i].c), Tp(data146[i].x));
-      const Tp f0 = data146[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.5474735088646412e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5124797514980592e-15
+// mean(f - f_GSL): 2.5336458077761468e-14
+// variance(f - f_GSL): 1.0813211674051158e-26
+// stddev(f - f_GSL): 1.0398659372270619e-13
+const testcase_hyperg<double>
+data146[19] =
+{
+  { 0.52275983209457544, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.54700336898143009, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.57468955512602038, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.60665490543315048, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.64403057859056190, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.68838183648623719, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.74193265039311118, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.80794095908995300, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.89135275749639320, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1469266219310688, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3552340708357493, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.6690840478838305, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.1815415453174500, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 3.1156892546032235, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 5.1109077417760416, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 10.560352936466318, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 33.541019662496815, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 300.66343065819723, 5.0000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler146 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data147[] = {
-  { 0.68252041951139264, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.70394732624993395, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.72748884971552041, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.75351147371199689, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.78247589005573748, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.81497017420249818, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.85175826875009564, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.89385278481745867, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.94262778709507411, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0687327277420910, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.1529725508983291, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.2592587134058799, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.3985773194637892, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.5909902576697317, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.8776023607249752, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 2.3582499003694646, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 3.3541019662496838, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 6.7198400278577859, 5.0000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test147()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data147)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data147[i].a), Tp(data147[i].b),
-                   Tp(data147[i].c), Tp(data147[i].x));
-      const Tp f0 = data147[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8.8817841970012523e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3217255411112292e-15
+// mean(f - f_GSL): 6.8950693108299193e-16
+// variance(f - f_GSL): 3.9356627445430313e-30
+// stddev(f - f_GSL): 1.9838504844224102e-15
+const testcase_hyperg<double>
+data147[19] =
+{
+  { 0.68252041951139286, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.70394732624993395, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.72748884971552052, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.75351147371199667, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.78247589005573737, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.81497017420249795, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.85175826875009608, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.89385278481745867, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.94262778709507411, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0687327277420910, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1529725508983291, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.2592587134058799, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.3985773194637896, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.5909902576697317, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.8776023607249752, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.3582499003694664, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 3.3541019662496838, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 6.7198400278578028, 5.0000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler147 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data148[] = {
-  { 0.75755211927082589, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.77603550233010998, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.79596241913438492, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.81753360792105201, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.84099165409805521, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.86663303852180873, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.89482475828629970, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.92602774279590350, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.96083064727087386, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0445570841313008, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0959004638926031, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.1560106261370562, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.2278121770678145, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.3158640214709998, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.4278095344155000, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.5778700502946612, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.7972173289196469, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 2.1789970569269732, 5.0000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test148()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data148)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data148[i].a), Tp(data148[i].b),
-                   Tp(data148[i].c), Tp(data148[i].x));
-      const Tp f0 = data148[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.6645352591003757e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2228264607471081e-15
+// mean(f - f_GSL): 2.2788788400200583e-16
+// variance(f - f_GSL): 3.4817209315093131e-31
+// stddev(f - f_GSL): 5.9006109272763554e-16
+const testcase_hyperg<double>
+data148[19] =
+{
+  { 0.75755211927082600, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.77603550233010965, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.79596241913438504, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.81753360792105212, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.84099165409805532, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.86663303852180906, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.89482475828629915, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.92602774279590350, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.96083064727087386, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0445570841313008, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0959004638926033, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1560106261370562, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2278121770678148, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.3158640214709998, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.4278095344155000, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.5778700502946617, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.7972173289196469, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.1789970569269732, 5.0000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler148 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data149[] = {
-  { 0.80270093579329471, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.81884974572462788, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.83605266330015271, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.85443340762795972, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.87413762182790655, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.89533826626907331, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.91824276674115268, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.94310265050720576, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.97022678857609712, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0329098673199812, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0695865684573389, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.1108642103944570, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.1578795055970506, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.2122394794169442, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.2763274721556934, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.3539179650251021, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.4515986118197148, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.5829284571614219, 5.0000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test149()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data149)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data149[i].a), Tp(data149[i].b),
-                   Tp(data149[i].c), Tp(data149[i].x));
-      const Tp f0 = data149[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8.8817841970012523e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.6109827053892650e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 3.8685788127881258e-32
+// stddev(f - f_GSL): 1.9668703090921186e-16
+const testcase_hyperg<double>
+data149[19] =
+{
+  { 0.80270093579329460, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.81884974572462765, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.83605266330015260, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.85443340762796027, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.87413762182790711, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.89533826626907298, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.91824276674115313, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.94310265050720576, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.97022678857609712, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0329098673199812, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0695865684573389, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1108642103944570, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1578795055970506, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.2122394794169442, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2763274721556934, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.3539179650251021, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.4515986118197148, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5829284571614224, 5.0000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler149 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data150[] = {
-  { 0.83322694172301959, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.84753931604765664, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.86265784532195022, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.87866479300707079, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.89565516540263501, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.91373946207610557, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.93304721345881891, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.95373159512905148, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.97597554238828121, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0260752851887982, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0545371197996178, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0858099017045830, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.1204416568688709, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.1591587835964847, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.2029564720303347, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.2532588722007874, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.3122319926925459, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.3834948587364100, 5.0000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test150()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data150)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data150[i].a), Tp(data150[i].b),
-                   Tp(data150[i].c), Tp(data150[i].x));
-      const Tp f0 = data150[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 3.2099086385883890e-16
+// mean(f - f_GSL): 5.8432790769745078e-17
+// variance(f - f_GSL): 8.7218722159852367e-33
+// stddev(f - f_GSL): 9.3390964316604188e-17
+const testcase_hyperg<double>
+data150[19] =
+{
+  { 0.83322694172301981, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.84753931604765675, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.86265784532195022, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.87866479300707090, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.89565516540263501, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.91373946207610557, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.93304721345881914, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.95373159512905148, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.97597554238828121, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0260752851887982, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0545371197996178, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0858099017045830, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.1204416568688709, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.1591587835964847, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.2029564720303347, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.2532588722007874, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.3122319926925459, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.3834948587364102, 5.0000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler150 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data151[] = {
-  { 0.25646288779245091, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.28273129096174382, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.31438201170962976, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.35308837890625017, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.40123456790123463, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.46230737192836319, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.54156016946185359, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.64718364197530875, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.79246636158732342, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.3103947568968148, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.8017578125000004, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 2.6374427321949185, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 4.1975308641975282, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 7.4999999999999964, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 15.859375000000012, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 43.734567901234513, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 194.99999999999994, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 2777.4999999999832, 5.0000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test151()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data151)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data151[i].a), Tp(data151[i].b),
-                   Tp(data151[i].c), Tp(data151[i].x));
-      const Tp f0 = data151[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.0927261579781771e-12 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4735287697491136e-15
+// mean(f - f_GSL): 2.2385017815981644e-13
+// variance(f - f_GSL): 8.7776489381819171e-25
+// stddev(f - f_GSL): 9.3689107895111895e-13
+const testcase_hyperg<double>
+data151[19] =
+{
+  { 0.25646288779245086, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.28273129096174376, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.31438201170962982, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.35308837890625017, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.40123456790123452, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.46230737192836352, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.54156016946185348, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.64718364197530875, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.79246636158732342, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3103947568968148, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.8017578125000016, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 2.6374427321949185, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 4.1975308641975335, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 7.4999999999999964, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 15.859375000000012, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 43.734567901234662, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 194.99999999999994, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2777.5000000000095, 5.0000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler151 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data152[] = {
-  { 0.46398891966759004, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.49382716049382713, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.52768166089965396, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.56640624999999978, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.61111111111111116, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.66326530612244894, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.72485207100591698, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.79861111111111094, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.88842975206611552, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.1419753086419753, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.3281249999999998, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.5816326530612239, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.9444444444444444, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 2.5000000000000000, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 3.4374999999999996, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 5.2777777777777715, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 9.9999999999999947, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 32.499999999999837, 5.0000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test152()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data152)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data152[i].a), Tp(data152[i].b),
-                   Tp(data152[i].c), Tp(data152[i].x));
-      const Tp f0 = data152[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.2632564145606011e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3117712044801870e-15
+// mean(f - f_GSL): 2.6879083754082736e-15
+// variance(f - f_GSL): 9.3567700516642700e-29
+// stddev(f - f_GSL): 9.6730398798228218e-15
+const testcase_hyperg<double>
+data152[19] =
+{
+  { 0.46398891966759009, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.49382716049382724, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.52768166089965407, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.56640625000000000, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.61111111111111094, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.66326530612244916, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.72485207100591709, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.79861111111111094, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.88842975206611552, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1419753086419753, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3281250000000000, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.5816326530612239, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.9444444444444458, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 2.5000000000000000, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 3.4374999999999996, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 5.2777777777777786, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 9.9999999999999947, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 32.499999999999950, 5.0000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler152 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data153[] = {
-  { 0.57476744883397501, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.60302731682513933, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.63425708719096396, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.66895764182970419, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.70775063063963428, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.75141762103495924, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.80095569442603298, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.85765823887436754, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.92323549576335540, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0911622464839472, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.2013226178607666, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.3373332072682687, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.5099074378209716, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.7368822229245819, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 2.0505871832661429, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 2.5172389775867967, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 3.3015631983556144, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 5.0005935155044519, 5.0000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test153()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data153)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data153[i].a), Tp(data153[i].b),
-                   Tp(data153[i].c), Tp(data153[i].x));
-      const Tp f0 = data153[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 6.2172489379008766e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2433022037532449e-15
+// mean(f - f_GSL): 4.9083544246585873e-16
+// variance(f - f_GSL): 1.9229766015225486e-30
+// stddev(f - f_GSL): 1.3867143186404864e-15
+const testcase_hyperg<double>
+data153[19] =
+{
+  { 0.57476744883397490, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.60302731682513966, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.63425708719096374, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.66895764182970430, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.70775063063963473, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.75141762103495946, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.80095569442603320, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.85765823887436754, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.92323549576335540, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0911622464839472, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2013226178607672, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.3373332072682687, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.5099074378209718, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.7368822229245819, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2.0505871832661429, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.5172389775867976, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 3.3015631983556144, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.0005935155044563, 5.0000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler153 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data154[] = {
-  { 0.64582752605387961, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.67184161997264169, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.70012779922368040, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.73100784656910256, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.76486919089091077, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.80218301124334579, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.84352883533234446, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.88962858902212572, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.94139473468584123, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0669812691939897, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.1443996012177726, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.2350966976721314, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.3431264370409088, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.4745266814162399, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.6388137104840066, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.8522074849776518, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 2.1458016978417458, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 2.5927464669826339, 5.0000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test154()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data154)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data154[i].a), Tp(data154[i].b),
-                   Tp(data154[i].c), Tp(data154[i].x));
-      const Tp f0 = data154[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 3.1086244689504383e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.1989697058841885e-15
+// mean(f - f_GSL): 2.4541772123292936e-16
+// variance(f - f_GSL): 4.8074415038063715e-31
+// stddev(f - f_GSL): 6.9335715932024320e-16
+const testcase_hyperg<double>
+data154[19] =
+{
+  { 0.64582752605387983, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.67184161997264191, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.70012779922368040, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.73100784656910278, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.76486919089091066, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.80218301124334590, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.84352883533234391, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.88962858902212572, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.94139473468584123, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0669812691939897, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1443996012177726, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.2350966976721314, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.3431264370409088, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.4745266814162399, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.6388137104840066, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.8522074849776522, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2.1458016978417458, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.5927464669826348, 5.0000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler154 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data155[] = {
-  { 0.69583236336670629, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.71968920666899694, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.74533885416044232, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.77300145361503014, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.80293630810919514, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.83545132638592035, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.87091544744412508, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.90977522877919847, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.95257738192069130, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0528968282789379, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.1123617169062123, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.1798254572896132, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.2572069000522696, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.3471600884974377, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.4535032279573519, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.5820245752814948, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.7421756366906538, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.9513145531098233, 5.0000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test155()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data155)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data155[i].a), Tp(data155[i].b),
-                   Tp(data155[i].c), Tp(data155[i].x));
-      const Tp f0 = data155[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 6.8275390424723874e-16
+// mean(f - f_GSL): 1.0517902338554114e-16
+// variance(f - f_GSL): 8.8299945988280290e-32
+// stddev(f - f_GSL): 2.9715306828010425e-16
+const testcase_hyperg<double>
+data155[19] =
+{
+  { 0.69583236336670584, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.71968920666899716, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.74533885416044232, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.77300145361503070, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.80293630810919447, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.83545132638592057, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.87091544744412497, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.90977522877919847, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.95257738192069130, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0528968282789379, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1123617169062123, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1798254572896132, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2572069000522701, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.3471600884974377, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.4535032279573519, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.5820245752814950, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.7421756366906538, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.9513145531098235, 5.0000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler155 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data156[] = {
-  { 0.040386107340619266, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.052922149401344633, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.070429627772374270, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.095367431640624972, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.13168724279835387, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.18593443208187066, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.26932907434290437, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.40187757201646096, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.62092132305915493, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.6935087808430296, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 3.0517578124999991, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 5.9499018266198629, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 12.860082304526737, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 32.000000000000000, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 97.656250000000114, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 411.52263374485580, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 3124.9999999999991, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 99999.999999999665, 5.0000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test156()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data156)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data156[i].a), Tp(data156[i].b),
-                   Tp(data156[i].c), Tp(data156[i].x));
-      const Tp f0 = data156[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.0186340659856796e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.1641532182693482e-15
+// mean(f - f_GSL): 5.5487040400966458e-12
+// variance(f - f_GSL): 5.4399356990620132e-22
+// stddev(f - f_GSL): 2.3323669734975269e-11
+const testcase_hyperg<double>
+data156[19] =
+{
+  { 0.040386107340619273, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.052922149401344633, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.070429627772374270, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.095367431640624986, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.13168724279835389, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.18593443208187072, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.26932907434290460, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.40187757201646102, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.62092132305915493, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.6935087808430296, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.0517578125000036, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 5.9499018266198629, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 12.860082304526767, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 32.000000000000000, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 97.656250000000114, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 411.52263374485722, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 3124.9999999999995, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 100000.00000000055, 5.0000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler156 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data157[] = {
-  { 0.21140107887447140, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.24005486968449935, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.27478119275391821, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.31738281249999994, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.37037037037037035, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.43731778425655982, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.52344105598543444, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.63657407407407429, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.78888054094665638, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.3031550068587108, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.7578125000000002, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 2.4781341107871717, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 3.7037037037037037, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 5.9999999999999982, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 10.937500000000005, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 24.074074074074076, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 74.999999999999957, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 549.99999999999670, 5.0000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test157()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data157)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data157[i].a), Tp(data157[i].b),
-                   Tp(data157[i].c), Tp(data157[i].x));
-      const Tp f0 = data157[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 6.8212102632969618e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.2402200478721734e-15
+// mean(f - f_GSL): 3.8828589466495609e-14
+// variance(f - f_GSL): 2.4267524775254640e-26
+// stddev(f - f_GSL): 1.5578037352392837e-13
+const testcase_hyperg<double>
+data157[19] =
+{
+  { 0.21140107887447138, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.24005486968449927, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.27478119275391810, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.31738281250000006, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.37037037037037024, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.43731778425655982, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.52344105598543467, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.63657407407407429, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.78888054094665638, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3031550068587108, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.7578125000000011, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 2.4781341107871717, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 3.7037037037037073, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 5.9999999999999982, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 10.937500000000005, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 24.074074074074115, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 74.999999999999957, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 550.00000000000068, 5.0000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler157 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data158[] = {
-  { 0.33250915203252107, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.36566851047721960, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.40414812182437942, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.44916943268118470, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.50233081077479569, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.56575808728873322, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.64233106844971422, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.73603371116919514, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.85251256240112439, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.1909065696197674, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.4447095285569311, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.7935243137840653, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 2.2937035820494454, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 3.0524711083016687, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 4.2976512669354259, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 6.5977107563194677, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 11.793747206577530, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 29.997625937982058, 5.0000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test158()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data158)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data158[i].a), Tp(data158[i].b),
-                   Tp(data158[i].c), Tp(data158[i].x));
-      const Tp f0 = data158[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.9737991503207013e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6580642616864621e-15
+// mean(f - f_GSL): 3.1670572597201835e-15
+// variance(f - f_GSL): 1.2718576052442072e-28
+// stddev(f - f_GSL): 1.1277666448535384e-14
+const testcase_hyperg<double>
+data158[19] =
+{
+  { 0.33250915203252129, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.36566851047721943, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.40414812182437959, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.44916943268118498, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.50233081077479547, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.56575808728873322, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.64233106844971455, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.73603371116919514, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.85251256240112439, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1909065696197674, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.4447095285569318, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.7935243137840653, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.2937035820494467, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 3.0524711083016687, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 4.2976512669354259, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 6.5977107563194739, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 11.793747206577530, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 29.997625937982132, 5.0000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler158 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data159[] = {
-  { 0.42108197362250305, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.45503172013983051, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.49345609813624303, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.53720880551221295, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.58736431524847466, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.64529222467897962, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.71276337354393904, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.79210466220795306, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.88643063455510596, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.1387832139040652, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.3114025920844752, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.5307655016768162, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.8170727950333345, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 2.2037865486700836, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 2.7506766056439380, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 3.5764534935716972, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 4.9587762302155403, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 7.7740847924166800, 5.0000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test159()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data159)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data159[i].a), Tp(data159[i].b),
-                   Tp(data159[i].c), Tp(data159[i].x));
-      const Tp f0 = data159[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.1546319456101628e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4852319937858925e-15
+// mean(f - f_GSL): 8.5896202431525265e-16
+// variance(f - f_GSL): 6.6980634833963886e-30
+// stddev(f - f_GSL): 2.5880617232586221e-15
+const testcase_hyperg<double>
+data159[19] =
+{
+  { 0.42108197362250294, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.45503172013983040, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.49345609813624314, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.53720880551221295, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.58736431524847466, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.64529222467897995, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.71276337354393959, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.79210466220795306, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.88643063455510596, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1387832139040652, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3114025920844754, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.5307655016768162, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.8170727950333352, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 2.2037865486700836, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2.7506766056439380, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3.5764534935716998, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 4.9587762302155403, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 7.7740847924166907, 5.0000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler159 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data160[] = {
-  { 0.48860241312958425, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.52193382517068487, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.55902375003954219, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.60049055150230346, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.64709127927203480, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.69976233335368998, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.75967529501081055, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.82831498895254407, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.90759090169653933, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.1088712278667465, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.2387445478440853, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.3959812720437546, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.5897930661091164, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.8340789380307454, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 2.1509548085970764, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 2.5782406951207504, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 3.1877847194242737, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 4.1421596631676900, 5.0000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test160()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data160)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data160[i].a), Tp(data160[i].b),
-                   Tp(data160[i].c), Tp(data160[i].x));
-      const Tp f0 = data160[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.0721199711322765e-15
+// mean(f - f_GSL): 3.5059674461847049e-16
+// variance(f - f_GSL): 9.8111051098089205e-31
+// stddev(f - f_GSL): 9.9051022760034740e-16
+const testcase_hyperg<double>
+data160[19] =
+{
+  { 0.48860241312958436, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.52193382517068487, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.55902375003954219, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.60049055150230324, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.64709127927203469, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.69976233335368998, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.75967529501080988, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.82831498895254407, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.90759090169653933, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1088712278667465, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2387445478440855, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.3959812720437546, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.5897930661091169, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.8340789380307454, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 2.1509548085970764, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 2.5782406951207526, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 3.1877847194242737, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 4.1421596631676918, 5.0000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler160 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data161[] = {
-  { -0.0047236848832209691, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { -0.0073321496427103212, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { -0.010977302557845672, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { -0.015692785382270907, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { -0.020728547477518677, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { -0.022767481479412769, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { -0.010634636868114139, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.050699832580781923, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.27045765367659280, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 3.4387055868901171, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 12.052059173583981, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 45.565319600798020, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 196.23532998018572, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1032.0000000000002, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 7376.0986328125073, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 86964.639536655843, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 2596875.0000000009, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 766224999.99999273, 5.0000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test161()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data161)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data161[i].a), Tp(data161[i].b),
-                   Tp(data161[i].c), Tp(data161[i].x));
-      const Tp f0 = data161[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-}
+// max(|f - f_GSL|): 1.3113021850585938e-06 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.9699111427019355e-14
+// mean(f - f_GSL): 6.9091057386613658e-08
+// variance(f - f_GSL): 9.0489756878178256e-14
+// stddev(f - f_GSL): 3.0081515400354792e-07
+const testcase_hyperg<double>
+data161[19] =
+{
+  { -0.0047236848832209926, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { -0.0073321496427104288, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { -0.010977302557845620, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { -0.015692785382270882, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { -0.020728547477518663, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { -0.022767481479412773, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.010634636868114097, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.050699832580781923, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.27045765367659280, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 3.4387055868901171, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 12.052059173584013, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 45.565319600798020, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 196.23532998018635, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1032.0000000000002, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 7376.0986328125073, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 86964.639536656410, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2596875.0000000009, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 766225000.00000668, 5.0000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler161 = 2.5000000000000015e-12;
 
 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data162[] = {
-  { 0.016473280625778897, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.023520955289486407, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.034179084066004943, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.050663948059082052, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.076817558299039843, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.11952927776691676, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.19163799520552813, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.31815307784636504, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.55036208180243285, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.9287183337378946, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 4.0054321289062473, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 9.1373492337376394, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 23.576817558299005, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 71.999999999999972, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 280.76171875000023, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1611.7969821673514, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 18749.999999999996, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1224999.9999999879, 5.0000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test162()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data162)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data162[i].a), Tp(data162[i].b),
-                   Tp(data162[i].c), Tp(data162[i].x));
-      const Tp f0 = data162[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+// max(|f - f_GSL|): 1.8626451492309570e-09 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5205266524334267e-15
+// mean(f - f_GSL): 9.8838934113244577e-11
+// variance(f - f_GSL): 1.8243591026317757e-19
+// stddev(f - f_GSL): 4.2712516931594835e-10
+const testcase_hyperg<double>
+data162[19] =
+{
+  { 0.016473280625778776, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.023520955289486591, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.034179084066005165, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.050663948059081955, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.076817558299039870, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.11952927776691663, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.19163799520552807, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.31815307784636504, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.55036208180243285, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.9287183337378946, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 4.0054321289062544, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 9.1373492337376394, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 23.576817558299062, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 71.999999999999972, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 280.76171875000023, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1611.7969821673578, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 18749.999999999996, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1225000.0000000061, 5.0000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler162 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data163[] = {
-  { 0.067462409738203513, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.084813629887172517, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.10799223563666410, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.13947766136095369, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.18305927261494304, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.24468431546783445, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.33397274564972956, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.46703323887436765, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.67194346197695642, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.5503148146900136, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 2.5278200136940998, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 4.3933515329658954, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 8.3000308946110888, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 17.570215556257921, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 43.847462183266167, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 141.86909082943853, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 736.63489653168926, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 12117.500593515439, 5.0000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test163()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data163)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data163[i].a), Tp(data163[i].b),
-                   Tp(data163[i].c), Tp(data163[i].x));
-      const Tp f0 = data163[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.8189894035458565e-11 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5011259042308243e-15
+// mean(f - f_GSL): 9.8916196870839876e-13
+// variance(f - f_GSL): 1.7350118793242040e-23
+// stddev(f - f_GSL): 4.1653473796601937e-12
+const testcase_hyperg<double>
+data163[19] =
+{
+  { 0.067462409738203527, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.084813629887172531, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.10799223563666395, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.13947766136095380, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.18305927261494301, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.24468431546783478, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.33397274564972962, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.46703323887436765, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.67194346197695642, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.5503148146900136, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.5278200136941025, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 4.3933515329658954, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 8.3000308946111048, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 17.570215556257921, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 43.847462183266167, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 141.86909082943893, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 736.63489653168926, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 12117.500593515540, 5.0000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler163 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data164[] = {
-  { 0.12409443806004232, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.14886910375100412, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.18023328876836334, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.22044046981094714, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.27271160690708801, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.34174821195025840, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.43457788826160237, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.56199385898404552, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.74109892753745221, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.3869229400096228, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.9890168748121255, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 2.9741205609307424, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 4.6924751038237300, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 7.9555939380658254, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 14.933102063314404, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 32.780461638447491, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 94.848124287773530, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 523.16034401517425, 5.0000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test164()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data164)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data164[i].a), Tp(data164[i].b),
-                   Tp(data164[i].c), Tp(data164[i].x));
-      const Tp f0 = data164[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 6.8212102632969618e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3038469641917422e-15
+// mean(f - f_GSL): 3.9518096397578601e-14
+// variance(f - f_GSL): 2.4215530819720675e-26
+// stddev(f - f_GSL): 1.5561340179984714e-13
+const testcase_hyperg<double>
+data164[19] =
+{
+  { 0.12409443806004226, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.14886910375100415, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.18023328876836348, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.22044046981094723, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.27271160690708790, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.34174821195025845, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.43457788826160282, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.56199385898404552, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.74109892753745221, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3869229400096228, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.9890168748121269, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 2.9741205609307424, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 4.6924751038237345, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 7.9555939380658254, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 14.933102063314404, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 32.780461638447541, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 94.848124287773530, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 523.16034401517709, 5.0000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler164 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data165[] = {
-  { 0.17885405888526873, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.20861302518993380, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.24504033307244924, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.29007236051133478, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.34635542859732726, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.41756858504598376, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.50892615622124382, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.62798173270509761, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.78595487360378424, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.2972517637384813, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.7224028197396388, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 2.3527690438263305, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 3.3305218060101116, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 4.9383884076775466, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 7.8007604680775229, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 13.518663719271885, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 27.285345906502567, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 75.572415101501988, 5.0000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test165()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data165)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data165[i].a), Tp(data165[i].b),
-                   Tp(data165[i].c), Tp(data165[i].x));
-      const Tp f0 = data165[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 9.9475983006414026e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3163001721303552e-15
+// mean(f - f_GSL): 6.1880325425160040e-15
+// variance(f - f_GSL): 5.1034009979425656e-28
+// stddev(f - f_GSL): 2.2590708262342210e-14
+const testcase_hyperg<double>
+data165[19] =
+{
+  { 0.17885405888526873, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.20861302518993391, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.24504033307244946, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.29007236051133489, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.34635542859732737, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.41756858504598410, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.50892615622124393, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.62798173270509761, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.78595487360378424, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.2972517637384813, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.7224028197396399, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 2.3527690438263305, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 3.3305218060101147, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 4.9383884076775466, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 7.8007604680775229, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 13.518663719271903, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 27.285345906502567, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 75.572415101502216, 5.0000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler165 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data166[] = {
-  { 0.00063586451658060152, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.0010334743461762443, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.0015326246054669515, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.0019007018181583387, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.0012845577715431577, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { -0.0027213806178058826, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { -0.015121744574954068, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { -0.036637840562974443, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.019117849062621491, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 9.8116901852350615, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 84.255589172244044, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 773.87517619421294, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 8556.9725363053585, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 129023.99999999996, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 3174543.3807373112, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 175133896.95814410, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 43564453125.000061, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 446859999999993.50, 5.0000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test166()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data166)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data166[i].a), Tp(data166[i].b),
-                   Tp(data166[i].c), Tp(data166[i].x));
-      const Tp f0 = data166[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
-}
+// max(|f - f_GSL|): 0.81250000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8182428501096257e-15
+// mean(f - f_GSL): 0.042765168793266639
+// variance(f - f_GSL): 0.034744884250260212
+// stddev(f - f_GSL): 0.18639979680852714
+const testcase_hyperg<double>
+data166[19] =
+{
+  { 0.00063586451658060813, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.0010334743461763829, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.0015326246054669763, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.0019007018181583513, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.0012845577715431562, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { -0.0027213806178060305, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.015121744574954044, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { -0.036637840562974290, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.019117849062621605, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 9.8116901852350615, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 84.255589172244427, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 773.87517619421294, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 8556.9725363054076, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 129023.99999999996, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 3174543.3807373112, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 175133896.95814583, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 43564453125.000061, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 446860000000007.00, 5.0000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler166 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data167[] = {
-  { -0.00030045430691819899, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { -0.00031119487747328581, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { -0.00014589213141649274, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.00056843418860809121, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.0028902549859721725, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.0098776037238877470, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.030689217428863914, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.094211590019076599, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.29791981455918376, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 3.6646308771236793, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 15.133991837501521, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 73.331330046144089, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 441.01791167787133, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 3583.9999999999991, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 45299.530029296984, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1157231.0002427341, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 107421875.00000016, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 234999999999.99734, 5.0000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test167()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data167)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data167[i].a), Tp(data167[i].b),
-                   Tp(data167[i].c), Tp(data167[i].x));
-      const Tp f0 = data167[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-}
+// max(|f - f_GSL|): 0.00039672851562500000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6882064494680641e-15
+// mean(f - f_GSL): 2.0884382210121993e-05
+// variance(f - f_GSL): 8.2836958019297269e-09
+// stddev(f - f_GSL): 9.1014810893226203e-05
+const testcase_hyperg<double>
+data167[19] =
+{
+  { -0.00030045430691814646, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { -0.00031119487747322054, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { -0.00014589213141656318, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.00056843418860824636, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.0028902549859721747, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0098776037238877245, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.030689217428863859, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.094211590019076558, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.29791981455918370, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 3.6646308771236793, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 15.133991837501567, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 73.331330046144089, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 441.01791167787303, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 3583.9999999999991, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 45299.530029296984, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1157231.0002427436, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 107421875.00000016, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 235000000000.00293, 5.0000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler167 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data168[] = {
-  { 0.0058530497315411210, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.0088526869356855692, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.013770987983443108, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.022108932690960800, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.036786236450921578, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.063750669040426422, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.11577228680714464, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.22197573416125735, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.45361312968415268, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 2.4162889363082747, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 6.5381564791240399, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 20.415771011498428, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 76.870682056629221, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 373.58730158730162, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 2626.2555803571477, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 33060.960671081048, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1203521.8253968258, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 584564285.71427989, 5.0000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test168()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data168)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data168[i].a), Tp(data168[i].b),
-                   Tp(data168[i].c), Tp(data168[i].x));
-      const Tp f0 = data168[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-}
+// max(|f - f_GSL|): 9.5367431640625000e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6314276114917587e-15
+// mean(f - f_GSL): 5.0242811922592076e-08
+// variance(f - f_GSL): 4.7862904884501567e-14
+// stddev(f - f_GSL): 2.1877592391417655e-07
+const testcase_hyperg<double>
+data168[19] =
+{
+  { 0.0058530497315413248, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.0088526869356855397, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.013770987983442959, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.022108932690960776, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.036786236450921550, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.063750669040426408, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.11577228680714466, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.22197573416125760, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.45361312968415324, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 2.4162889363082747, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 6.5381564791240541, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 20.415771011498428, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 76.870682056629448, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 373.58730158730162, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2626.2555803571477, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 33060.960671081237, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1203521.8253968258, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 584564285.71428990, 5.0000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler168 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data169[] = {
-  { 0.020248990107069400, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.027876687750502421, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.039154648888447781, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.056251883506774923, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.082914189910074432, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.12585357817786477, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.19761423206224929, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.32280443863359243, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.55250024062839465, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.9374297986599267, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 4.0849049886067696, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 9.5926988633258983, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 25.958314281359531, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 85.333333333333300, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 372.31445312500028, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 2545.3436976070675, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 39583.333333333343, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 4599999.9999999627, 5.0000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test169()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data169)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data169[i].a), Tp(data169[i].b),
-                   Tp(data169[i].c), Tp(data169[i].x));
-      const Tp f0 = data169[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+// max(|f - f_GSL|): 7.4505805969238281e-09 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6196914341138665e-15
+// mean(f - f_GSL): 3.9331532183208954e-10
+// variance(f - f_GSL): 2.9206631793126476e-18
+// stddev(f - f_GSL): 1.7089947862157589e-09
+const testcase_hyperg<double>
+data169[19] =
+{
+  { 0.020248990107069573, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.027876687750502366, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.039154648888447607, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.056251883506774715, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.082914189910074473, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.12585357817786472, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.19761423206224940, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.32280443863359237, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.55250024062839420, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.9374297986599267, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 4.0849049886067759, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 9.5926988633258983, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 25.958314281359588, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 85.333333333333300, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 372.31445312500028, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2545.3436976070780, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 39583.333333333343, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4600000.0000000261, 5.0000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler169 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=10.000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data170[] = {
-  { 0.040386107340619266, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.052922149401344633, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.070429627772374270, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.095367431640624972, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.13168724279835387, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.18593443208187066, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.26932907434290437, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.40187757201646096, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.62092132305915493, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.6935087808430296, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 3.0517578124999991, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 5.9499018266198629, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 12.860082304526737, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 32.000000000000000, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 97.656250000000114, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 411.52263374485580, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 3124.9999999999991, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 99999.999999999665, 5.0000000000000000, 10.000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=10.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test170()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data170)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data170[i].a), Tp(data170[i].b),
-                   Tp(data170[i].c), Tp(data170[i].x));
-      const Tp f0 = data170[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.0186340659856796e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.1641532182693482e-15
+// mean(f - f_GSL): 5.5487040400966458e-12
+// variance(f - f_GSL): 5.4399356990620132e-22
+// stddev(f - f_GSL): 2.3323669734975269e-11
+const testcase_hyperg<double>
+data170[19] =
+{
+  { 0.040386107340619273, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.052922149401344633, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.070429627772374270, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.095367431640624986, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.13168724279835389, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.18593443208187072, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.26932907434290460, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.40187757201646102, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.62092132305915493, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.6935087808430296, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 3.0517578125000036, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 5.9499018266198629, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 12.860082304526767, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 32.000000000000000, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 97.656250000000114, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 411.52263374485722, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 3124.9999999999995, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 100000.00000000055, 5.0000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler170 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data171[] = {
-  { -1.8650300348791041e-05, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { -3.6488008415183135e-05, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { -6.4614776410999025e-05, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { -8.4495207102575916e-05, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 2.2276197023819217e-05, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.00070736115111467578, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.0027829732057272809, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.0013283545664373570, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { -0.041767631015048733, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 61.311496556100003, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 2397.4420539085681, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 103687.60998586559, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 6247196.6451068865, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 656408576.00000000, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 165334768098.54715, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 175097125520816.81, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 2.6818275451660257e+18, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 2.9794599999999321e+25, 5.0000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test171()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data171)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data171[i].a), Tp(data171[i].b),
-                   Tp(data171[i].c), Tp(data171[i].x));
-      const Tp f0 = data171[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000034e-10));
-}
+// max(|f - f_GSL|): 60129542144.000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.0181355730232468e-15
+// mean(f - f_GSL): 3164712852.2154636
+// variance(f - f_GSL): 1.9029272767041847e+20
+// stddev(f - f_GSL): 13794663014.021708
+const testcase_hyperg<double>
+data171[19] =
+{
+  { -1.8650300348790099e-05, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { -3.6488008415371319e-05, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { -6.4614776410961038e-05, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { -8.4495207102246549e-05, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 2.2276197023825424e-05, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.00070736115111457809, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0027829732057272588, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.0013283545664371644, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { -0.041767631015048774, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 61.311496556100003, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2397.4420539085872, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 103687.60998586559, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 6247196.6451069508, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 656408576.00000000, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 165334768098.54715, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 175097125520819.91, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2.6818275451660257e+18, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.9794600000000777e+25, 5.0000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler171 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data172[] = {
-  { -3.6403884515183385e-06, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { -9.5873829247725586e-06, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { -2.6052245147354694e-05, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { -7.2378303598294010e-05, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { -0.00020048577321454082, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { -0.00051222704046236022, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { -0.00080950511491911315, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.0043473422174314449, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.081078342558623825, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 12.794854084397739, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 195.15639104739046, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 3938.7991953190131, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 118521.48653762060, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 6291455.9999999972, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 773070496.50699198, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 363276452167.04102, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 2002716064453133.0, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 4.5999999999999109e+21, 5.0000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test172()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data172)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data172[i].a), Tp(data172[i].b),
-                   Tp(data172[i].c), Tp(data172[i].x));
-      const Tp f0 = data172[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
-}
+// max(|f - f_GSL|): 9437184.0000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.0515617391303805e-15
+// mean(f - f_GSL): 496693.97369064158
+// variance(f - f_GSL): 4687391593519.1660
+// stddev(f - f_GSL): 2165038.4739119918
+const testcase_hyperg<double>
+data172[19] =
+{
+  { -3.6403884516313627e-06, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { -9.5873829246491408e-06, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { -2.6052245147200097e-05, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { -7.2378303598384501e-05, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { -0.00020048577321417379, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { -0.00051222704046234439, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.00080950511491888959, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.0043473422174314250, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.081078342558623853, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 12.794854084397739, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 195.15639104739174, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 3938.7991953190131, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 118521.48653762160, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 6291455.9999999972, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 773070496.50699198, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 363276452167.04718, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2002716064453133.0, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4.6000000000001222e+21, 5.0000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler172 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data173[] = {
-  { 0.00014313323624069244, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.00025426183473140697, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.00048255612836426809, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.00099096904674788092, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.0022347805521915607, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.0056271390060292376, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.016109059519227226, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.053453465775608999, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.20995202901839258, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 5.9534372167648799, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 46.157632071205875, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 494.32074431164915, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 7989.5277611775946, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 224179.55830753347, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 13848144.485282511, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 2948587692.8891716, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 5940513286161.6602, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 2.8531757655945201e+18, 5.0000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test173()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data173)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data173[i].a), Tp(data173[i].b),
-                   Tp(data173[i].c), Tp(data173[i].x));
-      const Tp f0 = data173[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
-}
+// max(|f - f_GSL|): 5120.0000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7944916193878173e-15
+// mean(f - f_GSL): 269.47388985302263
+// variance(f - f_GSL): 1379705.1461701661
+// stddev(f - f_GSL): 1174.6085076186730
+const testcase_hyperg<double>
+data173[19] =
+{
+  { 0.00014313323624053599, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.00025426183473118769, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.00048255612836437054, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.00099096904674794185, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.0022347805521915616, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0056271390060294354, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.016109059519227351, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.053453465775609076, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.20995202901839263, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 5.9534372167648799, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 46.157632071206095, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 494.32074431164915, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 7989.5277611776519, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 224179.55830753347, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 13848144.485282511, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2948587692.8892150, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 5940513286161.6602, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.8531757655946394e+18, 5.0000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler173 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data174[] = {
-  { 0.0012492049968742865, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.0019931241968014451, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.0033203386861411057, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.0058191894509855282, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.010830090368313866, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.021653062305193163, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.047180821280919084, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.11405637279736180, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.31275468794720990, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 3.8598904658643969, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 18.806301417906667, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 122.77054465017432, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1168.4762146808946, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 18437.511788521082, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 597441.79669264762, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 59390411.369227782, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 44681668993.361603, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 4559673269683164.0, 5.0000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test174()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data174)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data174[i].a), Tp(data174[i].b),
-                   Tp(data174[i].c), Tp(data174[i].x));
-      const Tp f0 = data174[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
-}
+// max(|f - f_GSL|): 7.0000000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5351977183413728e-15
+// mean(f - f_GSL): 0.36842306154970872
+// variance(f - f_GSL): 2.5789458059294108
+// stddev(f - f_GSL): 1.6059096506122039
+const testcase_hyperg<double>
+data174[19] =
+{
+  { 0.0012492049968744917, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.0019931241968014200, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.0033203386861410844, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.0058191894509856774, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.010830090368313864, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.021653062305193541, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.047180821280919195, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.11405637279736212, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.31275468794721017, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 3.8598904658643969, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 18.806301417906734, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 122.77054465017432, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1168.4762146809012, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 18437.511788521082, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 597441.79669264762, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 59390411.369228527, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 44681668993.361603, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4559673269683333.0, 5.0000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler174 = 2.5000000000000020e-13;
 
 // Test data for a=5.0000000000000000, b=20.000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data175[] = {
-  { 0.0038867957051371450, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.0058484892597364443, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.0090987656053757009, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.014714392537270733, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.024900404542056769, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.044460184663785055, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.084638849196356836, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.17409058241290998, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.39357055823580755, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 2.9410794636226596, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 10.417226071414344, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 46.930585873140835, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 290.76717121814852, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 2788.1641083374830, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 50228.117718560752, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 2433042.3476752634, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 705345246.77141762, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 15652478868616.762, 5.0000000000000000, 20.000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=5.0000000000000000, b=20.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test175()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data175)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data175[i].a), Tp(data175[i].b),
-                   Tp(data175[i].c), Tp(data175[i].x));
-      const Tp f0 = data175[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+// max(|f - f_GSL|): 0.029296875000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8717083246628342e-15
+// mean(f - f_GSL): 0.0015419659355661440
+// variance(f - f_GSL): 4.5173964710879197e-05
+// stddev(f - f_GSL): 0.0067211579888348996
+const testcase_hyperg<double>
+data175[19] =
+{
+  { 0.0038867957051370739, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.0058484892597364235, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.0090987656053758189, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.014714392537270657, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.024900404542056772, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.044460184663785055, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.084638849196357113, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.17409058241291026, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.39357055823580767, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 2.9410794636226596, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 10.417226071414374, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 46.930585873140835, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 290.76717121814988, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 2788.1641083374830, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 50228.117718560752, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 2433042.3476752895, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 705345246.77141762, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 15652478868617.246, 5.0000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler175 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data176[] = {
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test176()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data176)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data176[i].a), Tp(data176[i].b),
-                   Tp(data176[i].c), Tp(data176[i].x));
-      const Tp f0 = data176[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data176[19] =
+{
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler176 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data177[] = {
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test177()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data177)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data177[i].a), Tp(data177[i].b),
-                   Tp(data177[i].c), Tp(data177[i].x));
-      const Tp f0 = data177[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data177[19] =
+{
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler177 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data178[] = {
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test178()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data178)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data178[i].a), Tp(data178[i].b),
-                   Tp(data178[i].c), Tp(data178[i].x));
-      const Tp f0 = data178[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data178[19] =
+{
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler178 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data179[] = {
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test179()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data179)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data179[i].a), Tp(data179[i].b),
-                   Tp(data179[i].c), Tp(data179[i].x));
-      const Tp f0 = data179[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data179[19] =
+{
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler179 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data180[] = {
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=0.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test180()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data180)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data180[i].a), Tp(data180[i].b),
-                   Tp(data180[i].c), Tp(data180[i].x));
-      const Tp f0 = data180[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data180[19] =
+{
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler180 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data181[] = {
-  { 0.37727530159464628, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.39816010922169010, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.42283703041362453, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.45255640448730505, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.48919507154431141, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.53569358917731880, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.59689778897029566, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.68128587569875731, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.80478739308790359, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.3408664196153621, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 2.0175364359923860, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 3.6011214553736646, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 8.1799429939495312, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 25.644834637536000, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 123.13738891597615, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1088.7122410321333, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 27358.291704709951, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 8174369.0266731177, 10.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test181()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data181)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data181[i].a), Tp(data181[i].b),
-                   Tp(data181[i].c), Tp(data181[i].x));
-      const Tp f0 = data181[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.4901161193847656e-08 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8229127098647768e-15
+// mean(f - f_GSL): 7.8543415046726153e-10
+// variance(f - f_GSL): 1.1684633485497506e-17
+// stddev(f - f_GSL): 3.4182793164832956e-09
+const testcase_hyperg<double>
+data181[19] =
+{
+  { 0.37727530159464628, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.39816010922169059, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.42283703041362447, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.45255640448730527, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.48919507154431119, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.53569358917731902, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.59689778897029577, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.68128587569875765, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.80478739308790359, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3408664196153621, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.0175364359923882, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 3.6011214553736646, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 8.1799429939495489, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 25.644834637536000, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 123.13738891597615, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1088.7122410321385, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 27358.291704709951, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 8174369.0266732639, 10.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler181 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data182[] = {
-  { 0.53905528308450834, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.56235533974376162, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.58887657983263575, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.61941227047262915, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.65504896640793853, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.69731666644529999, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.74844073299399128, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.81178446800105752, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.89266981277598023, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.1497248473106778, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.3729717112654571, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.7374982340374392, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 2.4134479340960580, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 3.9191255240471192, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 8.3316373077761270, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 28.323020339843335, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 225.84286572747891, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 12757.127591286655, 10.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test182()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data182)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data182[i].a), Tp(data182[i].b),
-                   Tp(data182[i].c), Tp(data182[i].x));
-      const Tp f0 = data182[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.0008883439004421e-11 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5684473872214445e-15
+// mean(f - f_GSL): 1.0626587329385841e-12
+// variance(f - f_GSL): 2.1050090066796454e-23
+// stddev(f - f_GSL): 4.5880377141863658e-12
+const testcase_hyperg<double>
+data182[19] =
+{
+  { 0.53905528308450823, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.56235533974376162, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.58887657983263575, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.61941227047262937, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.65504896640793864, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.69731666644529977, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.74844073299399116, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.81178446800105830, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.89266981277598045, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1497248473106778, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3729717112654578, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.7374982340374392, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.4134479340960602, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 3.9191255240471192, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 8.3316373077761270, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 28.323020339843417, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 225.84286572747891, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 12757.127591286826, 10.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler182 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data183[] = {
-  { 0.62672622092226071, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.64931010269769829, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.67448067519076316, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.70276306239803676, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.73484179773087555, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.77162761412743897, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.81436116844816531, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.86477994787944557, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.92539820516603888, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0945599448210315, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.2190897395597264, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.3916844336856475, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.6484497630432013, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 2.0717772717131155, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 2.8893613630810924, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 4.9459404075413529, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 13.487394149998716, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 136.57616044013972, 10.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test183()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data183)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data183[i].a), Tp(data183[i].b),
-                   Tp(data183[i].c), Tp(data183[i].x));
-      const Tp f0 = data183[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.9895196601282805e-13 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4567107859209851e-15
+// mean(f - f_GSL): 1.1043797455481820e-14
+// variance(f - f_GSL): 2.0706176432127926e-27
+// stddev(f - f_GSL): 4.5504039855959963e-14
+const testcase_hyperg<double>
+data183[19] =
+{
+  { 0.62672622092226027, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.64931010269769840, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.67448067519076293, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.70276306239803643, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.73484179773087521, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.77162761412743874, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.81436116844816553, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.86477994787944579, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.92539820516603888, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0945599448210315, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2190897395597269, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.3916844336856475, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.6484497630432020, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 2.0717772717131155, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2.8893613630810924, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 4.9459404075413573, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 13.487394149998716, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 136.57616044014080, 10.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler183 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data184[] = {
-  { 0.68421604440344341, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.70548098055548891, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.72884342311710348, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.75466953437856243, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.78342090924662600, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.81568884278645049, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.85224480241465206, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.89411692571131696, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.94270986892954756, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0688682849120232, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.1537004376097553, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.2615455028370031, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.4045541456153436, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.6057216489444517, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.9146603020550739, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 2.4617931307620298, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 3.7267799624996498, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 9.3880118036248401, 10.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test184()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data184)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data184[i].a), Tp(data184[i].b),
-                   Tp(data184[i].c), Tp(data184[i].x));
-      const Tp f0 = data184[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.2434497875801753e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.3245081211977792e-15
+// mean(f - f_GSL): 8.5311874523827817e-16
+// variance(f - f_GSL): 7.8655509529357183e-30
+// stddev(f - f_GSL): 2.8045589587198410e-15
+const testcase_hyperg<double>
+data184[19] =
+{
+  { 0.68421604440344319, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.70548098055548925, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.72884342311710337, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.75466953437856232, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.78342090924662589, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.81568884278645115, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.85224480241465261, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.89411692571131685, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.94270986892954811, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0688682849120232, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1537004376097553, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.2615455028370031, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.4045541456153443, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.6057216489444517, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.9146603020550739, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.4617931307620307, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 3.7267799624996498, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 9.3880118036248721, 10.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler184 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=0.50000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data185[] = {
-  { 0.72547625011001171, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.74535599249992990, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.76696498884737041, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.79056941504209477, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.81649658092772603, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.84515425472851657, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.87705801930702920, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.91287092917527690, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.95346258924559224, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0540925533894598, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.1180339887498949, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.1952286093343938, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.2909944487358056, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.4142135623730949, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.5811388300841900, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.8257418583505536, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 2.2360679774997898, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 3.1622776601683782, 10.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=0.50000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test185()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data185)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data185[i].a), Tp(data185[i].b),
-                   Tp(data185[i].c), Tp(data185[i].x));
-      const Tp f0 = data185[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.4408920985006262e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8577584504832499e-16
+// mean(f - f_GSL): 5.8432790769745078e-18
+// variance(f - f_GSL): 1.1262748212790853e-32
+// stddev(f - f_GSL): 1.0612609581432294e-16
+const testcase_hyperg<double>
+data185[19] =
+{
+  { 0.72547625011001160, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.74535599249992990, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.76696498884737041, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.79056941504209477, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.81649658092772603, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.84515425472851669, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.87705801930702931, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.91287092917527690, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.95346258924559224, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0540925533894598, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.1180339887498949, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.1952286093343938, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.2909944487358058, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.4142135623730951, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.5811388300841900, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.8257418583505542, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 2.2360679774997898, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 3.1622776601683809, 10.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler185 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data186[] = {
-  { 0.12307420104127871, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.13818870041457423, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.15739165631811691, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.18249038606882068, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.21644171225027786, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.26433326159804160, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.33544459430654533, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.44788516696232517, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.63989153514168362, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.7568608796813312, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 3.5836558871799027, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 8.8077526749963226, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 27.285841702089190, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 113.55555555555557, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 706.24023437500091, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 8064.1687976651992, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 271267.22222222196, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 123456789.99999890, 10.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test186()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data186)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data186[i].a), Tp(data186[i].b),
-                   Tp(data186[i].c), Tp(data186[i].x));
-      const Tp f0 = data186[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.0861625671386719e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6897916810721003e-15
+// mean(f - f_GSL): 1.0989192059253727e-08
+// variance(f - f_GSL): 2.2903477685061008e-15
+// stddev(f - f_GSL): 4.7857577963224392e-08
+const testcase_hyperg<double>
+data186[19] =
+{
+  { 0.12307420104127866, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.13818870041457434, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.15739165631811705, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.18249038606882081, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.21644171225027795, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.26433326159804149, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.33544459430654527, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.44788516696232511, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.63989153514168373, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.7568608796813312, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.5836558871799102, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 8.8077526749963226, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 27.285841702089265, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 113.55555555555557, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 706.24023437500091, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 8064.1687976652511, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 271267.22222222196, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 123456790.00000113, 10.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler186 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data187[] = {
-  { 0.28363728383055758, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.30933003169808387, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.33998437757128797, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.37713553224291119, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.42299736538419658, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.48086597727600106, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.55583495759293045, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.65612850114039667, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.79573668772968120, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.3184712058058303, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.8576958065941214, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 2.8759509651764228, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 5.1046225531822182, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 11.095238095238095, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 32.797154017857174, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 158.01935680536477, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1815.9523809523814, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 163302.14285714156, 10.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test187()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data187)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data187[i].a), Tp(data187[i].b),
-                   Tp(data187[i].c), Tp(data187[i].x));
-      const Tp f0 = data187[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.6193447411060333e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6039867544159698e-15
+// mean(f - f_GSL): 1.3861192895235850e-11
+// variance(f - f_GSL): 3.6088478524883243e-21
+// stddev(f - f_GSL): 6.0073686856129647e-11
+const testcase_hyperg<double>
+data187[19] =
+{
+  { 0.28363728383055781, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.30933003169808387, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.33998437757128797, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.37713553224291113, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.42299736538419669, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.48086597727600089, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.55583495759293033, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.65612850114039678, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.79573668772968142, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3184712058058303, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.8576958065941236, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 2.8759509651764228, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 5.1046225531822289, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 11.095238095238095, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 32.797154017857174, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 158.01935680536548, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1815.9523809523814, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 163302.14285714392, 10.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler187 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data188[] = {
-  { 0.39006633302741794, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.41898885698103294, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.45245557983812590, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.49160548618861633, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.53798419230517980, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.59373881442067344, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.66193391357076115, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.74708402736952129, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.85609281019430605, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.1974451135148187, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.4820886036706347, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.9201183180477521, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 2.6569338297733336, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 4.0634920634920650, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 7.3102678571428568, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 17.512574302697733, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 74.206349206349131, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1342.8571428571363, 10.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test188()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data188)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data188[i].a), Tp(data188[i].b),
-                   Tp(data188[i].c), Tp(data188[i].x));
-      const Tp f0 = data188[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.0463630789890885e-12 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5238873992471854e-15
+// mean(f - f_GSL): 1.1029773585697082e-13
+// variance(f - f_GSL): 2.1981059026132227e-25
+// stddev(f - f_GSL): 4.6883962104468326e-13
+const testcase_hyperg<double>
+data188[19] =
+{
+  { 0.39006633302741811, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.41898885698103278, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.45245557983812590, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.49160548618861627, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.53798419230517991, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.59373881442067322, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.66193391357076092, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.74708402736952118, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.85609281019430605, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1974451135148187, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.4820886036706358, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.9201183180477521, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.6569338297733367, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 4.0634920634920650, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 7.3102678571428568, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 17.512574302697782, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 74.206349206349131, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1342.8571428571502, 10.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler188 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data189[] = {
-  { 0.46726928123633193, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.49687547629934464, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.53045208856322235, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.56884765624999978, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.61316872427983526, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.66488500161969544, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.72598998634501577, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.79925411522633782, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.88863845062192193, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.1423563481176653, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.3302951388888888, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.5889212827988335, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.9650205761316870, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 2.5555555555555549, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 3.5937500000000013, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 5.7818930041152203, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 12.222222222222220, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 54.999999999999780, 10.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test189()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data189)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data189[i].a), Tp(data189[i].b),
-                   Tp(data189[i].c), Tp(data189[i].x));
-      const Tp f0 = data189[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 7.8159700933611020e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4210854715201975e-15
+// mean(f - f_GSL): 4.6629367034256575e-15
+// variance(f - f_GSL): 3.1677071819086927e-28
+// stddev(f - f_GSL): 1.7798053775367387e-14
+const testcase_hyperg<double>
+data189[19] =
+{
+  { 0.46726928123633210, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.49687547629934464, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.53045208856322223, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.56884765624999989, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.61316872427983504, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.66488500161969544, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.72598998634501621, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.79925411522633760, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.88863845062192182, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1423563481176653, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3302951388888891, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.5889212827988335, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.9650205761316886, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 2.5555555555555549, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 3.5937500000000013, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 5.7818930041152274, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 12.222222222222220, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 55.000000000000114, 10.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler189 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=1.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data190[] = {
-  { 0.52631578947368429, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.55555555555555558, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.58823529411764708, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.62500000000000000, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.66666666666666663, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.71428571428571430, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.76923076923076927, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.83333333333333337, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.90909090909090906, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.1111111111111112, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.2500000000000000, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.4285714285714286, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.6666666666666663, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 2.0000000000000000, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 2.5000000000000004, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 3.3333333333333330, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 5.0000000000000009, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 9.9999999999999929, 10.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=1.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test190()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data190)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data190[i].a), Tp(data190[i].b),
-                   Tp(data190[i].c), Tp(data190[i].x));
-      const Tp f0 = data190[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.7763568394002505e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9984014443252816e-16
+// mean(f - f_GSL): 7.5962628000668607e-17
+// variance(f - f_GSL): 1.6955391669463862e-31
+// stddev(f - f_GSL): 4.1176925175957300e-16
+const testcase_hyperg<double>
+data190[19] =
+{
+  { 0.52631578947368429, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.55555555555555558, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.58823529411764708, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.62500000000000000, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.66666666666666663, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.71428571428571430, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.76923076923076938, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.83333333333333337, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.90909090909090906, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1111111111111112, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2500000000000002, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.4285714285714286, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.6666666666666670, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 2.0000000000000000, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 2.5000000000000009, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 3.3333333333333348, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 5.0000000000000009, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 10.000000000000011, 10.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler190 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data191[] = {
-  { 0.0016310376661280216, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.0028007538972582421, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.0049603324681551939, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.0090949470177292789, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.017341529915832606, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.034571613033607777, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.072538150286405714, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.16150558288984579, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.38554328942953148, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 2.8679719907924444, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 9.3132257461547816, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 35.401331746414378, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 165.38171687920172, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1024.0000000000000, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 9536.7431640625200, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 169350.87808430271, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 9765624.9999999944, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 9999999999.9999332, 10.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test191()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data191)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data191[i].a), Tp(data191[i].b),
-                   Tp(data191[i].c), Tp(data191[i].x));
-      const Tp f0 = data191[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.2888183593750000e-05 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.4795532226562509e-15
+// mean(f - f_GSL): 1.2059140510950354e-06
+// variance(f - f_GSL): 2.7568813079896666e-11
+// stddev(f - f_GSL): 5.2506012112801583e-06
+const testcase_hyperg<double>
+data191[19] =
+{
+  { 0.0016310376661280216, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.0028007538972582421, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.0049603324681551939, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.0090949470177292789, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.017341529915832606, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.034571613033607791, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.072538150286405839, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.16150558288984579, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.38554328942953142, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 2.8679719907924444, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 9.3132257461548065, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 35.401331746414378, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 165.38171687920246, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1024.0000000000000, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 9536.7431640625218, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 169350.87808430390, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 9765624.9999999963, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 10000000000.000111, 10.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler191 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data192[] = {
-  { 0.071191280690193509, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.085646504654238079, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.10478215656371073, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.13074816337653575, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.16701141666848116, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.21939323375313971, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.29813515331786627, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.42225974638874386, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.62942145962174867, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.7218685262373197, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 3.2855760483514689, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 7.1616652508907093, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 18.612326808485907, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 61.476190476190474, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 286.27580915178623, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 2274.9441142102296, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 47229.761904761865, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 9961460.7142856438, 10.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test192()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data192)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data192[i].a), Tp(data192[i].b),
-                   Tp(data192[i].c), Tp(data192[i].x));
-      const Tp f0 = data192[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.4901161193847656e-08 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4958811384436608e-15
+// mean(f - f_GSL): 7.8582773037277017e-10
+// variance(f - f_GSL): 1.1683981904064149e-17
+// stddev(f - f_GSL): 3.4181840067591665e-09
+const testcase_hyperg<double>
+data192[19] =
+{
+  { 0.071191280690193537, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.085646504654238384, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.10478215656371109, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.13074816337653578, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.16701141666848118, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.21939323375313963, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.29813515331786639, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.42225974638874397, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.62942145962174878, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.7218685262373197, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.2855760483514738, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 7.1616652508907093, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 18.612326808485950, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 61.476190476190474, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 286.27580915178623, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2274.9441142102414, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 47229.761904761865, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 9961460.7142858077, 10.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler192 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data193[] = {
-  { 0.14747230019381052, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.17073600100690603, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.19982795745135354, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.23681776864188067, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.28475624360398022, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.34827500743063144, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.43464829159684681, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.55576053438064787, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.73195020913445485, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.4310223867822929, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 2.1742563399057540, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 3.5769231236256043, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 6.5620441134844363, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 14.063492063492063, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 38.085937500000036, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 150.92973632068282, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1212.3015873015852, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 55107.142857142389, 10.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test193()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data193)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data193[i].a), Tp(data193[i].b),
-                   Tp(data193[i].c), Tp(data193[i].x));
-      const Tp f0 = data193[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8.7311491370201111e-11 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5843951771650161e-15
+// mean(f - f_GSL): 4.6467391338242840e-12
+// variance(f - f_GSL): 4.0072766661644994e-22
+// stddev(f - f_GSL): 2.0018183399510804e-11
+const testcase_hyperg<double>
+data193[19] =
+{
+  { 0.14747230019381058, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.17073600100690609, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.19982795745135354, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.23681776864188053, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.28475624360398011, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.34827500743063161, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.43464829159684687, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.55576053438064787, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.73195020913445530, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.4310223867822929, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.1742563399057566, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 3.5769231236256043, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 6.5620441134844469, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 14.063492063492063, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 38.085937500000036, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 150.92973632068330, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1212.3015873015852, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 55107.142857143110, 10.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler193 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data194[] = {
-  { 0.21658059714090588, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.24513539602702844, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.27967018274845046, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.32196044921874994, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.37448559670781900, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.44078856032208796, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.52606701446027815, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.63818158436214001, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.78944971882612769, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.3044251384443430, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.7659505208333335, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 2.5093710953769270, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 3.8065843621399158, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 6.3333333333333313, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 12.109375000000004, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 29.115226337448540, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 108.33333333333330, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1224.9999999999923, 10.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test194()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data194)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data194[i].a), Tp(data194[i].b),
-                   Tp(data194[i].c), Tp(data194[i].x));
-      const Tp f0 = data194[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for a=10.000000000000000, b=2.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data195[] = {
-  { 0.27700831024930750, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.30864197530864196, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.34602076124567477, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.39062499999999994, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.44444444444444442, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.51020408163265307, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.59171597633136097, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.69444444444444453, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.82644628099173545, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.2345679012345681, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.5624999999999998, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 2.0408163265306127, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 2.7777777777777768, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 4.0000000000000000, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 6.2500000000000036, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 11.111111111111109, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 25.000000000000007, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 99.999999999999872, 10.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
+// max(|f - f_GSL|): 1.8189894035458565e-12 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.4848893090170230e-15
+// mean(f - f_GSL): 1.0027066896088256e-13
+// variance(f - f_GSL): 1.7322804840633983e-25
+// stddev(f - f_GSL): 4.1620673757922257e-13
+const testcase_hyperg<double>
+data194[19] =
+{
+  { 0.21658059714090577, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.24513539602702861, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.27967018274845046, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.32196044921875022, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.37448559670781911, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.44078856032208802, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.52606701446027793, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.63818158436213956, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.78944971882612769, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3044251384443430, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.7659505208333344, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 2.5093710953769270, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 3.8065843621399202, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 6.3333333333333313, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 12.109375000000004, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 29.115226337448608, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 108.33333333333330, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1225.0000000000023, 10.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler194 = 2.5000000000000020e-13;
 
-// Test function for a=10.000000000000000, b=2.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test195()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data195)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data195[i].a), Tp(data195[i].b),
-                   Tp(data195[i].c), Tp(data195[i].x));
-      const Tp f0 = data195[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// Test data for a=10.000000000000000, b=2.0000000000000000, c=10.000000000000000.
+// max(|f - f_GSL|): 4.2632564145606011e-14 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.2632564145605916e-16
+// mean(f - f_GSL): 2.3636063866361887e-15
+// variance(f - f_GSL): 9.5093179694074762e-29
+// stddev(f - f_GSL): 9.7515731907254209e-15
+const testcase_hyperg<double>
+data195[19] =
+{
+  { 0.27700831024930750, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.30864197530864196, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.34602076124567477, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.39062500000000000, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.44444444444444442, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.51020408163265318, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.59171597633136108, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.69444444444444442, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.82644628099173545, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.2345679012345683, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.5625000000000007, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 2.0408163265306127, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 2.7777777777777795, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 4.0000000000000000, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 6.2500000000000027, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 11.111111111111125, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 25.000000000000007, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 100.00000000000023, 10.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler195 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data196[] = {
-  { 0.00063586451658060152, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.0010334743461762443, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.0015326246054669515, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.0019007018181583387, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.0012845577715431577, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { -0.0027213806178058826, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { -0.015121744574954068, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { -0.036637840562974443, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.019117849062621491, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 9.8116901852350615, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 84.255589172244044, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 773.87517619421294, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 8556.9725363053585, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 129023.99999999996, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 3174543.3807373112, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 175133896.95814410, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 43564453125.000061, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 446859999999993.50, 10.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test196()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data196)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data196[i].a), Tp(data196[i].b),
-                   Tp(data196[i].c), Tp(data196[i].x));
-      const Tp f0 = data196[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
-}
+// max(|f - f_GSL|): 0.81250000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8182428501096257e-15
+// mean(f - f_GSL): 0.042765168793266639
+// variance(f - f_GSL): 0.034744884250260212
+// stddev(f - f_GSL): 0.18639979680852714
+const testcase_hyperg<double>
+data196[19] =
+{
+  { 0.00063586451658060813, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.0010334743461763829, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.0015326246054669763, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.0019007018181583513, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.0012845577715431562, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { -0.0027213806178060305, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.015121744574954044, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { -0.036637840562974290, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.019117849062621605, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 9.8116901852350615, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 84.255589172244427, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 773.87517619421294, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 8556.9725363054076, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 129023.99999999996, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 3174543.3807373112, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 175133896.95814583, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 43564453125.000061, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 446860000000007.00, 10.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler196 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data197[] = {
-  { -0.00030045430691819899, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { -0.00031119487747328581, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { -0.00014589213141649274, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.00056843418860809121, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.0028902549859721725, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.0098776037238877470, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.030689217428863914, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.094211590019076599, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.29791981455918376, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 3.6646308771236793, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 15.133991837501521, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 73.331330046144089, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 441.01791167787133, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 3583.9999999999991, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 45299.530029296984, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1157231.0002427341, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 107421875.00000016, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 234999999999.99734, 10.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test197()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data197)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data197[i].a), Tp(data197[i].b),
-                   Tp(data197[i].c), Tp(data197[i].x));
-      const Tp f0 = data197[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-}
+// max(|f - f_GSL|): 0.00039672851562500000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6882064494680641e-15
+// mean(f - f_GSL): 2.0884382210121993e-05
+// variance(f - f_GSL): 8.2836958019297269e-09
+// stddev(f - f_GSL): 9.1014810893226203e-05
+const testcase_hyperg<double>
+data197[19] =
+{
+  { -0.00030045430691814646, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { -0.00031119487747322054, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { -0.00014589213141656318, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.00056843418860824636, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.0028902549859721747, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0098776037238877245, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.030689217428863859, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.094211590019076558, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.29791981455918370, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 3.6646308771236793, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 15.133991837501567, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 73.331330046144089, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 441.01791167787303, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 3583.9999999999991, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 45299.530029296984, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1157231.0002427436, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 107421875.00000016, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 235000000000.00293, 10.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler197 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data198[] = {
-  { 0.0058530497315411210, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.0088526869356855692, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.013770987983443108, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.022108932690960800, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.036786236450921578, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.063750669040426422, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.11577228680714464, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.22197573416125735, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.45361312968415268, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 2.4162889363082747, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 6.5381564791240399, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 20.415771011498428, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 76.870682056629221, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 373.58730158730162, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 2626.2555803571477, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 33060.960671081048, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1203521.8253968258, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 584564285.71427989, 10.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test198()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data198)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data198[i].a), Tp(data198[i].b),
-                   Tp(data198[i].c), Tp(data198[i].x));
-      const Tp f0 = data198[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-}
+// max(|f - f_GSL|): 9.5367431640625000e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6314276114917587e-15
+// mean(f - f_GSL): 5.0242811922592076e-08
+// variance(f - f_GSL): 4.7862904884501567e-14
+// stddev(f - f_GSL): 2.1877592391417655e-07
+const testcase_hyperg<double>
+data198[19] =
+{
+  { 0.0058530497315413248, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.0088526869356855397, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.013770987983442959, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.022108932690960776, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.036786236450921550, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.063750669040426408, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.11577228680714466, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.22197573416125760, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.45361312968415324, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 2.4162889363082747, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 6.5381564791240541, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 20.415771011498428, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 76.870682056629448, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 373.58730158730162, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2626.2555803571477, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 33060.960671081237, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1203521.8253968258, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 584564285.71428990, 10.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler198 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data199[] = {
-  { 0.020248990107069400, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.027876687750502421, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.039154648888447781, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.056251883506774923, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.082914189910074432, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.12585357817786477, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.19761423206224929, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.32280443863359243, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.55250024062839465, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.9374297986599267, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 4.0849049886067696, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 9.5926988633258983, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 25.958314281359531, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 85.333333333333300, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 372.31445312500028, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 2545.3436976070675, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 39583.333333333343, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 4599999.9999999627, 10.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test199()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data199)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data199[i].a), Tp(data199[i].b),
-                   Tp(data199[i].c), Tp(data199[i].x));
-      const Tp f0 = data199[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+// max(|f - f_GSL|): 7.4505805969238281e-09 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6196914341138665e-15
+// mean(f - f_GSL): 3.9331532183208954e-10
+// variance(f - f_GSL): 2.9206631793126476e-18
+// stddev(f - f_GSL): 1.7089947862157589e-09
+const testcase_hyperg<double>
+data199[19] =
+{
+  { 0.020248990107069573, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.027876687750502366, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.039154648888447607, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.056251883506774715, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.082914189910074473, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.12585357817786472, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.19761423206224940, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.32280443863359237, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.55250024062839420, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.9374297986599267, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 4.0849049886067759, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 9.5926988633258983, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 25.958314281359588, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 85.333333333333300, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 372.31445312500028, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2545.3436976070780, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 39583.333333333343, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4600000.0000000261, 10.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler199 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=5.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data200[] = {
-  { 0.040386107340619266, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.052922149401344633, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.070429627772374270, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.095367431640624972, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.13168724279835387, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.18593443208187066, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.26932907434290437, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.40187757201646096, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.62092132305915493, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.6935087808430296, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 3.0517578124999991, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 5.9499018266198629, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 12.860082304526737, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 32.000000000000000, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 97.656250000000114, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 411.52263374485580, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 3124.9999999999991, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 99999.999999999665, 10.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=5.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test200()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data200)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data200[i].a), Tp(data200[i].b),
-                   Tp(data200[i].c), Tp(data200[i].x));
-      const Tp f0 = data200[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.0186340659856796e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.1641532182693482e-15
+// mean(f - f_GSL): 5.5487040400966458e-12
+// variance(f - f_GSL): 5.4399356990620132e-22
+// stddev(f - f_GSL): 2.3323669734975269e-11
+const testcase_hyperg<double>
+data200[19] =
+{
+  { 0.040386107340619273, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.052922149401344633, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.070429627772374270, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.095367431640624986, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.13168724279835389, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.18593443208187072, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.26932907434290460, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.40187757201646102, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.62092132305915493, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.6935087808430296, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 3.0517578125000036, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 5.9499018266198629, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 12.860082304526767, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 32.000000000000000, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 97.656250000000114, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 411.52263374485722, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 3124.9999999999995, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 100000.00000000055, 10.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler200 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=10.000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data201[] = {
-  { 2.3388730079478623e-05, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { -2.3204970759807341e-05, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { -0.00016219730505520291, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { -0.00044366962360925706, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { -0.00071863577205454770, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 4.4378596544453810e-05, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.0044446568070623570, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.0071045155183571103, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { -0.049961558159890146, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 51.305449964107403, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1435.9545414461309, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 39657.913058984115, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1346016.4468570501, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 68086556.444444403, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 6646235808.7301531, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1954852335479.9702, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 4573796225043418.0, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.8280190368899683e+21, 10.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=10.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test201()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data201)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data201[i].a), Tp(data201[i].b),
-                   Tp(data201[i].c), Tp(data201[i].x));
-      const Tp f0 = data201[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
-}
+// max(|f - f_GSL|): 3407872.0000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8642431677285562e-15
+// mean(f - f_GSL): 179361.84215676156
+// variance(f - f_GSL): 611241601687.40417
+// stddev(f - f_GSL): 781819.41756866348
+const testcase_hyperg<double>
+data201[19] =
+{
+  { 2.3388730079478156e-05, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { -2.3204970759764180e-05, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { -0.00016219730505521665, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { -0.00044366962360922366, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { -0.00071863577205453773, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 4.4378596544482927e-05, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0044446568070621991, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.0071045155183571615, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { -0.049961558159890306, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 51.305449964107403, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1435.9545414461415, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 39657.913058984115, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1346016.4468570619, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 68086556.444444403, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 6646235808.7301531, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1954852335479.9958, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 4573796225043418.0, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.8280190368900440e+21, 10.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler201 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=10.000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data202[] = {
-  { 1.3504013648882651e-05, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 3.1753432098404372e-05, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 6.2032098207659688e-05, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 8.8747213942768282e-05, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 1.0478094697243911e-05, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { -0.00055998751006011325, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { -0.0024718654966577563, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { -0.0027000264053619817, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.066515394406810674, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 11.579200866389527, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 137.50750548795256, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1901.3196072993419, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 34210.659507137796, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 920588.19047619053, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 45876220.933028772, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 6234608574.0963297, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 5445391090029.7783, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 4.6508713107142163e+17, 10.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=10.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test202()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data202)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data202[i].a), Tp(data202[i].b),
-                   Tp(data202[i].c), Tp(data202[i].x));
-      const Tp f0 = data202[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
-}
+// max(|f - f_GSL|): 832.00000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7889121078953330e-15
+// mean(f - f_GSL): 43.789679427686345
+// variance(f - f_GSL): 36432.823085424323
+// stddev(f - f_GSL): 190.87384075725075
+const testcase_hyperg<double>
+data202[19] =
+{
+  { 1.3504013648914116e-05, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 3.1753432098506483e-05, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 6.2032098207654132e-05, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 8.8747213942816339e-05, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0478094697613739e-05, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { -0.00055998751006022351, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.0024718654966575221, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { -0.0027000264053620069, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.066515394406810743, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 11.579200866389527, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 137.50750548795330, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1901.3196072993419, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 34210.659507138007, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 920588.19047619053, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 45876220.933028772, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 6234608574.0964050, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 5445391090029.7783, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4.6508713107143840e+17, 10.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler202 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=10.000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data203[] = {
-  { -2.6846726901567720e-05, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { -4.7817237144207266e-05, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { -7.2908121941975601e-05, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { -6.0427853197480476e-05, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.00020559720946645182, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.0017056910683365828, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.0088037230970526795, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.041510819735141674, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.19754880805677258, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 5.6130947302779246, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 36.475357196722442, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 289.29483001400672, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 3010.8676549536503, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 45844.317460317419, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1221852.6431492427, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 79585968.928968787, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 26733475942.460335, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 500206428571421.19, 10.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=10.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test203()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data203)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data203[i].a), Tp(data203[i].b),
-                   Tp(data203[i].c), Tp(data203[i].x));
-      const Tp f0 = data203[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000017e-10));
-}
+// max(|f - f_GSL|): 0.93750000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8742262123208804e-15
+// mean(f - f_GSL): 0.049343110712039846
+// variance(f - f_GSL): 0.046258118950011272
+// stddev(f - f_GSL): 0.21507700702309224
+const testcase_hyperg<double>
+data203[19] =
+{
+  { -2.6846726901509877e-05, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { -4.7817237144298244e-05, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { -7.2908121941826117e-05, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { -6.0427853197636777e-05, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.00020559720946644960, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0017056910683365867, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0088037230970524228, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.041510819735141528, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.19754880805677244, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 5.6130947302779246, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 36.475357196722619, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 289.29483001400672, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 3010.8676549536667, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 45844.317460317419, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1221852.6431492427, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 79585968.928969592, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 26733475942.460335, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 500206428571437.38, 10.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler203 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=10.000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data204[] = {
-  { 0.00025866179054245944, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.00053402577739214288, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.0011390075227240345, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.0025224267119483192, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.0058340332124251467, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.014189256143045285, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.036590990011337567, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.10106560781146992, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.30278778538531409, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 3.7187249990350599, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 16.023275545901704, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 83.265377219882822, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 553.31413918843987, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 5148.4444444444416, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 78082.084655761908, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 2565874.8781353114, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 346137152.77777809, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1472499999999.9834, 10.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=10.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test204()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data204)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data204[i].a), Tp(data204[i].b),
-                   Tp(data204[i].c), Tp(data204[i].x));
-      const Tp f0 = data204[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
-}
+// max(|f - f_GSL|): 0.0024414062500000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6580008488964090e-15
+// mean(f - f_GSL): 0.00012850766473236850
+// variance(f - f_GSL): 3.1370523903989881e-07
+// stddev(f - f_GSL): 0.00056009395554665537
+const testcase_hyperg<double>
+data204[19] =
+{
+  { 0.00025866179054283083, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.00053402577739226583, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.0011390075227239291, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.0025224267119482941, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.0058340332124251458, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.014189256143045212, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.036590990011337789, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.10106560781146991, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.30278778538531392, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 3.7187249990350599, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 16.023275545901761, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 83.265377219882822, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 553.31413918844225, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 5148.4444444444416, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 78082.084655761908, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2565874.8781353347, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 346137152.77777809, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1472500000000.0227, 10.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler204 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=10.000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data205[] = {
-  { 0.0016310376661280216, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.0028007538972582421, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.0049603324681551939, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.0090949470177292789, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.017341529915832606, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.034571613033607777, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.072538150286405714, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.16150558288984579, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.38554328942953148, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 2.8679719907924444, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 9.3132257461547816, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 35.401331746414378, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 165.38171687920172, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1024.0000000000000, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 9536.7431640625200, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 169350.87808430271, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 9765624.9999999944, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 9999999999.9999332, 10.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=10.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test205()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data205)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data205[i].a), Tp(data205[i].b),
-                   Tp(data205[i].c), Tp(data205[i].x));
-      const Tp f0 = data205[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.2888183593750000e-05 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.4795532226562509e-15
+// mean(f - f_GSL): 1.2059140510950354e-06
+// variance(f - f_GSL): 2.7568813079896666e-11
+// stddev(f - f_GSL): 5.2506012112801583e-06
+const testcase_hyperg<double>
+data205[19] =
+{
+  { 0.0016310376661280216, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.0028007538972582421, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.0049603324681551939, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.0090949470177292789, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.017341529915832606, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.034571613033607791, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.072538150286405839, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.16150558288984579, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.38554328942953142, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 2.8679719907924444, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 9.3132257461548065, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 35.401331746414378, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 165.38171687920246, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1024.0000000000000, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 9536.7431640625218, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 169350.87808430390, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 9765624.9999999963, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 10000000000.000111, 10.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler205 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=20.000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data206[] = {
-  { -2.1776535308707967e-07, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { -2.9128833151427998e-06, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { -9.4755553429035093e-06, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { -1.2844297353813116e-05, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 3.6576965483568809e-05, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.00020847453890692649, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { -0.00022868510398174632, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { -0.0021855513841942732, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.014662111759334634, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 746.44776348798098, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 136080.48445225612, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 23094279.597826406, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 5315913395.5545301, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 2261935718399.9990, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 2669150854828235.0, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.7499363099365994e+19, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 2.8881518494606140e+24, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.4165513933661626e+33, 10.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=20.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test206()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data206)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data206[i].a), Tp(data206[i].b),
-                   Tp(data206[i].c), Tp(data206[i].x));
-      const Tp f0 = data206[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000005e-08));
-}
+// max(|f - f_GSL|): 2.5940733853654057e+18 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8312596334404269e-15
+// mean(f - f_GSL): 1.3653017829015250e+17
+// variance(f - f_GSL): 4.1617051640949032e+35
+// stddev(f - f_GSL): 6.4511279355589466e+17
+const testcase_hyperg<double>
+data206[19] =
+{
+  { -2.1776535312781759e-07, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { -2.9128833151630439e-06, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { -9.4755553429932710e-06, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { -1.2844297353852837e-05, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 3.6576965483549205e-05, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.00020847453890703339, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.00022868510398194936, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { -0.0021855513841943421, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.014662111759334568, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 746.44776348798098, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 136080.48445225772, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 23094279.597826406, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 5315913395.5545979, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 2261935718399.9990, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2669150854828235.0, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.7499363099366351e+19, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2.8881518494606140e+24, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.4165513933662505e+33, 10.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler206 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=20.000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data207[] = {
-  { 1.7149006973860441e-07, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 3.2399324904088936e-07, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.6015317712089860e-07, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { -2.0500917204199595e-06, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { -1.0175546788599472e-05, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { -1.1720101988202453e-05, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.00014199637113974185, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.00021263363640642297, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { -0.0072649256698441751, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 90.430293772869618, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 6248.1455940292308, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 501143.39852548984, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 58852027.356439680, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 12942923093.333330, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 7618073993853.6592, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 22630251562549288., 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.3708372433980356e+21, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.4154113619999653e+29, 10.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=20.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test207()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data207)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data207[i].a), Tp(data207[i].b),
-                   Tp(data207[i].c), Tp(data207[i].x));
-      const Tp f0 = data207[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000024e-08));
-}
+// max(|f - f_GSL|): 299067162755072.00 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.1129345912023457e-15
+// mean(f - f_GSL): 15740377042297.895
+// variance(f - f_GSL): 4.7074334083472640e+27
+// stddev(f - f_GSL): 68610738287437.656
+const testcase_hyperg<double>
+data207[19] =
+{
+  { 1.7149006966334498e-07, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 3.2399324906563845e-07, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.6015317699713284e-07, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { -2.0500917201273337e-06, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { -1.0175546788592665e-05, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { -1.1720101988188077e-05, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.00014199637113982382, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.00021263363640641769, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { -0.0072649256698439626, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 90.430293772869618, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 6248.1455940292872, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 501143.39852548984, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 58852027.356440276, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 12942923093.333330, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 7618073993853.6592, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 22630251562549772., 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.3708372433980356e+21, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.4154113620000448e+29, 10.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler207 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=20.000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data208[] = {
-  { -1.6667473370780257e-08, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 8.6214844067774863e-08, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 5.7778331238835108e-07, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 2.1911400500362969e-06, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 4.7440049217100417e-06, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { -1.0564233314924258e-05, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { -0.00017990026051856349, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { -0.00027618146288744351, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.030606019577723392, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 27.832854169493341, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 874.00624088575228, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 36049.199340831554, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 2270967.7298624986, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 266979100.44444439, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 80311224337.493027, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 110111693103799.72, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 2.4838871426052618e+18, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 5.4626349999998603e+25, 10.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=20.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test208()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data208)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data208[i].a), Tp(data208[i].b),
-                   Tp(data208[i].c), Tp(data208[i].x));
-      const Tp f0 = data208[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000019e-07));
-}
+// max(|f - f_GSL|): 103079215104.00000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8869870511941024e-15
+// mean(f - f_GSL): 5425221928.4235201
+// variance(f - f_GSL): 5.5922760890380314e+20
+// stddev(f - f_GSL): 23647993760.651306
+const testcase_hyperg<double>
+data208[19] =
+{
+  { -1.6667473284194196e-08, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 8.6214843496406671e-08, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 5.7778331275185146e-07, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 2.1911400502042259e-06, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 4.7440049217199358e-06, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { -1.0564233314712615e-05, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.00017990026051847404, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { -0.00027618146288724629, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.030606019577723666, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 27.832854169493341, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 874.00624088575910, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 36049.199340831554, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2270967.7298625209, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 266979100.44444439, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 80311224337.493027, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 110111693103801.77, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2.4838871426052618e+18, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.4626350000001618e+25, 10.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler208 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=20.000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data209[] = {
-  { -1.5843795893321480e-07, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { -5.4877275994033766e-07, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { -1.7169507967745992e-06, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { -4.5236439748752000e-06, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { -5.5690492560325806e-06, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 5.6914115606934911e-05, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.00082507252097519922, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.0085739249288229857, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.088244357683754757, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 13.387208440156897, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 226.77895441155110, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 5281.5716482686785, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 189431.77762850464, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 12408149.333333332, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1966782292.5839682, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1274123112205.7495, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 10903676350911508., 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 5.1849999999998819e+22, 10.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=20.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test209()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data209)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data209[i].a), Tp(data209[i].b),
-                   Tp(data209[i].c), Tp(data209[i].x));
-      const Tp f0 = data209[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000012e-08));
-}
+// max(|f - f_GSL|): 100663296.00000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9414329026036117e-15
+// mean(f - f_GSL): 5298068.6316046715
+// variance(f - f_GSL): 533321003794731.12
+// stddev(f - f_GSL): 23093743.823701065
+const testcase_hyperg<double>
+data209[19] =
+{
+  { -1.5843795889906876e-07, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { -5.4877276002864784e-07, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { -1.7169507967699695e-06, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { -4.5236439749819329e-06, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { -5.5690492560381956e-06, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 5.6914115606653561e-05, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.00082507252097489250, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.0085739249288230429, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.088244357683754687, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 13.387208440156897, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 226.77895441155252, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 5281.5716482686785, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 189431.77762850633, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 12408149.333333332, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1966782292.5839682, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1274123112205.7700, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 10903676350911508., 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.1850000000001411e+22, 10.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler209 = 2.5000000000000020e-13;
 
 // Test data for a=10.000000000000000, b=20.000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data210[] = {
-  { 2.6602838683283435e-06, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 7.8442223930072316e-06, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 2.4604898194634598e-05, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 8.2718061255302686e-05, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.00030072865982171723, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.0011951964277455193, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.0052617832469731814, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.026084053304588847, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.14864362802414346, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 8.2252633399699757, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 86.736173798840269, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1253.2542894196865, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 27351.112277912434, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1048576.0000000000, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 90949470.177293226, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 28679719907.924358, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 95367431640624.906, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 9.9999999999998657e+19, 10.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=10.000000000000000, b=20.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test210()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data210)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data210[i].a), Tp(data210[i].b),
-                   Tp(data210[i].c), Tp(data210[i].x));
-      const Tp f0 = data210[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+// max(|f - f_GSL|): 475136.00000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.4067200000000052e-15
+// mean(f - f_GSL): 25007.185032091642
+// variance(f - f_GSL): 11881799540.814577
+// stddev(f - f_GSL): 109003.66755671379
+const testcase_hyperg<double>
+data210[19] =
+{
+  { 2.6602838683283435e-06, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 7.8442223930072316e-06, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 2.4604898194634598e-05, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 8.2718061255302686e-05, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.00030072865982171723, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0011951964277455204, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0052617832469731996, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.026084053304588850, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.14864362802414346, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 8.2252633399699757, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 86.736173798840738, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1253.2542894196868, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 27351.112277912678, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1048576.0000000000, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 90949470.177293226, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 28679719907.924767, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 95367431640624.906, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000220e+20, 10.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler210 = 5.0000000000000039e-13;
 
 // Test data for a=20.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data211[] = {
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test211()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data211)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data211[i].a), Tp(data211[i].b),
-                   Tp(data211[i].c), Tp(data211[i].x));
-      const Tp f0 = data211[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data211[19] =
+{
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler211 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data212[] = {
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test212()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data212)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data212[i].a), Tp(data212[i].b),
-                   Tp(data212[i].c), Tp(data212[i].x));
-      const Tp f0 = data212[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data212[19] =
+{
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler212 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data213[] = {
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test213()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data213)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data213[i].a), Tp(data213[i].b),
-                   Tp(data213[i].c), Tp(data213[i].x));
-      const Tp f0 = data213[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data213[19] =
+{
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler213 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data214[] = {
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test214()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data214)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data214[i].a), Tp(data214[i].b),
-                   Tp(data214[i].c), Tp(data214[i].x));
-      const Tp f0 = data214[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data214[19] =
+{
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler214 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data215[] = {
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=0.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test215()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data215)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data215[i].a), Tp(data215[i].b),
-                   Tp(data215[i].c), Tp(data215[i].x));
-      const Tp f0 = data215[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hyperg<double>
+data215[19] =
+{
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler215 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data216[] = {
-  { 0.26690449940521566, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.28252302866181805, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.30123616141153819, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.32421384687602628, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.35334630811776752, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.39191793127467034, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.44620488618129206, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.52980896919265685, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.67754711477562357, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 1.9567557771780317, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 6.1816042148333086, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 35.653088618561227, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 377.51482843179906, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 7645.8816551195359, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 354791.74537980522, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 57009889.966638684, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 83771357024.863937, 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 25866972896376408., 20.000000000000000, 0.50000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test216()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data216)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data216[i].a), Tp(data216[i].b),
-                   Tp(data216[i].c), Tp(data216[i].x));
-      const Tp f0 = data216[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 48.000000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8556481344874416e-15
+// mean(f - f_GSL): 2.5263190030329112
+// variance(f - f_GSL): 121.26314075575490
+// stddev(f - f_GSL): 11.011954447588080
+const testcase_hyperg<double>
+data216[19] =
+{
+  { 0.26690449940521549, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.28252302866181833, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.30123616141153836, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.32421384687602633, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.35334630811776774, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.39191793127466995, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.44620488618129212, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.52980896919265719, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.67754711477562324, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.9567557771780317, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 6.1816042148333272, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 35.653088618561227, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 377.51482843180133, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 7645.8816551195359, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 354791.74537980522, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 57009889.966639392, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 83771357024.863937, 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 25866972896377436., 20.000000000000000, 0.50000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler216 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data217[] = {
-  { 0.40342659436153405, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.42420571192034318, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.44852768286073008, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.47751245808592863, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.51283632632707754, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.55713468814894307, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.61481320817757312, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.69383483410097202, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.81012002526006033, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.3622225506603911, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 2.2349513086109001, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 5.1864917536761723, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 21.020560423779411, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 175.19649997100612, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 3467.1587803688708, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 225003.88683445856, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 110837674.65652709, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 6688966964170.6807, 20.000000000000000, 0.50000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test217()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data217)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data217[i].a), Tp(data217[i].b),
-                   Tp(data217[i].c), Tp(data217[i].x));
-      const Tp f0 = data217[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.011718750000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7519521419033478e-15
+// mean(f - f_GSL): 0.00061678102606403001
+// variance(f - f_GSL): 7.2278413174892008e-06
+// stddev(f - f_GSL): 0.0026884644906506020
+const testcase_hyperg<double>
+data217[19] =
+{
+  { 0.40342659436153389, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.42420571192034318, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.44852768286073041, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.47751245808592863, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.51283632632707765, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.55713468814894329, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.61481320817757346, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.69383483410097213, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.81012002526006044, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3622225506603911, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.2349513086109027, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 5.1864917536761723, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 21.020560423779497, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 175.19649997100612, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 3467.1587803688708, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 225003.88683446089, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 110837674.65652709, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 6688966964170.9326, 20.000000000000000, 0.50000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler217 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data218[] = {
-  { 0.48716309885816761, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.50965859152542281, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.53554809210658971, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.56576689207507136, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.60164849637133688, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.64516711595404375, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.69938278735493542, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.76931621518401860, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.86381808725530695, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.2152051956815531, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 1.6052546785425543, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 2.4765586046012635, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 5.1564492216997486, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 18.446158392136365, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 150.44577670123971, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 3862.6317400115768, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 632428.34833625401, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 7426927663.3808765, 20.000000000000000, 0.50000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test218()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data218)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data218[i].a), Tp(data218[i].b),
-                   Tp(data218[i].c), Tp(data218[i].x));
-      const Tp f0 = data218[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1.4305114746093750e-05 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9261147266353426e-15
+// mean(f - f_GSL): 7.5292535813082699e-07
+// variance(f - f_GSL): 1.0770292922645316e-11
+// stddev(f - f_GSL): 3.2818124447697064e-06
+const testcase_hyperg<double>
+data218[19] =
+{
+  { 0.48716309885816822, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.50965859152542337, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.53554809210658938, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.56576689207507136, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.60164849637133655, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.64516711595404408, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.69938278735493553, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.76931621518401860, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.86381808725530662, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.2152051956815531, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.6052546785425557, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 2.4765586046012635, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 5.1564492216997611, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 18.446158392136365, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 150.44577670123971, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3862.6317400116104, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 632428.34833625401, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 7426927663.3810987, 20.000000000000000, 0.50000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler218 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data219[] = {
-  { 0.54703266209548362, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.56997321774144971, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.59603026159654970, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.62596978851120511, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.66084565876898926, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.70215256667232839, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.75208916592008568, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.81403631111658648, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.89348608489854608, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.1517793185139173, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.3878110313656598, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 1.8061071794572381, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 2.7148594517859586, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 5.4529435709049361, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 19.487310275377109, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 191.69079165937470, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 10218.543981792311, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 23160836.646583911, 20.000000000000000, 0.50000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test219()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data219)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data219[i].a), Tp(data219[i].b),
-                   Tp(data219[i].c), Tp(data219[i].x));
-      const Tp f0 = data219[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.0978193283081055e-08 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7692881266931270e-15
+// mean(f - f_GSL): 2.1571346930926438e-09
+// variance(f - f_GSL): 8.8377830897836260e-17
+// stddev(f - f_GSL): 9.4009484041683924e-09
+const testcase_hyperg<double>
+data219[19] =
+{
+  { 0.54703266209548373, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.56997321774144960, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.59603026159654982, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.62596978851120511, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.66084565876898915, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.70215256667232862, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.75208916592008568, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.81403631111658625, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.89348608489854597, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1517793185139173, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.3878110313656606, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1.8061071794572381, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2.7148594517859612, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 5.4529435709049361, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 19.487310275377109, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 191.69079165937592, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 10218.543981792311, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 23160836.646584522, 20.000000000000000, 0.50000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler219 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=0.50000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data220[] = {
-  { 0.59292067298616002, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.61572496720679915, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.64135339122875623, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.67043457419280483, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.70380956268170980, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.74263251901495231, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.78853555445528278, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.84391122775673766, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.91242401018807406, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.1169059681274873, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.2825928301302667, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1.5385937789924939, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 1.9895771187893898, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 2.9707335806970168, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 6.0299506157180467, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 24.259090336955577, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 406.27267173257223, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 174330.03997220192, 20.000000000000000, 0.50000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=0.50000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test220()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data220)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data220[i].a), Tp(data220[i].b),
-                   Tp(data220[i].c), Tp(data220[i].x));
-      const Tp f0 = data220[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 2.9103830456733704e-10 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6694673196526424e-15
+// mean(f - f_GSL): 1.5333453804912193e-11
+// variance(f - f_GSL): 4.4575621294589140e-21
+// stddev(f - f_GSL): 6.6764976817631821e-11
+const testcase_hyperg<double>
+data220[19] =
+{
+  { 0.59292067298616025, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.61572496720679892, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.64135339122875590, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.67043457419280461, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.70380956268170969, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.74263251901495264, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.78853555445528289, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.84391122775673755, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.91242401018807373, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.1169059681274873, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.2825928301302669, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1.5385937789924939, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 1.9895771187893914, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 2.9707335806970168, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 6.0299506157180467, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 24.259090336955669, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 406.27267173257223, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 174330.03997220617, 20.000000000000000, 0.50000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler220 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data221[] = {
-  { 0.058479236576646373, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 0.065788544763137669, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 0.075184824937824662, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 0.087707688693157260, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.10521567442213345, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.13135877960541525, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.17423854066297104, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.25492082527223525, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.44025895219654843, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 3.3698615820910360, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 17.997089220808483, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 153.73298291118951, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 2159.1667587825627, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 55188.105263157879, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 3191209.3921857267, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 646910975.29152656, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 1254834626850.2659, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 5.8479532163741414e+17, 20.000000000000000, 1.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test221()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data221)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data221[i].a), Tp(data221[i].b),
-                   Tp(data221[i].c), Tp(data221[i].x));
-      const Tp f0 = data221[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 1024.0000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7510399999999635e-15
+// mean(f - f_GSL): 53.894788252704814
+// variance(f - f_GSL): 55188.204676932175
+// stddev(f - f_GSL): 234.92169903381034
+const testcase_hyperg<double>
+data221[19] =
+{
+  { 0.058479236576646311, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.065788544763137821, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.075184824937824482, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.087707688693157121, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.10521567442213345, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.13135877960541509, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.17423854066297137, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.25492082527223520, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.44025895219654843, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 3.3698615820910360, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 17.997089220808562, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 153.73298291118951, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2159.1667587825768, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 55188.105263157879, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 3191209.3921857267, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 646910975.29153574, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1254834626850.2659, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.8479532163743910e+17, 20.000000000000000, 1.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler221 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data222[] = {
-  { 0.15519511120894947, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.17197165701692899, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.19276847315207363, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.21920107206179093, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.25386158960390581, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.30115970686600657, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.36916408142057117, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.47406175901569558, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.65237908266239919, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 1.8227213362622299, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 4.3716358339791332, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 15.670841312959222, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 94.742651122760179, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 1081.7275541795671, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 27809.787731465960, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 2329811.1715181042, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1537787532.6780224, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 141562653506999.88, 20.000000000000000, 1.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test222()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data222)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data222[i].a), Tp(data222[i].b),
-                   Tp(data222[i].c), Tp(data222[i].x));
-      const Tp f0 = data222[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.21875000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5452521874999694e-15
+// mean(f - f_GSL): 0.011513220685868108
+// variance(f - f_GSL): 0.0025185017633005862
+// stddev(f - f_GSL): 0.050184676578618956
+const testcase_hyperg<double>
+data222[19] =
+{
+  { 0.15519511120894958, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.17197165701692893, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.19276847315207329, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.21920107206179093, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.25386158960390576, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.30115970686600663, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.36916408142057128, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.47406175901569547, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.65237908266239919, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.8227213362622299, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 4.3716358339791430, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 15.670841312959222, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 94.742651122760662, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1081.7275541795671, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 27809.787731465960, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2329811.1715181284, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1537787532.6780224, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 141562653507005.19, 20.000000000000000, 1.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler222 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data223[] = {
-  { 0.23253645591196570, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.25484220947068353, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.28181987881113829, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.31508211677735765, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.35706285886959599, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.41160053409238195, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.48508083111181949, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.58885194371375260, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.74482241684585748, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 1.4700356864367146, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 2.4955144453055143, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 5.3506594845833471, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 16.618413752184221, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 89.310629514963878, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1029.3439900542960, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 35659.847863372350, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 8009309.6233230168, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 145640590027.39731, 20.000000000000000, 1.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test223()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data223)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data223[i].a), Tp(data223[i].b),
-                   Tp(data223[i].c), Tp(data223[i].x));
-      const Tp f0 = data223[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 0.00024414062500000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6763226855512285e-15
+// mean(f - f_GSL): 1.2849899481406474e-05
+// variance(f - f_GSL): 3.1370759089735494e-09
+// stddev(f - f_GSL): 5.6009605506319623e-05
+const testcase_hyperg<double>
+data223[19] =
+{
+  { 0.23253645591196551, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.25484220947068342, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.28181987881113812, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.31508211677735770, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.35706285886959610, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.41160053409238190, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.48508083111181938, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.58885194371375260, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.74482241684585782, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.4700356864367146, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2.4955144453055174, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 5.3506594845833471, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 16.618413752184267, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 89.310629514963878, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1029.3439900542960, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 35659.847863372670, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 8009309.6233230168, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 145640590027.40201, 20.000000000000000, 1.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler223 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data224[] = {
-  { 0.29614148314592498, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.32176277356430810, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.35217870475550522, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.38885270445515091, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.43389978380608424, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.49048612522269436, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.56355539635634611, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.66123153239117682, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.79773363961895427, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.3245132157016595, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 1.9065148749742076, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 3.1328798652457452, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 6.4172532944033476, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 19.071683734222436, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 104.41989641582512, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1510.5743992324240, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 115518.14360562043, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 414930455.29173034, 20.000000000000000, 1.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test224()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data224)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data224[i].a), Tp(data224[i].b),
-                   Tp(data224[i].c), Tp(data224[i].x));
-      const Tp f0 = data224[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 7.1525573730468750e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7237966704607975e-15
+// mean(f - f_GSL): 3.7648905700618082e-08
+// variance(f - f_GSL): 2.6925522674362989e-14
+// stddev(f - f_GSL): 1.6408998346749562e-07
+const testcase_hyperg<double>
+data224[19] =
+{
+  { 0.29614148314592509, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.32176277356430805, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.35217870475550511, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.38885270445515113, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.43389978380608418, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.49048612522269414, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.56355539635634599, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.66123153239117671, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.79773363961895416, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.3245132157016595, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1.9065148749742094, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 3.1328798652457452, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 6.4172532944033636, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 19.071683734222436, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 104.41989641582512, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1510.5743992324351, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 115518.14360562043, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 414930455.29174191, 20.000000000000000, 1.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler224 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=1.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data225[] = {
-  { 0.34954259539177696, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.37714038609235123, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.40942091659748725, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.44767109606846428, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.49368984777532254, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.55006638216982318, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.62065830207408912, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.71145554513583786, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.83223839666914623, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.2466748028187731, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 1.6386752725021749, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 2.3340068725479681, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 3.7848108613132054, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 7.6754638550304133, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 23.344217312927277, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 149.83491198246921, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 3936.9253501916060, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 2794143.5036480185, 20.000000000000000, 1.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=1.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test225()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data225)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data225[i].a), Tp(data225[i].b),
-                   Tp(data225[i].c), Tp(data225[i].x));
-      const Tp f0 = data225[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 4.6566128730773926e-09 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6665618165271877e-15
+// mean(f - f_GSL): 2.4523176471958370e-10
+// variance(f - f_GSL): 1.1411894517911952e-18
+// stddev(f - f_GSL): 1.0682646918208967e-09
+const testcase_hyperg<double>
+data225[19] =
+{
+  { 0.34954259539177701, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.37714038609235134, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.40942091659748781, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.44767109606846422, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.49368984777532227, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.55006638216982318, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.62065830207408901, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.71145554513583764, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.83223839666914623, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.2466748028187731, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 1.6386752725021760, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 2.3340068725479681, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 3.7848108613132099, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 7.6754638550304133, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 23.344217312927277, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 149.83491198246998, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 3936.9253501916060, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 2794143.5036480846, 20.000000000000000, 1.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler225 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data226[] = {
-  { 2.6602838683283435e-06, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 7.8442223930072316e-06, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 2.4604898194634598e-05, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { 8.2718061255302686e-05, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 0.00030072865982171723, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.0011951964277455193, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.0052617832469731814, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.026084053304588847, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.14864362802414346, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 8.2252633399699757, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 86.736173798840269, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 1253.2542894196865, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 27351.112277912434, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1048576.0000000000, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 90949470.177293226, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 28679719907.924358, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 95367431640624.906, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 9.9999999999998657e+19, 20.000000000000000, 2.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test226()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data226)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data226[i].a), Tp(data226[i].b),
-                   Tp(data226[i].c), Tp(data226[i].x));
-      const Tp f0 = data226[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+// max(|f - f_GSL|): 475136.00000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.4067200000000052e-15
+// mean(f - f_GSL): 25007.185032091642
+// variance(f - f_GSL): 11881799540.814577
+// stddev(f - f_GSL): 109003.66755671379
+const testcase_hyperg<double>
+data226[19] =
+{
+  { 2.6602838683283435e-06, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 7.8442223930072316e-06, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 2.4604898194634598e-05, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { 8.2718061255302686e-05, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.00030072865982171723, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0011951964277455204, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0052617832469731996, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.026084053304588850, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.14864362802414346, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 8.2252633399699757, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 86.736173798840738, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1253.2542894196868, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 27351.112277912678, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1048576.0000000000, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 90949470.177293226, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 28679719907.924767, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 95367431640624.906, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000220e+20, 20.000000000000000, 2.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler226 = 5.0000000000000039e-13;
 
 // Test data for a=20.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data227[] = {
-  { 0.018828092583720951, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 0.023381944060455316, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 0.029789623984280793, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 0.039191021482500497, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { 0.053727813036721514, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { 0.077762010061669024, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.12110505620123302, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.20870149809080590, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.41429234328785769, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 3.1308087404153113, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 13.586180626453050, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 87.117304082784415, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 889.26474381242826, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 16231.913312693494, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 653537.51168945129, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 87756230.793848589, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 101493977171.74945, 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 21375960679556916., 20.000000000000000, 2.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test227()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data227)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data227[i].a), Tp(data227[i].b),
-                   Tp(data227[i].c), Tp(data227[i].x));
-      const Tp f0 = data227[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+// max(|f - f_GSL|): 40.000000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8712609271522778e-15
+// mean(f - f_GSL): 2.1052671749403089
+// variance(f - f_GSL): 84.210508462254538
+// stddev(f - f_GSL): 9.1766283820504881
+const testcase_hyperg<double>
+data227[19] =
+{
+  { 0.018828092583720632, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.023381944060455365, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.029789623984280887, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.039191021482500567, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.053727813036721528, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.077762010061668857, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.12110505620123323, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.20870149809080582, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.41429234328785763, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 3.1308087404153113, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 13.586180626453100, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 87.117304082784415, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 889.26474381243384, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 16231.913312693494, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 653537.51168945129, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 87756230.793849647, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 101493977171.74945, 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 21375960679557820., 20.000000000000000, 2.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler227 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data228[] = {
-  { 0.049200410661854252, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.059460876757152226, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.073244762686653350, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.092334626017932922, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.11976760350696837, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.16102414609169383, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.22670456785796222, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.33912903252727361, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.55049794600858060, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 2.1254722872032232, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 5.6261213886736172, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 20.137315891130996, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 108.04381584643853, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 992.41692466460245, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 19055.363816004465, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 1105471.9504312086, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 448521363.90608919, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 19078917293639.004, 20.000000000000000, 2.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test228()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data228)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data228[i].a), Tp(data228[i].b),
-                   Tp(data228[i].c), Tp(data228[i].x));
-      const Tp f0 = data228[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+// max(|f - f_GSL|): 0.031250000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6379336164121759e-15
+// mean(f - f_GSL): 0.0016447556893365942
+// variance(f - f_GSL): 5.1397960874034849e-05
+// stddev(f - f_GSL): 0.0071692371193896806
+const testcase_hyperg<double>
+data228[19] =
+{
+  { 0.049200410661854238, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.059460876757152607, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.073244762686653225, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.092334626017932769, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.11976760350696856, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.16102414609169405, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.22670456785796236, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.33912903252727361, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.55049794600858049, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 2.1254722872032232, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 5.6261213886736314, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 20.137315891130996, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 108.04381584643900, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 992.41692466460245, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 19055.363816004465, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1105471.9504312191, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 448521363.90608919, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 19078917293639.652, 20.000000000000000, 2.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler228 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data229[] = {
-  { 0.083753547015334745, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.099238444687035701, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.11938294012867758, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.14622683905023326, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.18303556733713025, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.23527764069382409, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.31261681740827085, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.43327581880538862, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.63445840637296658, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 1.7438842395813297, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 3.5070840938209269, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 8.6573372006089713, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 28.779342118408906, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 147.50178613955714, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1427.1686016136398, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 36780.643714655642, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 5313869.6058585485, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 46057280607.381966, 20.000000000000000, 2.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test229()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data229)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data229[i].a), Tp(data229[i].b),
-                   Tp(data229[i].c), Tp(data229[i].x));
-      const Tp f0 = data229[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 8.3923339843750000e-05 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8221514326726564e-15
+// mean(f - f_GSL): 4.4172143495227617e-06
+// variance(f - f_GSL): 3.7068906120670492e-10
+// stddev(f - f_GSL): 1.9253287023433297e-05
+const testcase_hyperg<double>
+data229[19] =
+{
+  { 0.083753547015334884, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.099238444687035743, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.11938294012867748, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.14622683905023329, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.18303556733713028, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.23527764069382415, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.31261681740827069, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.43327581880538862, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.63445840637296680, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 1.7438842395813297, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 3.5070840938209331, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 8.6573372006089713, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 28.779342118408998, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 147.50178613955714, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1427.1686016136398, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 36780.643714655955, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 5313869.6058585485, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 46057280607.383286, 20.000000000000000, 2.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler229 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=2.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data230[] = {
-  { 0.11920045035073683, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.13907946814302774, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.16431439792559688, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.19698796016987008, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.24028510928790570, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.29926031296483119, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.38229327814229169, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.50402047283093110, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.69167261179586503, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 1.5503152253394308, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 2.6469548193635797, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 5.1882631330566813, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 12.476792759124516, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 41.026391565091259, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 220.92584715988204, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 2677.0834450236207, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 141774.31260689779, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 254267148.83196995, 20.000000000000000, 2.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=2.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test230()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data230)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data230[i].a), Tp(data230[i].b),
-                   Tp(data230[i].c), Tp(data230[i].x));
-      const Tp f0 = data230[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+// max(|f - f_GSL|): 5.0663948059082031e-07 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9925479281069681e-15
+// mean(f - f_GSL): 2.6669880993704522e-08
+// variance(f - f_GSL): 1.3509399735218820e-14
+// stddev(f - f_GSL): 1.1622994336752823e-07
+const testcase_hyperg<double>
+data230[19] =
+{
+  { 0.11920045035073676, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.13907946814302777, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.16431439792559696, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.19698796016986989, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.24028510928790547, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.29926031296483130, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.38229327814229175, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.50402047283093132, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.69167261179586526, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 1.5503152253394308, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 2.6469548193635828, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 5.1882631330566813, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 12.476792759124546, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 41.026391565091259, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 220.92584715988204, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 2677.0834450236389, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 141774.31260689779, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 254267148.83197621, 20.000000000000000, 2.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler230 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data231[] = {
-  { -1.8650300348791041e-05, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { -3.6488008415183135e-05, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { -6.4614776410999025e-05, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { -8.4495207102575916e-05, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 2.2276197023819217e-05, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.00070736115111467578, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { 0.0027829732057272809, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.0013283545664373570, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { -0.041767631015048733, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 61.311496556100003, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 2397.4420539085681, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 103687.60998586559, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 6247196.6451068865, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 656408576.00000000, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 165334768098.54715, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 175097125520816.81, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 2.6818275451660257e+18, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 2.9794599999999321e+25, 20.000000000000000, 5.0000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test231()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data231)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data231[i].a), Tp(data231[i].b),
-                   Tp(data231[i].c), Tp(data231[i].x));
-      const Tp f0 = data231[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000034e-10));
-}
+// max(|f - f_GSL|): 60129542144.000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.0181355730232468e-15
+// mean(f - f_GSL): 3164712852.2154636
+// variance(f - f_GSL): 1.9029272767041847e+20
+// stddev(f - f_GSL): 13794663014.021708
+const testcase_hyperg<double>
+data231[19] =
+{
+  { -1.8650300348790099e-05, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { -3.6488008415371319e-05, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { -6.4614776410961038e-05, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { -8.4495207102246549e-05, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 2.2276197023825424e-05, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.00070736115111457809, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0027829732057272588, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.0013283545664371644, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { -0.041767631015048774, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 61.311496556100003, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 2397.4420539085872, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 103687.60998586559, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 6247196.6451069508, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 656408576.00000000, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 165334768098.54715, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 175097125520819.91, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2.6818275451660257e+18, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.9794600000000777e+25, 20.000000000000000, 5.0000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler231 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data232[] = {
-  { -3.6403884515183385e-06, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { -9.5873829247725586e-06, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { -2.6052245147354694e-05, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { -7.2378303598294010e-05, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { -0.00020048577321454082, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { -0.00051222704046236022, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { -0.00080950511491911315, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.0043473422174314449, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.081078342558623825, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 12.794854084397739, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 195.15639104739046, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 3938.7991953190131, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 118521.48653762060, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 6291455.9999999972, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 773070496.50699198, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 363276452167.04102, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 2002716064453133.0, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 4.5999999999999109e+21, 20.000000000000000, 5.0000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test232()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data232)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data232[i].a), Tp(data232[i].b),
-                   Tp(data232[i].c), Tp(data232[i].x));
-      const Tp f0 = data232[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
-}
+// max(|f - f_GSL|): 9437184.0000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.0515617391303805e-15
+// mean(f - f_GSL): 496693.97369064158
+// variance(f - f_GSL): 4687391593519.1660
+// stddev(f - f_GSL): 2165038.4739119918
+const testcase_hyperg<double>
+data232[19] =
+{
+  { -3.6403884516313627e-06, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { -9.5873829246491408e-06, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { -2.6052245147200097e-05, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { -7.2378303598384501e-05, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { -0.00020048577321417379, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { -0.00051222704046234439, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.00080950511491888959, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.0043473422174314250, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.081078342558623853, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 12.794854084397739, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 195.15639104739174, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 3938.7991953190131, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 118521.48653762160, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 6291455.9999999972, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 773070496.50699198, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 363276452167.04718, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2002716064453133.0, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4.6000000000001222e+21, 20.000000000000000, 5.0000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler232 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data233[] = {
-  { 0.00014313323624069244, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 0.00025426183473140697, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 0.00048255612836426809, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 0.00099096904674788092, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 0.0022347805521915607, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 0.0056271390060292376, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { 0.016109059519227226, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 0.053453465775608999, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.20995202901839258, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 5.9534372167648799, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 46.157632071205875, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 494.32074431164915, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 7989.5277611775946, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 224179.55830753347, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 13848144.485282511, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 2948587692.8891716, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 5940513286161.6602, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 2.8531757655945201e+18, 20.000000000000000, 5.0000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test233()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data233)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data233[i].a), Tp(data233[i].b),
-                   Tp(data233[i].c), Tp(data233[i].x));
-      const Tp f0 = data233[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
-}
+// max(|f - f_GSL|): 5120.0000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.7944916193878173e-15
+// mean(f - f_GSL): 269.47388985302263
+// variance(f - f_GSL): 1379705.1461701661
+// stddev(f - f_GSL): 1174.6085076186730
+const testcase_hyperg<double>
+data233[19] =
+{
+  { 0.00014313323624053599, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.00025426183473118769, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.00048255612836437054, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.00099096904674794185, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.0022347805521915616, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0056271390060294354, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.016109059519227351, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.053453465775609076, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.20995202901839263, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 5.9534372167648799, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 46.157632071206095, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 494.32074431164915, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 7989.5277611776519, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 224179.55830753347, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 13848144.485282511, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2948587692.8892150, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 5940513286161.6602, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 2.8531757655946394e+18, 20.000000000000000, 5.0000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler233 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data234[] = {
-  { 0.0012492049968742865, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 0.0019931241968014451, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 0.0033203386861411057, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { 0.0058191894509855282, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { 0.010830090368313866, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 0.021653062305193163, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.047180821280919084, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.11405637279736180, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.31275468794720990, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 3.8598904658643969, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 18.806301417906667, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 122.77054465017432, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1168.4762146808946, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 18437.511788521082, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 597441.79669264762, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 59390411.369227782, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 44681668993.361603, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 4559673269683164.0, 20.000000000000000, 5.0000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test234()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data234)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data234[i].a), Tp(data234[i].b),
-                   Tp(data234[i].c), Tp(data234[i].x));
-      const Tp f0 = data234[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
-}
+// max(|f - f_GSL|): 7.0000000000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.5351977183413728e-15
+// mean(f - f_GSL): 0.36842306154970872
+// variance(f - f_GSL): 2.5789458059294108
+// stddev(f - f_GSL): 1.6059096506122039
+const testcase_hyperg<double>
+data234[19] =
+{
+  { 0.0012492049968744917, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 0.0019931241968014200, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 0.0033203386861410844, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { 0.0058191894509856774, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { 0.010830090368313864, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.021653062305193541, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.047180821280919195, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.11405637279736212, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.31275468794721017, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 3.8598904658643969, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 18.806301417906734, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 122.77054465017432, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1168.4762146809012, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 18437.511788521082, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 597441.79669264762, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 59390411.369228527, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 44681668993.361603, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 4559673269683333.0, 20.000000000000000, 5.0000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler234 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=5.0000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data235[] = {
-  { 0.0038867957051371450, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 0.0058484892597364443, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 0.0090987656053757009, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 0.014714392537270733, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.024900404542056769, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.044460184663785055, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.084638849196356836, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.17409058241290998, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.39357055823580755, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 2.9410794636226596, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 10.417226071414344, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 46.930585873140835, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 290.76717121814852, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 2788.1641083374830, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 50228.117718560752, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 2433042.3476752634, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 705345246.77141762, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 15652478868616.762, 20.000000000000000, 5.0000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=5.0000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test235()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data235)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data235[i].a), Tp(data235[i].b),
-                   Tp(data235[i].c), Tp(data235[i].x));
-      const Tp f0 = data235[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
+// max(|f - f_GSL|): 0.029296875000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8717083246628342e-15
+// mean(f - f_GSL): 0.0015419659355661440
+// variance(f - f_GSL): 4.5173964710879197e-05
+// stddev(f - f_GSL): 0.0067211579888348996
+const testcase_hyperg<double>
+data235[19] =
+{
+  { 0.0038867957051370739, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 0.0058484892597364235, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 0.0090987656053758189, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 0.014714392537270657, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.024900404542056772, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.044460184663785055, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.084638849196357113, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.17409058241291026, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.39357055823580767, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 2.9410794636226596, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 10.417226071414374, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 46.930585873140835, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 290.76717121814988, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 2788.1641083374830, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 50228.117718560752, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 2433042.3476752895, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 705345246.77141762, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 15652478868617.246, 20.000000000000000, 5.0000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler235 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=10.000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data236[] = {
-  { -2.1776535308707967e-07, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { -2.9128833151427998e-06, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { -9.4755553429035093e-06, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { -1.2844297353813116e-05, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { 3.6576965483568809e-05, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 0.00020847453890692649, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { -0.00022868510398174632, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { -0.0021855513841942732, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { 0.014662111759334634, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 746.44776348798098, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 136080.48445225612, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 23094279.597826406, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 5315913395.5545301, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 2261935718399.9990, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 2669150854828235.0, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 1.7499363099365994e+19, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 2.8881518494606140e+24, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 1.4165513933661626e+33, 20.000000000000000, 10.000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=10.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test236()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data236)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data236[i].a), Tp(data236[i].b),
-                   Tp(data236[i].c), Tp(data236[i].x));
-      const Tp f0 = data236[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000005e-08));
-}
+// max(|f - f_GSL|): 2.5940733853654057e+18 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8312596334404269e-15
+// mean(f - f_GSL): 1.3653017829015250e+17
+// variance(f - f_GSL): 4.1617051640949032e+35
+// stddev(f - f_GSL): 6.4511279355589466e+17
+const testcase_hyperg<double>
+data236[19] =
+{
+  { -2.1776535312781759e-07, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { -2.9128833151630439e-06, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { -9.4755553429932710e-06, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { -1.2844297353852837e-05, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { 3.6576965483549205e-05, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 0.00020847453890703339, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.00022868510398194936, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { -0.0021855513841943421, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.014662111759334568, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 746.44776348798098, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 136080.48445225772, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 23094279.597826406, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 5315913395.5545979, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 2261935718399.9990, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2669150854828235.0, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1.7499363099366351e+19, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2.8881518494606140e+24, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.4165513933662505e+33, 20.000000000000000, 10.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler236 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=10.000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data237[] = {
-  { 1.7149006973860441e-07, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { 3.2399324904088936e-07, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.6015317712089860e-07, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { -2.0500917204199595e-06, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { -1.0175546788599472e-05, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { -1.1720101988202453e-05, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 0.00014199637113974185, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { 0.00021263363640642297, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { -0.0072649256698441751, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 90.430293772869618, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 6248.1455940292308, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 501143.39852548984, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 58852027.356439680, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 12942923093.333330, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 7618073993853.6592, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 22630251562549288., 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.3708372433980356e+21, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.4154113619999653e+29, 20.000000000000000, 10.000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=10.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test237()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data237)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data237[i].a), Tp(data237[i].b),
-                   Tp(data237[i].c), Tp(data237[i].x));
-      const Tp f0 = data237[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000024e-08));
-}
+// max(|f - f_GSL|): 299067162755072.00 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.1129345912023457e-15
+// mean(f - f_GSL): 15740377042297.895
+// variance(f - f_GSL): 4.7074334083472640e+27
+// stddev(f - f_GSL): 68610738287437.656
+const testcase_hyperg<double>
+data237[19] =
+{
+  { 1.7149006966334498e-07, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { 3.2399324906563845e-07, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.6015317699713284e-07, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { -2.0500917201273337e-06, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { -1.0175546788592665e-05, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { -1.1720101988188077e-05, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.00014199637113982382, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.00021263363640641769, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { -0.0072649256698439626, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 90.430293772869618, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 6248.1455940292872, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 501143.39852548984, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 58852027.356440276, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 12942923093.333330, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 7618073993853.6592, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 22630251562549772., 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.3708372433980356e+21, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.4154113620000448e+29, 20.000000000000000, 10.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler237 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=10.000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data238[] = {
-  { -1.6667473370780257e-08, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { 8.6214844067774863e-08, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { 5.7778331238835108e-07, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { 2.1911400500362969e-06, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 4.7440049217100417e-06, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { -1.0564233314924258e-05, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { -0.00017990026051856349, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { -0.00027618146288744351, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { 0.030606019577723392, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 27.832854169493341, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 874.00624088575228, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 36049.199340831554, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 2270967.7298624986, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 266979100.44444439, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 80311224337.493027, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 110111693103799.72, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 2.4838871426052618e+18, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 5.4626349999998603e+25, 20.000000000000000, 10.000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=10.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test238()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data238)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data238[i].a), Tp(data238[i].b),
-                   Tp(data238[i].c), Tp(data238[i].x));
-      const Tp f0 = data238[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000019e-07));
-}
+// max(|f - f_GSL|): 103079215104.00000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.8869870511941024e-15
+// mean(f - f_GSL): 5425221928.4235201
+// variance(f - f_GSL): 5.5922760890380314e+20
+// stddev(f - f_GSL): 23647993760.651306
+const testcase_hyperg<double>
+data238[19] =
+{
+  { -1.6667473284194196e-08, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { 8.6214843496406671e-08, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { 5.7778331275185146e-07, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { 2.1911400502042259e-06, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 4.7440049217199358e-06, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { -1.0564233314712615e-05, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { -0.00017990026051847404, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { -0.00027618146288724629, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.030606019577723666, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 27.832854169493341, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 874.00624088575910, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 36049.199340831554, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 2270967.7298625209, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 266979100.44444439, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 80311224337.493027, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 110111693103801.77, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2.4838871426052618e+18, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.4626350000001618e+25, 20.000000000000000, 10.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler238 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=10.000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data239[] = {
-  { -1.5843795893321480e-07, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { -5.4877275994033766e-07, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { -1.7169507967745992e-06, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { -4.5236439748752000e-06, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { -5.5690492560325806e-06, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 5.6914115606934911e-05, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 0.00082507252097519922, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { 0.0085739249288229857, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.088244357683754757, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 13.387208440156897, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 226.77895441155110, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 5281.5716482686785, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 189431.77762850464, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 12408149.333333332, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1966782292.5839682, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 1274123112205.7495, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 10903676350911508., 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 5.1849999999998819e+22, 20.000000000000000, 10.000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=10.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test239()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data239)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data239[i].a), Tp(data239[i].b),
-                   Tp(data239[i].c), Tp(data239[i].x));
-      const Tp f0 = data239[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000012e-08));
-}
+// max(|f - f_GSL|): 100663296.00000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9414329026036117e-15
+// mean(f - f_GSL): 5298068.6316046715
+// variance(f - f_GSL): 533321003794731.12
+// stddev(f - f_GSL): 23093743.823701065
+const testcase_hyperg<double>
+data239[19] =
+{
+  { -1.5843795889906876e-07, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { -5.4877276002864784e-07, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { -1.7169507967699695e-06, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { -4.5236439749819329e-06, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { -5.5690492560381956e-06, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 5.6914115606653561e-05, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 0.00082507252097489250, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.0085739249288230429, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.088244357683754687, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 13.387208440156897, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 226.77895441155252, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 5281.5716482686785, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 189431.77762850633, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 12408149.333333332, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1966782292.5839682, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 1274123112205.7700, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 10903676350911508., 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 5.1850000000001411e+22, 20.000000000000000, 10.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler239 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=10.000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data240[] = {
-  { 2.6602838683283435e-06, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { 7.8442223930072316e-06, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 2.4604898194634598e-05, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 8.2718061255302686e-05, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 0.00030072865982171723, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { 0.0011951964277455193, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { 0.0052617832469731814, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.026084053304588847, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.14864362802414346, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 8.2252633399699757, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 86.736173798840269, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 1253.2542894196865, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 27351.112277912434, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 1048576.0000000000, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 90949470.177293226, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 28679719907.924358, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 95367431640624.906, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 9.9999999999998657e+19, 20.000000000000000, 10.000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=10.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test240()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data240)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data240[i].a), Tp(data240[i].b),
-                   Tp(data240[i].c), Tp(data240[i].x));
-      const Tp f0 = data240[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+// max(|f - f_GSL|): 475136.00000000000 at index 18
+// max(|f - f_GSL| / |f_GSL|): 5.4067200000000052e-15
+// mean(f - f_GSL): 25007.185032091642
+// variance(f - f_GSL): 11881799540.814577
+// stddev(f - f_GSL): 109003.66755671379
+const testcase_hyperg<double>
+data240[19] =
+{
+  { 2.6602838683283435e-06, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { 7.8442223930072316e-06, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 2.4604898194634598e-05, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 8.2718061255302686e-05, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 0.00030072865982171723, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { 0.0011951964277455204, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { 0.0052617832469731996, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.026084053304588850, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.14864362802414346, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 8.2252633399699757, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 86.736173798840738, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 1253.2542894196868, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 27351.112277912678, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 1048576.0000000000, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 90949470.177293226, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 28679719907.924767, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 95367431640624.906, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.0000000000000220e+20, 20.000000000000000, 10.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler240 = 5.0000000000000039e-13;
 
 // Test data for a=20.000000000000000, b=20.000000000000000, c=2.0000000000000000.
-testcase_hyperg<double> data241[] = {
-  { 7.4612991101768883e-09, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.90000000000000002 },
-  { 1.1006588946889981e-07, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.80000000000000004 },
-  { 2.0126933743389316e-07, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.69999999999999996 },
-  { -1.0013775379801016e-06, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.59999999999999998 },
-  { -3.0371956856472516e-06, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.50000000000000000 },
-  { 2.2012669924527286e-05, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.40000000000000002 },
-  { -6.2415598025417670e-05, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.30000000000000004 },
-  { 0.00033551320394378602, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.19999999999999996 },
-  { -0.0062342152641436353, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.0000000000000000 },
-  { 34830.688900741610, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.10000000000000009 },
-  { 67626221.263030857, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.19999999999999996 },
-  { 102764604848.69762, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.30000000000000004 },
-  { 220278355222373.38, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.39999999999999991 },
-  { 1.0422324699794536e+18, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.50000000000000000 },
-  { 1.9128731788368004e+22, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.60000000000000009 },
-  { 3.5234592919485287e+27, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.69999999999999996 },
-  { 5.0867023209025249e+34, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.80000000000000004 },
-  { 3.7461088506658564e+46, 20.000000000000000, 20.000000000000000,
-          2.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=20.000000000000000, c=2.0000000000000000.
-template <typename Tp>
-void test241()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data241)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data241[i].a), Tp(data241[i].b),
-                   Tp(data241[i].c), Tp(data241[i].x));
-      const Tp f0 = data241[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000005e-07));
-}
+// max(|f - f_GSL|): 8.1129638414606682e+31 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.1657042453579367e-15
+// mean(f - f_GSL): 4.2699809691927378e+30
+// variance(f - f_GSL): 3.3808552803188121e+96
+// stddev(f - f_GSL): 1.8387102219541860e+48
+const testcase_hyperg<double>
+data241[19] =
+{
+  { 7.4612991227725660e-09, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.90000000000000002, 0.0 },
+  { 1.1006588952366092e-07, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.80000000000000004, 0.0 },
+  { 2.0126933732744113e-07, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.69999999999999996, 0.0 },
+  { -1.0013775379571396e-06, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.59999999999999998, 0.0 },
+  { -3.0371956856925611e-06, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.50000000000000000, 0.0 },
+  { 2.2012669924829930e-05, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.39999999999999991, 0.0 },
+  { -6.2415598025411788e-05, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.29999999999999993, 0.0 },
+  { 0.00033551320394368590, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.19999999999999996, 0.0 },
+  { -0.0062342152641436752, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.0000000000000000, 0.0 },
+  { 34830.688900741610, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.10000000000000009, 0.0 },
+  { 67626221.263031960, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.20000000000000018, 0.0 },
+  { 102764604848.69762, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.30000000000000004, 0.0 },
+  { 220278355222376.97, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.40000000000000013, 0.0 },
+  { 1.0422324699794536e+18, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.9128731788368004e+22, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3.5234592919486348e+27, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.70000000000000018, 0.0 },
+  { 5.0867023209025249e+34, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.80000000000000004, 0.0 },
+  { 3.7461088506661713e+46, 20.000000000000000, 20.000000000000000, 
+         2.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler241 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=20.000000000000000, c=4.0000000000000000.
-testcase_hyperg<double> data242[] = {
-  { -1.5895900796973045e-09, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.90000000000000002 },
-  { -2.4403576837293198e-09, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.80000000000000004 },
-  { 1.1622915290732117e-08, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.69999999999999996 },
-  { 6.3899796307731726e-08, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.59999999999999998 },
-  { -1.3503608352807462e-07, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.50000000000000000 },
-  { -1.2198533623899163e-06, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.40000000000000002 },
-  { 9.9086618119129001e-06, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.30000000000000004 },
-  { -7.6797020080162010e-05, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.19999999999999996 },
-  { 0.0013196405087170875, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.0000000000000000 },
-  { 2274.2044768143564, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.10000000000000009 },
-  { 1611640.1560475440, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.19999999999999996 },
-  { 1147063984.7359734, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.30000000000000004 },
-  { 1253162497163.8311, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.39999999999999991 },
-  { 3071321673390476.0, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.50000000000000000 },
-  { 2.8221123559124324e+19, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.60000000000000009 },
-  { 2.3658463807419519e+24, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.69999999999999996 },
-  { 1.2596553731345468e+31, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.80000000000000004 },
-  { 1.9627175792062075e+42, 20.000000000000000, 20.000000000000000,
-          4.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=20.000000000000000, c=4.0000000000000000.
-template <typename Tp>
-void test242()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data242)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data242[i].a), Tp(data242[i].b),
-                   Tp(data242[i].c), Tp(data242[i].x));
-      const Tp f0 = data242[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000006e-06));
-}
+// max(|f - f_GSL|): 4.3327901374988310e+27 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.2075464057599215e-15
+// mean(f - f_GSL): 2.2804158618486009e+26
+// variance(f - f_GSL): 1.7798116217456159e+67
+// stddev(f - f_GSL): 4.2187813663967183e+33
+const testcase_hyperg<double>
+data242[19] =
+{
+  { -1.5895901122487120e-09, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.90000000000000002, 0.0 },
+  { -2.4403576191590296e-09, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.80000000000000004, 0.0 },
+  { 1.1622915284663225e-08, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.69999999999999996, 0.0 },
+  { 6.3899796223275262e-08, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.59999999999999998, 0.0 },
+  { -1.3503608350984134e-07, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.50000000000000000, 0.0 },
+  { -1.2198533624395468e-06, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.39999999999999991, 0.0 },
+  { 9.9086618121819025e-06, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.29999999999999993, 0.0 },
+  { -7.6797020080190715e-05, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.0013196405087170897, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.0000000000000000, 0.0 },
+  { 2274.2044768143564, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.10000000000000009, 0.0 },
+  { 1611640.1560475677, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.20000000000000018, 0.0 },
+  { 1147063984.7359734, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1253162497163.8503, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.40000000000000013, 0.0 },
+  { 3071321673390476.0, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.50000000000000000, 0.0 },
+  { 2.8221123559124324e+19, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.60000000000000009, 0.0 },
+  { 2.3658463807420230e+24, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.2596553731345468e+31, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.9627175792063675e+42, 20.000000000000000, 20.000000000000000, 
+         4.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler242 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=20.000000000000000, c=6.0000000000000000.
-testcase_hyperg<double> data243[] = {
-  { 8.0159808156941562e-11, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.90000000000000002 },
-  { -6.4422687845093557e-10, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.80000000000000004 },
-  { -3.7526134186308981e-09, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.69999999999999996 },
-  { -1.7692034167897114e-09, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.59999999999999998 },
-  { 7.9304558772837909e-08, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.50000000000000000 },
-  { 5.9348070318594204e-08, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.40000000000000002 },
-  { -3.5827694517425210e-06, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.30000000000000004 },
-  { 4.4951490418284159e-05, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.19999999999999996 },
-  { -0.0013716249406310486, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.0000000000000000 },
-  { 415.32493304415505, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.10000000000000009 },
-  { 121300.42991518594, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.19999999999999996 },
-  { 42725673.833462097, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.30000000000000004 },
-  { 24588915328.261719, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.39999999999999991 },
-  { 31929082412503.652, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.50000000000000000 },
-  { 1.4934954443280477e+17, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.60000000000000009 },
-  { 5.7726220597696125e+21, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.69999999999999996 },
-  { 1.1454387824049374e+28, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.80000000000000004 },
-  { 3.8088637321581534e+38, 20.000000000000000, 20.000000000000000,
-          6.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=20.000000000000000, c=6.0000000000000000.
-template <typename Tp>
-void test243()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data243)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data243[i].a), Tp(data243[i].b),
-                   Tp(data243[i].c), Tp(data243[i].x));
-      const Tp f0 = data243[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000005e-05));
-}
+// max(|f - f_GSL|): 7.5557863725914323e+23 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9837376456389093e-15
+// mean(f - f_GSL): 3.9767296698428338e+22
+// variance(f - f_GSL): 4.6773832769218855e+49
+// stddev(f - f_GSL): 6.8391397682178457e+24
+const testcase_hyperg<double>
+data243[19] =
+{
+  { 8.0159783892777232e-11, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.90000000000000002, 0.0 },
+  { -6.4422705184649393e-10, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.80000000000000004, 0.0 },
+  { -3.7526132950808576e-09, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.69999999999999996, 0.0 },
+  { -1.7692034036274638e-09, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.59999999999999998, 0.0 },
+  { 7.9304558764774354e-08, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.50000000000000000, 0.0 },
+  { 5.9348070417710214e-08, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.39999999999999991, 0.0 },
+  { -3.5827694518623355e-06, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.29999999999999993, 0.0 },
+  { 4.4951490418031519e-05, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.19999999999999996, 0.0 },
+  { -0.0013716249406309328, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.0000000000000000, 0.0 },
+  { 415.32493304415505, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.10000000000000009, 0.0 },
+  { 121300.42991518755, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.20000000000000018, 0.0 },
+  { 42725673.833462097, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.30000000000000004, 0.0 },
+  { 24588915328.262096, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.40000000000000013, 0.0 },
+  { 31929082412503.652, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1.4934954443280477e+17, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.60000000000000009, 0.0 },
+  { 5.7726220597697614e+21, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.70000000000000018, 0.0 },
+  { 1.1454387824049374e+28, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.80000000000000004, 0.0 },
+  { 3.8088637321584496e+38, 20.000000000000000, 20.000000000000000, 
+         6.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler243 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=20.000000000000000, c=8.0000000000000000.
-testcase_hyperg<double> data244[] = {
-  { 1.0699072529874453e-10, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.90000000000000002 },
-  { 5.4297753417228627e-10, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.80000000000000004 },
-  { 9.7625471266824426e-10, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.69999999999999996 },
-  { -6.7257762867770348e-09, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.59999999999999998 },
-  { -5.4634571496175302e-08, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.50000000000000000 },
-  { 1.4595644213893387e-07, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.40000000000000002 },
-  { 3.3515966497049909e-06, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.30000000000000004 },
-  { -6.5848086985914887e-05, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.19999999999999996 },
-  { 0.0034800171306214813, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.0000000000000000 },
-  { 130.93865856750304, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.10000000000000009 },
-  { 17850.203502975532, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.19999999999999996 },
-  { 3307058.5655149994, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.30000000000000004 },
-  { 1041065396.2302787, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.39999999999999991 },
-  { 735221357488.41736, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.50000000000000000 },
-  { 1785176805049585.2, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.60000000000000009 },
-  { 3.2302829930269192e+19, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.69999999999999996 },
-  { 2.4184909805178299e+25, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.80000000000000004 },
-  { 1.7340021007794567e+35, 20.000000000000000, 20.000000000000000,
-          8.0000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=20.000000000000000, c=8.0000000000000000.
-template <typename Tp>
-void test244()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data244)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data244[i].a), Tp(data244[i].b),
-                   Tp(data244[i].c), Tp(data244[i].x));
-      const Tp f0 = data244[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000005e-05));
-}
+// max(|f - f_GSL|): 3.3204139332677193e+20 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.9148846081414276e-15
+// mean(f - f_GSL): 1.7475862807802462e+19
+// variance(f - f_GSL): 6.4226791492038630e+39
+// stddev(f - f_GSL): 8.0141619332303634e+19
+const testcase_hyperg<double>
+data244[19] =
+{
+  { 1.0699067880816065e-10, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.90000000000000002, 0.0 },
+  { 5.4297771645951943e-10, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.80000000000000004, 0.0 },
+  { 9.7625476382187751e-10, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.69999999999999996, 0.0 },
+  { -6.7257763949908548e-09, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.59999999999999998, 0.0 },
+  { -5.4634571496409877e-08, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.50000000000000000, 0.0 },
+  { 1.4595644217972025e-07, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.39999999999999991, 0.0 },
+  { 3.3515966496921257e-06, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.29999999999999993, 0.0 },
+  { -6.5848086985738461e-05, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.19999999999999996, 0.0 },
+  { 0.0034800171306214847, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.0000000000000000, 0.0 },
+  { 130.93865856750304, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.10000000000000009, 0.0 },
+  { 17850.203502975721, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.20000000000000018, 0.0 },
+  { 3307058.5655149994, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.30000000000000004, 0.0 },
+  { 1041065396.2302928, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.40000000000000013, 0.0 },
+  { 735221357488.41736, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.50000000000000000, 0.0 },
+  { 1785176805049585.2, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.60000000000000009, 0.0 },
+  { 3.2302829930269979e+19, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.70000000000000018, 0.0 },
+  { 2.4184909805178299e+25, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.80000000000000004, 0.0 },
+  { 1.7340021007795807e+35, 20.000000000000000, 20.000000000000000, 
+         8.0000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler244 = 2.5000000000000020e-13;
 
 // Test data for a=20.000000000000000, b=20.000000000000000, c=10.000000000000000.
-testcase_hyperg<double> data245[] = {
-  { -1.7945363894141429e-10, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.90000000000000002 },
-  { -4.4440666675421800e-10, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.80000000000000004 },
-  { 6.6171630913717945e-10, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.69999999999999996 },
-  { 1.5453889642199650e-08, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.59999999999999998 },
-  { 7.5754083860094422e-08, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.50000000000000000 },
-  { -4.1113628639873710e-07, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.40000000000000002 },
-  { -9.5300704265214247e-06, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.30000000000000004 },
-  { 0.00016081533175785109, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.19999999999999996 },
-  { 0.017684650940379486, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, -0.099999999999999978 },
-  { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.0000000000000000 },
-  { 57.562247312454403, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.10000000000000009 },
-  { 4124.4159820362511, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.19999999999999996 },
-  { 428774.21436196787, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.30000000000000004 },
-  { 76996819.900892526, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.39999999999999991 },
-  { 30473174828.943691, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.50000000000000000 },
-  { 39291970835753.094, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.60000000000000009 },
-  { 3.3890331048069018e+17, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.69999999999999996 },
-  { 9.7157373454594049e+22, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.80000000000000004 },
-  { 1.5205808288860858e+32, 20.000000000000000, 20.000000000000000,
-          10.000000000000000, 0.89999999999999991 },
-};
-
-// Test function for a=20.000000000000000, b=20.000000000000000, c=10.000000000000000.
-template <typename Tp>
-void test245()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data245)
-                         / sizeof(testcase_hyperg<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::hyperg(Tp(data245[i].a), Tp(data245[i].b),
-                   Tp(data245[i].c), Tp(data245[i].x));
-      const Tp f0 = data245[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000005e-05));
-}
+// max(|f - f_GSL|): 3.4227357168015770e+17 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.2509396750113666e-15
+// mean(f - f_GSL): 18014398513897048.
+// variance(f - f_GSL): 6.1659968607222131e+33
+// stddev(f - f_GSL): 78523861728281120.
+const testcase_hyperg<double>
+data245[19] =
+{
+  { -1.7945360901577764e-10, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.90000000000000002, 0.0 },
+  { -4.4440665776938741e-10, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.80000000000000004, 0.0 },
+  { 6.6171615263373664e-10, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.69999999999999996, 0.0 },
+  { 1.5453889374050929e-08, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.59999999999999998, 0.0 },
+  { 7.5754083909301490e-08, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.50000000000000000, 0.0 },
+  { -4.1113628650335901e-07, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.39999999999999991, 0.0 },
+  { -9.5300704263777713e-06, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.29999999999999993, 0.0 },
+  { 0.00016081533175773833, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.19999999999999996, 0.0 },
+  { 0.017684650940379586, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.0000000000000000, 0.0 },
+  { 57.562247312454403, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.10000000000000009, 0.0 },
+  { 4124.4159820362947, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.20000000000000018, 0.0 },
+  { 428774.21436196787, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.30000000000000004, 0.0 },
+  { 76996819.900893494, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.40000000000000013, 0.0 },
+  { 30473174828.943691, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.50000000000000000, 0.0 },
+  { 39291970835753.094, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.60000000000000009, 0.0 },
+  { 3.3890331048069786e+17, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.70000000000000018, 0.0 },
+  { 9.7157373454594049e+22, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.80000000000000004, 0.0 },
+  { 1.5205808288861820e+32, 20.000000000000000, 20.000000000000000, 
+         10.000000000000000, 0.90000000000000013, 0.0 },
+};
+const double toler245 = 2.5000000000000020e-13;
+
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_hyperg<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+      {
+       const Ret f = std::tr1::hyperg(data[i].a, data[i].b,
+                    data[i].c, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
-{
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
-  test015<double>();
-  test016<double>();
-  test017<double>();
-  test018<double>();
-  test019<double>();
-  test020<double>();
-  test021<double>();
-  test022<double>();
-  test023<double>();
-  test024<double>();
-  test025<double>();
-  test026<double>();
-  test027<double>();
-  test028<double>();
-  test029<double>();
-  test030<double>();
-  test031<double>();
-  test032<double>();
-  test033<double>();
-  test034<double>();
-  test035<double>();
-  test036<double>();
-  test037<double>();
-  test038<double>();
-  test039<double>();
-  test040<double>();
-  test041<double>();
-  test042<double>();
-  test043<double>();
-  test044<double>();
-  test045<double>();
-  test046<double>();
-  test047<double>();
-  test048<double>();
-  test049<double>();
-  test050<double>();
-  test051<double>();
-  test052<double>();
-  test053<double>();
-  test054<double>();
-  test055<double>();
-  test056<double>();
-  test057<double>();
-  test058<double>();
-  test059<double>();
-  test060<double>();
-  test061<double>();
-  test062<double>();
-  test063<double>();
-  test064<double>();
-  test065<double>();
-  test066<double>();
-  test067<double>();
-  test068<double>();
-  test069<double>();
-  test070<double>();
-  test071<double>();
-  test072<double>();
-  test073<double>();
-  test074<double>();
-  test075<double>();
-  test076<double>();
-  test077<double>();
-  test078<double>();
-  test079<double>();
-  test080<double>();
-  test081<double>();
-  test082<double>();
-  test083<double>();
-  test084<double>();
-  test085<double>();
-  test086<double>();
-  test087<double>();
-  test088<double>();
-  test089<double>();
-  test090<double>();
-  test091<double>();
-  test092<double>();
-  test093<double>();
-  test094<double>();
-  test095<double>();
-  test096<double>();
-  test097<double>();
-  test098<double>();
-  test099<double>();
-  test100<double>();
-  test101<double>();
-  test102<double>();
-  test103<double>();
-  test104<double>();
-  test105<double>();
-  test106<double>();
-  test107<double>();
-  test108<double>();
-  test109<double>();
-  test110<double>();
-  test111<double>();
-  test112<double>();
-  test113<double>();
-  test114<double>();
-  test115<double>();
-  test116<double>();
-  test117<double>();
-  test118<double>();
-  test119<double>();
-  test120<double>();
-  test121<double>();
-  test122<double>();
-  test123<double>();
-  test124<double>();
-  test125<double>();
-  test126<double>();
-  test127<double>();
-  test128<double>();
-  test129<double>();
-  test130<double>();
-  test131<double>();
-  test132<double>();
-  test133<double>();
-  test134<double>();
-  test135<double>();
-  test136<double>();
-  test137<double>();
-  test138<double>();
-  test139<double>();
-  test140<double>();
-  test141<double>();
-  test142<double>();
-  test143<double>();
-  test144<double>();
-  test145<double>();
-  test146<double>();
-  test147<double>();
-  test148<double>();
-  test149<double>();
-  test150<double>();
-  test151<double>();
-  test152<double>();
-  test153<double>();
-  test154<double>();
-  test155<double>();
-  test156<double>();
-  test157<double>();
-  test158<double>();
-  test159<double>();
-  test160<double>();
-  test161<double>();
-  test162<double>();
-  test163<double>();
-  test164<double>();
-  test165<double>();
-  test166<double>();
-  test167<double>();
-  test168<double>();
-  test169<double>();
-  test170<double>();
-  test171<double>();
-  test172<double>();
-  test173<double>();
-  test174<double>();
-  test175<double>();
-  test176<double>();
-  test177<double>();
-  test178<double>();
-  test179<double>();
-  test180<double>();
-  test181<double>();
-  test182<double>();
-  test183<double>();
-  test184<double>();
-  test185<double>();
-  test186<double>();
-  test187<double>();
-  test188<double>();
-  test189<double>();
-  test190<double>();
-  test191<double>();
-  test192<double>();
-  test193<double>();
-  test194<double>();
-  test195<double>();
-  test196<double>();
-  test197<double>();
-  test198<double>();
-  test199<double>();
-  test200<double>();
-  test201<double>();
-  test202<double>();
-  test203<double>();
-  test204<double>();
-  test205<double>();
-  test206<double>();
-  test207<double>();
-  test208<double>();
-  test209<double>();
-  test210<double>();
-  test211<double>();
-  test212<double>();
-  test213<double>();
-  test214<double>();
-  test215<double>();
-  test216<double>();
-  test217<double>();
-  test218<double>();
-  test219<double>();
-  test220<double>();
-  test221<double>();
-  test222<double>();
-  test223<double>();
-  test224<double>();
-  test225<double>();
-  test226<double>();
-  test227<double>();
-  test228<double>();
-  test229<double>();
-  test230<double>();
-  test231<double>();
-  test232<double>();
-  test233<double>();
-  test234<double>();
-  test235<double>();
-  test236<double>();
-  test237<double>();
-  test238<double>();
-  test239<double>();
-  test240<double>();
-  test241<double>();
-  test242<double>();
-  test243<double>();
-  test244<double>();
-  test245<double>();
+int
+main()
+{
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
+  test(data016, toler016);
+  test(data017, toler017);
+  test(data018, toler018);
+  test(data019, toler019);
+  test(data020, toler020);
+  test(data021, toler021);
+  test(data022, toler022);
+  test(data023, toler023);
+  test(data024, toler024);
+  test(data025, toler025);
+  test(data026, toler026);
+  test(data027, toler027);
+  test(data028, toler028);
+  test(data029, toler029);
+  test(data030, toler030);
+  test(data031, toler031);
+  test(data032, toler032);
+  test(data033, toler033);
+  test(data034, toler034);
+  test(data035, toler035);
+  test(data036, toler036);
+  test(data037, toler037);
+  test(data038, toler038);
+  test(data039, toler039);
+  test(data040, toler040);
+  test(data041, toler041);
+  test(data042, toler042);
+  test(data043, toler043);
+  test(data044, toler044);
+  test(data045, toler045);
+  test(data046, toler046);
+  test(data047, toler047);
+  test(data048, toler048);
+  test(data049, toler049);
+  test(data050, toler050);
+  test(data051, toler051);
+  test(data052, toler052);
+  test(data053, toler053);
+  test(data054, toler054);
+  test(data055, toler055);
+  test(data056, toler056);
+  test(data057, toler057);
+  test(data058, toler058);
+  test(data059, toler059);
+  test(data060, toler060);
+  test(data061, toler061);
+  test(data062, toler062);
+  test(data063, toler063);
+  test(data064, toler064);
+  test(data065, toler065);
+  test(data066, toler066);
+  test(data067, toler067);
+  test(data068, toler068);
+  test(data069, toler069);
+  test(data070, toler070);
+  test(data071, toler071);
+  test(data072, toler072);
+  test(data073, toler073);
+  test(data074, toler074);
+  test(data075, toler075);
+  test(data076, toler076);
+  test(data077, toler077);
+  test(data078, toler078);
+  test(data079, toler079);
+  test(data080, toler080);
+  test(data081, toler081);
+  test(data082, toler082);
+  test(data083, toler083);
+  test(data084, toler084);
+  test(data085, toler085);
+  test(data086, toler086);
+  test(data087, toler087);
+  test(data088, toler088);
+  test(data089, toler089);
+  test(data090, toler090);
+  test(data091, toler091);
+  test(data092, toler092);
+  test(data093, toler093);
+  test(data094, toler094);
+  test(data095, toler095);
+  test(data096, toler096);
+  test(data097, toler097);
+  test(data098, toler098);
+  test(data099, toler099);
+  test(data100, toler100);
+  test(data101, toler101);
+  test(data102, toler102);
+  test(data103, toler103);
+  test(data104, toler104);
+  test(data105, toler105);
+  test(data106, toler106);
+  test(data107, toler107);
+  test(data108, toler108);
+  test(data109, toler109);
+  test(data110, toler110);
+  test(data111, toler111);
+  test(data112, toler112);
+  test(data113, toler113);
+  test(data114, toler114);
+  test(data115, toler115);
+  test(data116, toler116);
+  test(data117, toler117);
+  test(data118, toler118);
+  test(data119, toler119);
+  test(data120, toler120);
+  test(data121, toler121);
+  test(data122, toler122);
+  test(data123, toler123);
+  test(data124, toler124);
+  test(data125, toler125);
+  test(data126, toler126);
+  test(data127, toler127);
+  test(data128, toler128);
+  test(data129, toler129);
+  test(data130, toler130);
+  test(data131, toler131);
+  test(data132, toler132);
+  test(data133, toler133);
+  test(data134, toler134);
+  test(data135, toler135);
+  test(data136, toler136);
+  test(data137, toler137);
+  test(data138, toler138);
+  test(data139, toler139);
+  test(data140, toler140);
+  test(data141, toler141);
+  test(data142, toler142);
+  test(data143, toler143);
+  test(data144, toler144);
+  test(data145, toler145);
+  test(data146, toler146);
+  test(data147, toler147);
+  test(data148, toler148);
+  test(data149, toler149);
+  test(data150, toler150);
+  test(data151, toler151);
+  test(data152, toler152);
+  test(data153, toler153);
+  test(data154, toler154);
+  test(data155, toler155);
+  test(data156, toler156);
+  test(data157, toler157);
+  test(data158, toler158);
+  test(data159, toler159);
+  test(data160, toler160);
+  test(data161, toler161);
+  test(data162, toler162);
+  test(data163, toler163);
+  test(data164, toler164);
+  test(data165, toler165);
+  test(data166, toler166);
+  test(data167, toler167);
+  test(data168, toler168);
+  test(data169, toler169);
+  test(data170, toler170);
+  test(data171, toler171);
+  test(data172, toler172);
+  test(data173, toler173);
+  test(data174, toler174);
+  test(data175, toler175);
+  test(data176, toler176);
+  test(data177, toler177);
+  test(data178, toler178);
+  test(data179, toler179);
+  test(data180, toler180);
+  test(data181, toler181);
+  test(data182, toler182);
+  test(data183, toler183);
+  test(data184, toler184);
+  test(data185, toler185);
+  test(data186, toler186);
+  test(data187, toler187);
+  test(data188, toler188);
+  test(data189, toler189);
+  test(data190, toler190);
+  test(data191, toler191);
+  test(data192, toler192);
+  test(data193, toler193);
+  test(data194, toler194);
+  test(data195, toler195);
+  test(data196, toler196);
+  test(data197, toler197);
+  test(data198, toler198);
+  test(data199, toler199);
+  test(data200, toler200);
+  test(data201, toler201);
+  test(data202, toler202);
+  test(data203, toler203);
+  test(data204, toler204);
+  test(data205, toler205);
+  test(data206, toler206);
+  test(data207, toler207);
+  test(data208, toler208);
+  test(data209, toler209);
+  test(data210, toler210);
+  test(data211, toler211);
+  test(data212, toler212);
+  test(data213, toler213);
+  test(data214, toler214);
+  test(data215, toler215);
+  test(data216, toler216);
+  test(data217, toler217);
+  test(data218, toler218);
+  test(data219, toler219);
+  test(data220, toler220);
+  test(data221, toler221);
+  test(data222, toler222);
+  test(data223, toler223);
+  test(data224, toler224);
+  test(data225, toler225);
+  test(data226, toler226);
+  test(data227, toler227);
+  test(data228, toler228);
+  test(data229, toler229);
+  test(data230, toler230);
+  test(data231, toler231);
+  test(data232, toler232);
+  test(data233, toler233);
+  test(data234, toler234);
+  test(data235, toler235);
+  test(data236, toler236);
+  test(data237, toler237);
+  test(data238, toler238);
+  test(data239, toler239);
+  test(data240, toler240);
+  test(data241, toler241);
+  test(data242, toler242);
+  test(data243, toler243);
+  test(data244, toler244);
+  test(data245, toler245);
   return 0;
 }
index e718273..bb3ddf9 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  laguerre
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for n=0.
-testcase_laguerre<double> data001[] = {
-  { 1.0000000000000000, 0, 0.0000000000000000 },
-  { 1.0000000000000000, 0, 5.0000000000000000 },
-  { 1.0000000000000000, 0, 10.000000000000000 },
-  { 1.0000000000000000, 0, 15.000000000000000 },
-  { 1.0000000000000000, 0, 20.000000000000000 },
-  { 1.0000000000000000, 0, 25.000000000000000 },
-  { 1.0000000000000000, 0, 30.000000000000000 },
-  { 1.0000000000000000, 0, 35.000000000000000 },
-  { 1.0000000000000000, 0, 40.000000000000000 },
-  { 1.0000000000000000, 0, 45.000000000000000 },
-  { 1.0000000000000000, 0, 50.000000000000000 },
-  { 1.0000000000000000, 0, 55.000000000000000 },
-  { 1.0000000000000000, 0, 60.000000000000000 },
-  { 1.0000000000000000, 0, 65.000000000000000 },
-  { 1.0000000000000000, 0, 70.000000000000000 },
-  { 1.0000000000000000, 0, 75.000000000000000 },
-  { 1.0000000000000000, 0, 80.000000000000000 },
-  { 1.0000000000000000, 0, 85.000000000000000 },
-  { 1.0000000000000000, 0, 90.000000000000000 },
-  { 1.0000000000000000, 0, 95.000000000000000 },
-  { 1.0000000000000000, 0, 100.00000000000000 },
-};
-
-// Test function for n=0.
-template <typename Tp>
-void test001()
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_laguerre<double>
+data001[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::laguerre(Tp(data001[i].n), Tp(data001[i].x));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for n=1.
-testcase_laguerre<double> data002[] = {
-  { 1.0000000000000000, 1, 0.0000000000000000 },
-  { -4.0000000000000000, 1, 5.0000000000000000 },
-  { -9.0000000000000000, 1, 10.000000000000000 },
-  { -14.000000000000000, 1, 15.000000000000000 },
-  { -19.000000000000000, 1, 20.000000000000000 },
-  { -24.000000000000000, 1, 25.000000000000000 },
-  { -29.000000000000000, 1, 30.000000000000000 },
-  { -34.000000000000000, 1, 35.000000000000000 },
-  { -39.000000000000000, 1, 40.000000000000000 },
-  { -44.000000000000000, 1, 45.000000000000000 },
-  { -49.000000000000000, 1, 50.000000000000000 },
-  { -54.000000000000000, 1, 55.000000000000000 },
-  { -59.000000000000000, 1, 60.000000000000000 },
-  { -64.000000000000000, 1, 65.000000000000000 },
-  { -69.000000000000000, 1, 70.000000000000000 },
-  { -74.000000000000000, 1, 75.000000000000000 },
-  { -79.000000000000000, 1, 80.000000000000000 },
-  { -84.000000000000000, 1, 85.000000000000000 },
-  { -89.000000000000000, 1, 90.000000000000000 },
-  { -94.000000000000000, 1, 95.000000000000000 },
-  { -99.000000000000000, 1, 100.00000000000000 },
+  { 1.0000000000000000, 0, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 5.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 10.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 15.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 20.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 25.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 30.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 35.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 40.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 45.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 50.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 55.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 60.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 65.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 70.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 75.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 80.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 85.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 90.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 95.000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 100.00000000000000, 0.0 },
 };
+const double toler001 = 2.5000000000000020e-13;
 
-// Test function for n=1.
-template <typename Tp>
-void test002()
+// Test data for n=1.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_laguerre<double>
+data002[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data002)
-                         / sizeof(testcase_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::laguerre(Tp(data002[i].n), Tp(data002[i].x));
-      const Tp f0 = data002[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for n=2.
-testcase_laguerre<double> data003[] = {
-  { 1.0000000000000000, 2, 0.0000000000000000 },
-  { 3.5000000000000000, 2, 5.0000000000000000 },
-  { 31.000000000000000, 2, 10.000000000000000 },
-  { 83.500000000000000, 2, 15.000000000000000 },
-  { 161.00000000000000, 2, 20.000000000000000 },
-  { 263.50000000000000, 2, 25.000000000000000 },
-  { 391.00000000000000, 2, 30.000000000000000 },
-  { 543.50000000000000, 2, 35.000000000000000 },
-  { 721.00000000000000, 2, 40.000000000000000 },
-  { 923.50000000000000, 2, 45.000000000000000 },
-  { 1151.0000000000000, 2, 50.000000000000000 },
-  { 1403.5000000000000, 2, 55.000000000000000 },
-  { 1681.0000000000000, 2, 60.000000000000000 },
-  { 1983.5000000000000, 2, 65.000000000000000 },
-  { 2311.0000000000000, 2, 70.000000000000000 },
-  { 2663.5000000000000, 2, 75.000000000000000 },
-  { 3041.0000000000000, 2, 80.000000000000000 },
-  { 3443.5000000000000, 2, 85.000000000000000 },
-  { 3871.0000000000000, 2, 90.000000000000000 },
-  { 4323.5000000000000, 2, 95.000000000000000 },
-  { 4801.0000000000000, 2, 100.00000000000000 },
+  { 1.0000000000000000, 1, 0.0000000000000000, 0.0 },
+  { -4.0000000000000000, 1, 5.0000000000000000, 0.0 },
+  { -9.0000000000000000, 1, 10.000000000000000, 0.0 },
+  { -14.000000000000000, 1, 15.000000000000000, 0.0 },
+  { -19.000000000000000, 1, 20.000000000000000, 0.0 },
+  { -24.000000000000000, 1, 25.000000000000000, 0.0 },
+  { -29.000000000000000, 1, 30.000000000000000, 0.0 },
+  { -34.000000000000000, 1, 35.000000000000000, 0.0 },
+  { -39.000000000000000, 1, 40.000000000000000, 0.0 },
+  { -44.000000000000000, 1, 45.000000000000000, 0.0 },
+  { -49.000000000000000, 1, 50.000000000000000, 0.0 },
+  { -54.000000000000000, 1, 55.000000000000000, 0.0 },
+  { -59.000000000000000, 1, 60.000000000000000, 0.0 },
+  { -64.000000000000000, 1, 65.000000000000000, 0.0 },
+  { -69.000000000000000, 1, 70.000000000000000, 0.0 },
+  { -74.000000000000000, 1, 75.000000000000000, 0.0 },
+  { -79.000000000000000, 1, 80.000000000000000, 0.0 },
+  { -84.000000000000000, 1, 85.000000000000000, 0.0 },
+  { -89.000000000000000, 1, 90.000000000000000, 0.0 },
+  { -94.000000000000000, 1, 95.000000000000000, 0.0 },
+  { -99.000000000000000, 1, 100.00000000000000, 0.0 },
 };
+const double toler002 = 2.5000000000000020e-13;
 
-// Test function for n=2.
-template <typename Tp>
-void test003()
+// Test data for n=2.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_laguerre<double>
+data003[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data003)
-                         / sizeof(testcase_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::laguerre(Tp(data003[i].n), Tp(data003[i].x));
-      const Tp f0 = data003[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for n=5.
-testcase_laguerre<double> data004[] = {
-  { 1.0000000000000000, 5, 0.0000000000000000 },
-  { -3.1666666666666665, 5, 5.0000000000000000 },
-  { 34.333333333333329, 5, 10.000000000000000 },
-  { -355.25000000000000, 5, 15.000000000000000 },
-  { -4765.6666666666670, 5, 20.000000000000000 },
-  { -23040.666666666664, 5, 25.000000000000000 },
-  { -74399.000000000000, 5, 30.000000000000000 },
-  { -190559.41666666663, 5, 35.000000000000000 },
-  { -418865.66666666663, 5, 40.000000000000000 },
-  { -825411.50000000000, 5, 45.000000000000000 },
-  { -1498165.6666666665, 5, 50.000000000000000 },
-  { -2550096.9166666670, 5, 55.000000000000000 },
-  { -4122299.0000000000, 5, 60.000000000000000 },
-  { -6387115.6666666670, 5, 65.000000000000000 },
-  { -9551265.6666666679, 5, 70.000000000000000 },
-  { -13858967.750000000, 5, 75.000000000000000 },
-  { -19595065.666666664, 5, 80.000000000000000 },
-  { -27088153.166666668, 5, 85.000000000000000 },
-  { -36713699.000000000, 5, 90.000000000000000 },
-  { -48897171.916666657, 5, 95.000000000000000 },
-  { -64117165.666666664, 5, 100.00000000000000 },
+  { 1.0000000000000000, 2, 0.0000000000000000, 0.0 },
+  { 3.5000000000000000, 2, 5.0000000000000000, 0.0 },
+  { 31.000000000000000, 2, 10.000000000000000, 0.0 },
+  { 83.500000000000000, 2, 15.000000000000000, 0.0 },
+  { 161.00000000000000, 2, 20.000000000000000, 0.0 },
+  { 263.50000000000000, 2, 25.000000000000000, 0.0 },
+  { 391.00000000000000, 2, 30.000000000000000, 0.0 },
+  { 543.50000000000000, 2, 35.000000000000000, 0.0 },
+  { 721.00000000000000, 2, 40.000000000000000, 0.0 },
+  { 923.50000000000000, 2, 45.000000000000000, 0.0 },
+  { 1151.0000000000000, 2, 50.000000000000000, 0.0 },
+  { 1403.5000000000000, 2, 55.000000000000000, 0.0 },
+  { 1681.0000000000000, 2, 60.000000000000000, 0.0 },
+  { 1983.5000000000000, 2, 65.000000000000000, 0.0 },
+  { 2311.0000000000000, 2, 70.000000000000000, 0.0 },
+  { 2663.5000000000000, 2, 75.000000000000000, 0.0 },
+  { 3041.0000000000000, 2, 80.000000000000000, 0.0 },
+  { 3443.5000000000000, 2, 85.000000000000000, 0.0 },
+  { 3871.0000000000000, 2, 90.000000000000000, 0.0 },
+  { 4323.5000000000000, 2, 95.000000000000000, 0.0 },
+  { 4801.0000000000000, 2, 100.00000000000000, 0.0 },
 };
+const double toler003 = 2.5000000000000020e-13;
 
-// Test function for n=5.
-template <typename Tp>
-void test004()
+// Test data for n=5.
+// max(|f - f_GSL|): 7.4505805969238281e-09 at index 20
+// max(|f - f_GSL| / |f_GSL|): 1.9501553136894460e-16
+// mean(f - f_GSL): -9.1645146498075565e-11
+// variance(f - f_GSL): 2.8430813755854757e-18
+// stddev(f - f_GSL): 1.6861439367934980e-09
+const testcase_laguerre<double>
+data004[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data004)
-                         / sizeof(testcase_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::laguerre(Tp(data004[i].n), Tp(data004[i].x));
-      const Tp f0 = data004[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for n=10.
-testcase_laguerre<double> data005[] = {
-  { 1.0000000000000000, 10, 0.0000000000000000 },
-  { 1.7562761794532620, 10, 5.0000000000000000 },
-  { 27.984126984126981, 10, 10.000000000000000 },
-  { -237.51841517857147, 10, 15.000000000000000 },
-  { 3227.8077601410932, 10, 20.000000000000000 },
-  { -45786.199797453693, 10, 25.000000000000000 },
-  { 15129.571428571489, 10, 30.000000000000000 },
-  { 7764800.8179494590, 10, 35.000000000000000 },
-  { 79724066.608465582, 10, 40.000000000000000 },
-  { 469865425.65122765, 10, 45.000000000000000 },
-  { 2037190065.3738980, 10, 50.000000000000000 },
-  { 7187828002.9825764, 10, 55.000000000000000 },
-  { 21804200401.000000, 10, 60.000000000000000 },
-  { 58854343015.616211, 10, 65.000000000000000 },
-  { 144688291819.51855, 10, 70.000000000000000 },
-  { 329425241736.70038, 10, 75.000000000000000 },
-  { 703324772760.08276, 10, 80.000000000000000 },
-  { 1421627560118.6157, 10, 85.000000000000000 },
-  { 2741055412243.8569, 10, 90.000000000000000 },
-  { 5071986977681.8652, 10, 95.000000000000000 },
-  { 9051283795429.5723, 10, 100.00000000000000 },
+  { 1.0000000000000000, 5, 0.0000000000000000, 0.0 },
+  { -3.1666666666666665, 5, 5.0000000000000000, 0.0 },
+  { 34.333333333333329, 5, 10.000000000000000, 0.0 },
+  { -355.25000000000000, 5, 15.000000000000000, 0.0 },
+  { -4765.6666666666670, 5, 20.000000000000000, 0.0 },
+  { -23040.666666666664, 5, 25.000000000000000, 0.0 },
+  { -74399.000000000000, 5, 30.000000000000000, 0.0 },
+  { -190559.41666666663, 5, 35.000000000000000, 0.0 },
+  { -418865.66666666663, 5, 40.000000000000000, 0.0 },
+  { -825411.50000000000, 5, 45.000000000000000, 0.0 },
+  { -1498165.6666666665, 5, 50.000000000000000, 0.0 },
+  { -2550096.9166666670, 5, 55.000000000000000, 0.0 },
+  { -4122299.0000000000, 5, 60.000000000000000, 0.0 },
+  { -6387115.6666666670, 5, 65.000000000000000, 0.0 },
+  { -9551265.6666666679, 5, 70.000000000000000, 0.0 },
+  { -13858967.750000000, 5, 75.000000000000000, 0.0 },
+  { -19595065.666666664, 5, 80.000000000000000, 0.0 },
+  { -27088153.166666668, 5, 85.000000000000000, 0.0 },
+  { -36713699.000000000, 5, 90.000000000000000, 0.0 },
+  { -48897171.916666657, 5, 95.000000000000000, 0.0 },
+  { -64117165.666666664, 5, 100.00000000000000, 0.0 },
 };
+const double toler004 = 2.5000000000000020e-13;
 
-// Test function for n=10.
-template <typename Tp>
-void test005()
+// Test data for n=10.
+// max(|f - f_GSL|): 0.0029296875000000000 at index 19
+// max(|f - f_GSL| / |f_GSL|): 6.1315986390500118e-15
+// mean(f - f_GSL): -0.00011841882388131082
+// variance(f - f_GSL): 7.3638903636883773e-10
+// stddev(f - f_GSL): 2.7136489020668051e-05
+const testcase_laguerre<double>
+data005[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data005)
-                         / sizeof(testcase_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::laguerre(Tp(data005[i].n), Tp(data005[i].x));
-      const Tp f0 = data005[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for n=20.
-testcase_laguerre<double> data006[] = {
-  { 1.0000000000000000, 20, 0.0000000000000000 },
-  { 2.0202257444769129, 20, 5.0000000000000000 },
-  { -11.961333867812119, 20, 10.000000000000000 },
-  { -50.151037960139455, 20, 15.000000000000000 },
-  { 2829.4728613531738, 20, 20.000000000000000 },
-  { -11583.947899113535, 20, 25.000000000000000 },
-  { -18439.424502520938, 20, 30.000000000000000 },
-  { -38838.223606979467, 20, 35.000000000000000 },
-  { 24799805.877530701, 20, 40.000000000000000 },
-  { -673953823.59913290, 20, 45.000000000000000 },
-  { 7551960453.7672529, 20, 50.000000000000000 },
-  { 31286508510.614754, 20, 55.000000000000000 },
-  { -1379223608444.9155, 20, 60.000000000000000 },
-  { -6692517968212.9727, 20, 65.000000000000000 },
-  { 165423821874449.94, 20, 70.000000000000000 },
-  { 3082390018008546.5, 20, 75.000000000000000 },
-  { 29500368536981676., 20, 80.000000000000000 },
-  { 2.0353526354974186e+17, 20, 85.000000000000000 },
-  { 1.1292309514432899e+18, 20, 90.000000000000000 },
-  { 5.3239262855563100e+18, 20, 95.000000000000000 },
-  { 2.2061882785931735e+19, 20, 100.00000000000000 },
+  { 1.0000000000000000, 10, 0.0000000000000000, 0.0 },
+  { 1.7562761794532631, 10, 5.0000000000000000, 0.0 },
+  { 27.984126984126977, 10, 10.000000000000000, 0.0 },
+  { -237.51841517857147, 10, 15.000000000000000, 0.0 },
+  { 3227.8077601410932, 10, 20.000000000000000, 0.0 },
+  { -45786.199797453693, 10, 25.000000000000000, 0.0 },
+  { 15129.571428571455, 10, 30.000000000000000, 0.0 },
+  { 7764800.8179494590, 10, 35.000000000000000, 0.0 },
+  { 79724066.608465582, 10, 40.000000000000000, 0.0 },
+  { 469865425.65122765, 10, 45.000000000000000, 0.0 },
+  { 2037190065.3738980, 10, 50.000000000000000, 0.0 },
+  { 7187828002.9825764, 10, 55.000000000000000, 0.0 },
+  { 21804200401.000000, 10, 60.000000000000000, 0.0 },
+  { 58854343015.616211, 10, 65.000000000000000, 0.0 },
+  { 144688291819.51855, 10, 70.000000000000000, 0.0 },
+  { 329425241736.70038, 10, 75.000000000000000, 0.0 },
+  { 703324772760.08276, 10, 80.000000000000000, 0.0 },
+  { 1421627560118.6157, 10, 85.000000000000000, 0.0 },
+  { 2741055412243.8569, 10, 90.000000000000000, 0.0 },
+  { 5071986977681.8652, 10, 95.000000000000000, 0.0 },
+  { 9051283795429.5723, 10, 100.00000000000000, 0.0 },
 };
+const double toler005 = 5.0000000000000039e-13;
 
-// Test function for n=20.
-template <typename Tp>
-void test006()
+// Test data for n=20.
+// max(|f - f_GSL|): 2048.0000000000000 at index 19
+// max(|f - f_GSL| / |f_GSL|): 7.1189246999774008e-15
+// mean(f - f_GSL): -96.983562564903480
+// variance(f - f_GSL): 8.4641159685539344e+21
+// stddev(f - f_GSL): 92000630261.721222
+const testcase_laguerre<double>
+data006[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data006)
-                         / sizeof(testcase_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::laguerre(Tp(data006[i].n), Tp(data006[i].x));
-      const Tp f0 = data006[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
-
-// Test data for n=50.
-testcase_laguerre<double> data007[] = {
-  { 1.0000000000000000, 50, 0.0000000000000000 },
-  { 1.4735258819430563, 50, 5.0000000000000000 },
-  { 17.534183446338233, 50, 10.000000000000000 },
-  { -195.62436619077388, 50, 15.000000000000000 },
-  { 980.26961889790766, 50, 20.000000000000000 },
-  { 24812.277673870871, 50, 25.000000000000000 },
-  { 293000.50735962350, 50, 30.000000000000000 },
-  { 2316195.5013375296, 50, 35.000000000000000 },
-  { -14896937.968694847, 50, 40.000000000000000 },
-  { -502066598.00813466, 50, 45.000000000000000 },
-  { 2513677852.6916885, 50, 50.000000000000000 },
-  { 45129675503.538948, 50, 55.000000000000000 },
-  { -883876565337.99207, 50, 60.000000000000000 },
-  { 9361319947203.8379, 50, 65.000000000000000 },
-  { -80967880733583.219, 50, 70.000000000000000 },
-  { 717391079438942.88, 50, 75.000000000000000 },
-  { -8217471769564850.0, 50, 80.000000000000000 },
-  { 1.2595276229009984e+17, 50, 85.000000000000000 },
-  { -2.1140031308048906e+18, 50, 90.000000000000000 },
-  { 3.2438187475835138e+19, 50, 95.000000000000000 },
-  { -3.9710103487094673e+20, 50, 100.00000000000000 },
+  { 1.0000000000000000, 20, 0.0000000000000000, 0.0 },
+  { 2.0202257444769134, 20, 5.0000000000000000, 0.0 },
+  { -11.961333867812119, 20, 10.000000000000000, 0.0 },
+  { -50.151037960139455, 20, 15.000000000000000, 0.0 },
+  { 2829.4728613531743, 20, 20.000000000000000, 0.0 },
+  { -11583.947899113540, 20, 25.000000000000000, 0.0 },
+  { -18439.424502520938, 20, 30.000000000000000, 0.0 },
+  { -38838.223606979285, 20, 35.000000000000000, 0.0 },
+  { 24799805.877530713, 20, 40.000000000000000, 0.0 },
+  { -673953823.59913278, 20, 45.000000000000000, 0.0 },
+  { 7551960453.7672548, 20, 50.000000000000000, 0.0 },
+  { 31286508510.614746, 20, 55.000000000000000, 0.0 },
+  { -1379223608444.9155, 20, 60.000000000000000, 0.0 },
+  { -6692517968212.9717, 20, 65.000000000000000, 0.0 },
+  { 165423821874449.94, 20, 70.000000000000000, 0.0 },
+  { 3082390018008546.5, 20, 75.000000000000000, 0.0 },
+  { 29500368536981676., 20, 80.000000000000000, 0.0 },
+  { 2.0353526354974186e+17, 20, 85.000000000000000, 0.0 },
+  { 1.1292309514432901e+18, 20, 90.000000000000000, 0.0 },
+  { 5.3239262855563100e+18, 20, 95.000000000000000, 0.0 },
+  { 2.2061882785931735e+19, 20, 100.00000000000000, 0.0 },
 };
+const double toler006 = 5.0000000000000039e-13;
 
-// Test function for n=50.
-template <typename Tp>
-void test007()
+// Test data for n=50.
+// max(|f - f_GSL|): 196608.00000000000 at index 20
+// max(|f - f_GSL| / |f_GSL|): 4.2910775919271532e-15
+// mean(f - f_GSL): -8840.7163987470722
+// variance(f - f_GSL): 9.4918743844066836e+19
+// stddev(f - f_GSL): 9742625100.2523346
+const testcase_laguerre<double>
+data007[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data007)
-                         / sizeof(testcase_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::laguerre(Tp(data007[i].n), Tp(data007[i].x));
-      const Tp f0 = data007[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+  { 1.0000000000000000, 50, 0.0000000000000000, 0.0 },
+  { 1.4735258819430543, 50, 5.0000000000000000, 0.0 },
+  { 17.534183446338233, 50, 10.000000000000000, 0.0 },
+  { -195.62436619077380, 50, 15.000000000000000, 0.0 },
+  { 980.26961889791028, 50, 20.000000000000000, 0.0 },
+  { 24812.277673870878, 50, 25.000000000000000, 0.0 },
+  { 293000.50735962362, 50, 30.000000000000000, 0.0 },
+  { 2316195.5013375278, 50, 35.000000000000000, 0.0 },
+  { -14896937.968694873, 50, 40.000000000000000, 0.0 },
+  { -502066598.00813466, 50, 45.000000000000000, 0.0 },
+  { 2513677852.6916871, 50, 50.000000000000000, 0.0 },
+  { 45129675503.538910, 50, 55.000000000000000, 0.0 },
+  { -883876565337.99219, 50, 60.000000000000000, 0.0 },
+  { 9361319947203.8418, 50, 65.000000000000000, 0.0 },
+  { -80967880733583.234, 50, 70.000000000000000, 0.0 },
+  { 717391079438942.62, 50, 75.000000000000000, 0.0 },
+  { -8217471769564841.0, 50, 80.000000000000000, 0.0 },
+  { 1.2595276229009978e+17, 50, 85.000000000000000, 0.0 },
+  { -2.1140031308048891e+18, 50, 90.000000000000000, 0.0 },
+  { 3.2438187475835134e+19, 50, 95.000000000000000, 0.0 },
+  { -3.9710103487094692e+20, 50, 100.00000000000000, 0.0 },
+};
+const double toler007 = 2.5000000000000020e-13;
 
 // Test data for n=100.
-testcase_laguerre<double> data008[] = {
-  { 1.0000000000000000, 100, 0.0000000000000000 },
-  { 1.4555271625328832, 100, 5.0000000000000000 },
-  { 13.277662844303402, 100, 10.000000000000000 },
-  { 91.737038454342013, 100, 15.000000000000000 },
-  { 1854.0367283243393, 100, 20.000000000000000 },
-  { -11281.698886837237, 100, 25.000000000000000 },
-  { 170141.86987046539, 100, 30.000000000000000 },
-  { -2950092.7025822792, 100, 35.000000000000000 },
-  { -7272442.3156007063, 100, 40.000000000000000 },
-  { 295697471.90876174, 100, 45.000000000000000 },
-  { 4847420871.2690468, 100, 50.000000000000000 },
-  { 59406998102.392273, 100, 55.000000000000000 },
-  { 693492765740.29736, 100, 60.000000000000000 },
-  { 6606192010150.3096, 100, 65.000000000000000 },
-  { 17125518672239.707, 100, 70.000000000000000 },
-  { -870493767065151.38, 100, 75.000000000000000 },
-  { -13763178176383754., 100, 80.000000000000000 },
-  { 30667078414479724., 100, 85.000000000000000 },
-  { 2.1307220490380198e+18, 100, 90.000000000000000 },
-  { -7.2706523009007862e+18, 100, 95.000000000000000 },
-  { -2.6292260693068920e+20, 100, 100.00000000000000 },
+// max(|f - f_GSL|): 98304.000000000000 at index 20
+// max(|f - f_GSL| / |f_GSL|): 3.8776197831393928e-15
+// mean(f - f_GSL): -3668.6107413234895
+// variance(f - f_GSL): 2.7407314162194493e+19
+// stddev(f - f_GSL): 5235199534.1337748
+const testcase_laguerre<double>
+data008[21] =
+{
+  { 1.0000000000000000, 100, 0.0000000000000000, 0.0 },
+  { 1.4555271625328801, 100, 5.0000000000000000, 0.0 },
+  { 13.277662844303450, 100, 10.000000000000000, 0.0 },
+  { 91.737038454342454, 100, 15.000000000000000, 0.0 },
+  { 1854.0367283243388, 100, 20.000000000000000, 0.0 },
+  { -11281.698886837261, 100, 25.000000000000000, 0.0 },
+  { 170141.86987046551, 100, 30.000000000000000, 0.0 },
+  { -2950092.7025822806, 100, 35.000000000000000, 0.0 },
+  { -7272442.3156006960, 100, 40.000000000000000, 0.0 },
+  { 295697471.90876162, 100, 45.000000000000000, 0.0 },
+  { 4847420871.2690506, 100, 50.000000000000000, 0.0 },
+  { 59406998102.392288, 100, 55.000000000000000, 0.0 },
+  { 693492765740.29688, 100, 60.000000000000000, 0.0 },
+  { 6606192010150.3154, 100, 65.000000000000000, 0.0 },
+  { 17125518672239.770, 100, 70.000000000000000, 0.0 },
+  { -870493767065150.12, 100, 75.000000000000000, 0.0 },
+  { -13763178176383768., 100, 80.000000000000000, 0.0 },
+  { 30667078414479584., 100, 85.000000000000000, 0.0 },
+  { 2.1307220490380173e+18, 100, 90.000000000000000, 0.0 },
+  { -7.2706523009007821e+18, 100, 95.000000000000000, 0.0 },
+  { -2.6292260693068916e+20, 100, 100.00000000000000, 0.0 },
 };
+const double toler008 = 2.5000000000000020e-13;
 
-// Test function for n=100.
-template <typename Tp>
-void test008()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data008)
-                         / sizeof(testcase_laguerre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::laguerre(Tp(data008[i].n), Tp(data008[i].x));
-      const Tp f0 = data008[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_laguerre<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+      {
+       const Ret f = std::tr1::laguerre(data[i].n, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
+int
+main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
   return 0;
 }
index fc78e05..949554c 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  legendre
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for l=0.
-testcase_legendre<double> data001[] = {
-  { 1.0000000000000000, 0, -1.0000000000000000 },
-  { 1.0000000000000000, 0, -0.90000000000000002 },
-  { 1.0000000000000000, 0, -0.80000000000000004 },
-  { 1.0000000000000000, 0, -0.69999999999999996 },
-  { 1.0000000000000000, 0, -0.59999999999999998 },
-  { 1.0000000000000000, 0, -0.50000000000000000 },
-  { 1.0000000000000000, 0, -0.40000000000000002 },
-  { 1.0000000000000000, 0, -0.30000000000000004 },
-  { 1.0000000000000000, 0, -0.19999999999999996 },
-  { 1.0000000000000000, 0, -0.099999999999999978 },
-  { 1.0000000000000000, 0, 0.0000000000000000 },
-  { 1.0000000000000000, 0, 0.10000000000000009 },
-  { 1.0000000000000000, 0, 0.19999999999999996 },
-  { 1.0000000000000000, 0, 0.30000000000000004 },
-  { 1.0000000000000000, 0, 0.39999999999999991 },
-  { 1.0000000000000000, 0, 0.50000000000000000 },
-  { 1.0000000000000000, 0, 0.60000000000000009 },
-  { 1.0000000000000000, 0, 0.69999999999999996 },
-  { 1.0000000000000000, 0, 0.80000000000000004 },
-  { 1.0000000000000000, 0, 0.89999999999999991 },
-  { 1.0000000000000000, 0, 1.0000000000000000 },
-};
-
-// Test function for l=0.
-template <typename Tp>
-void test001()
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_legendre<double>
+data001[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::legendre(Tp(data001[i].l), Tp(data001[i].x));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=1.
-testcase_legendre<double> data002[] = {
-  { -1.0000000000000000, 1, -1.0000000000000000 },
-  { -0.90000000000000002, 1, -0.90000000000000002 },
-  { -0.80000000000000004, 1, -0.80000000000000004 },
-  { -0.69999999999999996, 1, -0.69999999999999996 },
-  { -0.59999999999999998, 1, -0.59999999999999998 },
-  { -0.50000000000000000, 1, -0.50000000000000000 },
-  { -0.40000000000000002, 1, -0.40000000000000002 },
-  { -0.30000000000000004, 1, -0.30000000000000004 },
-  { -0.19999999999999996, 1, -0.19999999999999996 },
-  { -0.099999999999999978, 1, -0.099999999999999978 },
-  { 0.0000000000000000, 1, 0.0000000000000000 },
-  { 0.10000000000000009, 1, 0.10000000000000009 },
-  { 0.19999999999999996, 1, 0.19999999999999996 },
-  { 0.30000000000000004, 1, 0.30000000000000004 },
-  { 0.39999999999999991, 1, 0.39999999999999991 },
-  { 0.50000000000000000, 1, 0.50000000000000000 },
-  { 0.60000000000000009, 1, 0.60000000000000009 },
-  { 0.69999999999999996, 1, 0.69999999999999996 },
-  { 0.80000000000000004, 1, 0.80000000000000004 },
-  { 0.89999999999999991, 1, 0.89999999999999991 },
-  { 1.0000000000000000, 1, 1.0000000000000000 },
+  { 1.0000000000000000, 0, -1.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -0.90000000000000002, 0.0 },
+  { 1.0000000000000000, 0, -0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0, -0.69999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -0.59999999999999998, 0.0 },
+  { 1.0000000000000000, 0, -0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0, -0.39999999999999991, 0.0 },
+  { 1.0000000000000000, 0, -0.29999999999999993, 0.0 },
+  { 1.0000000000000000, 0, -0.19999999999999996, 0.0 },
+  { 1.0000000000000000, 0, -0.099999999999999978, 0.0 },
+  { 1.0000000000000000, 0, 0.0000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0.10000000000000009, 0.0 },
+  { 1.0000000000000000, 0, 0.20000000000000018, 0.0 },
+  { 1.0000000000000000, 0, 0.30000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 0.40000000000000013, 0.0 },
+  { 1.0000000000000000, 0, 0.50000000000000000, 0.0 },
+  { 1.0000000000000000, 0, 0.60000000000000009, 0.0 },
+  { 1.0000000000000000, 0, 0.70000000000000018, 0.0 },
+  { 1.0000000000000000, 0, 0.80000000000000004, 0.0 },
+  { 1.0000000000000000, 0, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 0, 1.0000000000000000, 0.0 },
 };
+const double toler001 = 2.5000000000000020e-13;
 
-// Test function for l=1.
-template <typename Tp>
-void test002()
+// Test data for l=1.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_legendre<double>
+data002[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data002)
-                         / sizeof(testcase_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::legendre(Tp(data002[i].l), Tp(data002[i].x));
-      const Tp f0 = data002[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=2.
-testcase_legendre<double> data003[] = {
-  { 1.0000000000000000, 2, -1.0000000000000000 },
-  { 0.71500000000000008, 2, -0.90000000000000002 },
-  { 0.46000000000000019, 2, -0.80000000000000004 },
-  { 0.23499999999999988, 2, -0.69999999999999996 },
-  { 0.039999999999999925, 2, -0.59999999999999998 },
-  { -0.12500000000000000, 2, -0.50000000000000000 },
-  { -0.25999999999999995, 2, -0.40000000000000002 },
-  { -0.36499999999999999, 2, -0.30000000000000004 },
-  { -0.44000000000000006, 2, -0.19999999999999996 },
-  { -0.48499999999999999, 2, -0.099999999999999978 },
-  { -0.50000000000000000, 2, 0.0000000000000000 },
-  { -0.48499999999999999, 2, 0.10000000000000009 },
-  { -0.44000000000000006, 2, 0.19999999999999996 },
-  { -0.36499999999999999, 2, 0.30000000000000004 },
-  { -0.26000000000000012, 2, 0.39999999999999991 },
-  { -0.12500000000000000, 2, 0.50000000000000000 },
-  { 0.040000000000000147, 2, 0.60000000000000009 },
-  { 0.23499999999999988, 2, 0.69999999999999996 },
-  { 0.46000000000000019, 2, 0.80000000000000004 },
-  { 0.71499999999999986, 2, 0.89999999999999991 },
-  { 1.0000000000000000, 2, 1.0000000000000000 },
+  { -1.0000000000000000, 1, -1.0000000000000000, 0.0 },
+  { -0.90000000000000002, 1, -0.90000000000000002, 0.0 },
+  { -0.80000000000000004, 1, -0.80000000000000004, 0.0 },
+  { -0.69999999999999996, 1, -0.69999999999999996, 0.0 },
+  { -0.59999999999999998, 1, -0.59999999999999998, 0.0 },
+  { -0.50000000000000000, 1, -0.50000000000000000, 0.0 },
+  { -0.39999999999999991, 1, -0.39999999999999991, 0.0 },
+  { -0.29999999999999993, 1, -0.29999999999999993, 0.0 },
+  { -0.19999999999999996, 1, -0.19999999999999996, 0.0 },
+  { -0.099999999999999978, 1, -0.099999999999999978, 0.0 },
+  { 0.0000000000000000, 1, 0.0000000000000000, 0.0 },
+  { 0.10000000000000009, 1, 0.10000000000000009, 0.0 },
+  { 0.20000000000000018, 1, 0.20000000000000018, 0.0 },
+  { 0.30000000000000004, 1, 0.30000000000000004, 0.0 },
+  { 0.40000000000000013, 1, 0.40000000000000013, 0.0 },
+  { 0.50000000000000000, 1, 0.50000000000000000, 0.0 },
+  { 0.60000000000000009, 1, 0.60000000000000009, 0.0 },
+  { 0.70000000000000018, 1, 0.70000000000000018, 0.0 },
+  { 0.80000000000000004, 1, 0.80000000000000004, 0.0 },
+  { 0.90000000000000013, 1, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 1, 1.0000000000000000, 0.0 },
 };
+const double toler002 = 2.5000000000000020e-13;
 
-// Test function for l=2.
-template <typename Tp>
-void test003()
+// Test data for l=2.
+// max(|f - f_GSL|): 1.1102230246251565e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 1.3877787807814482e-15
+// mean(f - f_GSL): 1.8503717077085941e-17
+// variance(f - f_GSL): 1.7975346147614202e-35
+// stddev(f - f_GSL): 4.2397342071896678e-18
+const testcase_legendre<double>
+data003[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data003)
-                         / sizeof(testcase_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::legendre(Tp(data003[i].l), Tp(data003[i].x));
-      const Tp f0 = data003[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=5.
-testcase_legendre<double> data004[] = {
-  { -1.0000000000000000, 5, -1.0000000000000000 },
-  { 0.041141249999999997, 5, -0.90000000000000002 },
-  { 0.39951999999999993, 5, -0.80000000000000004 },
-  { 0.36519874999999991, 5, -0.69999999999999996 },
-  { 0.15263999999999994, 5, -0.59999999999999998 },
-  { -0.089843750000000000, 5, -0.50000000000000000 },
-  { -0.27063999999999988, 5, -0.40000000000000002 },
-  { -0.34538624999999995, 5, -0.30000000000000004 },
-  { -0.30751999999999996, 5, -0.19999999999999996 },
-  { -0.17882874999999995, 5, -0.099999999999999978 },
-  { 0.0000000000000000, 5, 0.0000000000000000 },
-  { 0.17882875000000015, 5, 0.10000000000000009 },
-  { 0.30751999999999996, 5, 0.19999999999999996 },
-  { 0.34538624999999995, 5, 0.30000000000000004 },
-  { 0.27064000000000010, 5, 0.39999999999999991 },
-  { 0.089843750000000000, 5, 0.50000000000000000 },
-  { -0.15264000000000022, 5, 0.60000000000000009 },
-  { -0.36519874999999991, 5, 0.69999999999999996 },
-  { -0.39951999999999993, 5, 0.80000000000000004 },
-  { -0.041141250000000407, 5, 0.89999999999999991 },
-  { 1.0000000000000000, 5, 1.0000000000000000 },
+  { 1.0000000000000000, 2, -1.0000000000000000, 0.0 },
+  { 0.71500000000000008, 2, -0.90000000000000002, 0.0 },
+  { 0.46000000000000019, 2, -0.80000000000000004, 0.0 },
+  { 0.23499999999999988, 2, -0.69999999999999996, 0.0 },
+  { 0.039999999999999925, 2, -0.59999999999999998, 0.0 },
+  { -0.12500000000000000, 2, -0.50000000000000000, 0.0 },
+  { -0.26000000000000012, 2, -0.39999999999999991, 0.0 },
+  { -0.36500000000000005, 2, -0.29999999999999993, 0.0 },
+  { -0.44000000000000006, 2, -0.19999999999999996, 0.0 },
+  { -0.48499999999999999, 2, -0.099999999999999978, 0.0 },
+  { -0.50000000000000000, 2, 0.0000000000000000, 0.0 },
+  { -0.48499999999999999, 2, 0.10000000000000009, 0.0 },
+  { -0.43999999999999989, 2, 0.20000000000000018, 0.0 },
+  { -0.36499999999999999, 2, 0.30000000000000004, 0.0 },
+  { -0.25999999999999984, 2, 0.40000000000000013, 0.0 },
+  { -0.12500000000000000, 2, 0.50000000000000000, 0.0 },
+  { 0.040000000000000147, 2, 0.60000000000000009, 0.0 },
+  { 0.23500000000000032, 2, 0.70000000000000018, 0.0 },
+  { 0.46000000000000019, 2, 0.80000000000000004, 0.0 },
+  { 0.71500000000000030, 2, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 2, 1.0000000000000000, 0.0 },
 };
+const double toler003 = 2.5000000000000020e-13;
 
-// Test function for l=5.
-template <typename Tp>
-void test004()
+// Test data for l=5.
+// max(|f - f_GSL|): 2.0122792321330962e-16 at index 19
+// max(|f - f_GSL| / |f_GSL|): 4.8911475274405560e-15
+// mean(f - f_GSL): -2.3129646346357427e-18
+// variance(f - f_GSL): 2.8086478355647191e-37
+// stddev(f - f_GSL): 5.2996677589870847e-19
+const testcase_legendre<double>
+data004[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data004)
-                         / sizeof(testcase_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::legendre(Tp(data004[i].l), Tp(data004[i].x));
-      const Tp f0 = data004[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=10.
-testcase_legendre<double> data005[] = {
-  { 1.0000000000000000, 10, -1.0000000000000000 },
-  { -0.26314561785585977, 10, -0.90000000000000002 },
-  { 0.30052979559999998, 10, -0.80000000000000004 },
-  { 0.085805795531640333, 10, -0.69999999999999996 },
-  { -0.24366274560000006, 10, -0.59999999999999998 },
-  { -0.18822860717773438, 10, -0.50000000000000000 },
-  { 0.096839064399999869, 10, -0.40000000000000002 },
-  { 0.25147634951601561, 10, -0.30000000000000004 },
-  { 0.12907202559999989, 10, -0.19999999999999996 },
-  { -0.12212499738710947, 10, -0.099999999999999978 },
-  { -0.24609375000000000, 10, 0.0000000000000000 },
-  { -0.12212499738710922, 10, 0.10000000000000009 },
-  { 0.12907202559999989, 10, 0.19999999999999996 },
-  { 0.25147634951601561, 10, 0.30000000000000004 },
-  { 0.096839064400000258, 10, 0.39999999999999991 },
-  { -0.18822860717773438, 10, 0.50000000000000000 },
-  { -0.24366274559999987, 10, 0.60000000000000009 },
-  { 0.085805795531640333, 10, 0.69999999999999996 },
-  { 0.30052979559999998, 10, 0.80000000000000004 },
-  { -0.26314561785585888, 10, 0.89999999999999991 },
-  { 1.0000000000000000, 10, 1.0000000000000000 },
+  { -1.0000000000000000, 5, -1.0000000000000000, 0.0 },
+  { 0.041141250000000087, 5, -0.90000000000000002, 0.0 },
+  { 0.39951999999999993, 5, -0.80000000000000004, 0.0 },
+  { 0.36519874999999991, 5, -0.69999999999999996, 0.0 },
+  { 0.15263999999999994, 5, -0.59999999999999998, 0.0 },
+  { -0.089843750000000000, 5, -0.50000000000000000, 0.0 },
+  { -0.27064000000000010, 5, -0.39999999999999991, 0.0 },
+  { -0.34538624999999995, 5, -0.29999999999999993, 0.0 },
+  { -0.30751999999999996, 5, -0.19999999999999996, 0.0 },
+  { -0.17882874999999995, 5, -0.099999999999999978, 0.0 },
+  { 0.0000000000000000, 5, 0.0000000000000000, 0.0 },
+  { 0.17882875000000015, 5, 0.10000000000000009, 0.0 },
+  { 0.30752000000000013, 5, 0.20000000000000018, 0.0 },
+  { 0.34538625000000001, 5, 0.30000000000000004, 0.0 },
+  { 0.27063999999999988, 5, 0.40000000000000013, 0.0 },
+  { 0.089843750000000000, 5, 0.50000000000000000, 0.0 },
+  { -0.15264000000000016, 5, 0.60000000000000009, 0.0 },
+  { -0.36519875000000024, 5, 0.70000000000000018, 0.0 },
+  { -0.39951999999999993, 5, 0.80000000000000004, 0.0 },
+  { -0.041141249999999151, 5, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 5, 1.0000000000000000, 0.0 },
 };
+const double toler004 = 2.5000000000000020e-13;
 
-// Test function for l=10.
-template <typename Tp>
-void test005()
+// Test data for l=10.
+// max(|f - f_GSL|): 3.8857805861880479e-16 at index 19
+// max(|f - f_GSL| / |f_GSL|): 1.4766655123690915e-15
+// mean(f - f_GSL): -2.5112187461759493e-17
+// variance(f - f_GSL): 3.3107652853513909e-35
+// stddev(f - f_GSL): 5.7539249954716919e-18
+const testcase_legendre<double>
+data005[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data005)
-                         / sizeof(testcase_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::legendre(Tp(data005[i].l), Tp(data005[i].x));
-      const Tp f0 = data005[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=20.
-testcase_legendre<double> data006[] = {
-  { 1.0000000000000000, 20, -1.0000000000000000 },
-  { -0.14930823530984821, 20, -0.90000000000000002 },
-  { 0.22420460541741344, 20, -0.80000000000000004 },
-  { -0.20457394463834172, 20, -0.69999999999999996 },
-  { 0.15916752910098114, 20, -0.59999999999999998 },
-  { -0.048358381067373557, 20, -0.50000000000000000 },
-  { -0.10159261558628156, 20, -0.40000000000000002 },
-  { 0.18028715947998047, 20, -0.30000000000000004 },
-  { -0.098042194344594741, 20, -0.19999999999999996 },
-  { -0.082077130944527649, 20, -0.099999999999999978 },
-  { 0.17619705200195312, 20, 0.0000000000000000 },
-  { -0.082077130944528037, 20, 0.10000000000000009 },
-  { -0.098042194344594741, 20, 0.19999999999999996 },
-  { 0.18028715947998047, 20, 0.30000000000000004 },
-  { -0.10159261558628112, 20, 0.39999999999999991 },
-  { -0.048358381067373557, 20, 0.50000000000000000 },
-  { 0.15916752910098084, 20, 0.60000000000000009 },
-  { -0.20457394463834172, 20, 0.69999999999999996 },
-  { 0.22420460541741344, 20, 0.80000000000000004 },
-  { -0.14930823530984949, 20, 0.89999999999999991 },
-  { 1.0000000000000000, 20, 1.0000000000000000 },
+  { 1.0000000000000000, 10, -1.0000000000000000, 0.0 },
+  { -0.26314561785585960, 10, -0.90000000000000002, 0.0 },
+  { 0.30052979560000004, 10, -0.80000000000000004, 0.0 },
+  { 0.085805795531640333, 10, -0.69999999999999996, 0.0 },
+  { -0.24366274560000001, 10, -0.59999999999999998, 0.0 },
+  { -0.18822860717773438, 10, -0.50000000000000000, 0.0 },
+  { 0.096839064400000258, 10, -0.39999999999999991, 0.0 },
+  { 0.25147634951601561, 10, -0.29999999999999993, 0.0 },
+  { 0.12907202559999983, 10, -0.19999999999999996, 0.0 },
+  { -0.12212499738710943, 10, -0.099999999999999978, 0.0 },
+  { -0.24609375000000000, 10, 0.0000000000000000, 0.0 },
+  { -0.12212499738710922, 10, 0.10000000000000009, 0.0 },
+  { 0.12907202560000042, 10, 0.20000000000000018, 0.0 },
+  { 0.25147634951601561, 10, 0.30000000000000004, 0.0 },
+  { 0.096839064399999633, 10, 0.40000000000000013, 0.0 },
+  { -0.18822860717773438, 10, 0.50000000000000000, 0.0 },
+  { -0.24366274559999984, 10, 0.60000000000000009, 0.0 },
+  { 0.085805795531641277, 10, 0.70000000000000018, 0.0 },
+  { 0.30052979560000004, 10, 0.80000000000000004, 0.0 },
+  { -0.26314561785586010, 10, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 10, 1.0000000000000000, 0.0 },
 };
+const double toler005 = 2.5000000000000020e-13;
 
-// Test function for l=20.
-template <typename Tp>
-void test006()
+// Test data for l=20.
+// max(|f - f_GSL|): 3.6082248300317588e-16 at index 19
+// max(|f - f_GSL| / |f_GSL|): 2.4166281401316513e-15
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 4.9424644697959907e-65
+// stddev(f - f_GSL): 7.0302663319365015e-33
+const testcase_legendre<double>
+data006[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data006)
-                         / sizeof(testcase_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::legendre(Tp(data006[i].l), Tp(data006[i].x));
-      const Tp f0 = data006[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=50.
-testcase_legendre<double> data007[] = {
-  { 1.0000000000000000, 50, -1.0000000000000000 },
-  { -0.17003765994383685, 50, -0.90000000000000002 },
-  { 0.13879737345093118, 50, -0.80000000000000004 },
-  { -0.014572731645892805, 50, -0.69999999999999996 },
-  { -0.058860798844002173, 50, -0.59999999999999998 },
-  { -0.031059099239609828, 50, -0.50000000000000000 },
-  { 0.041569033381825368, 50, -0.40000000000000002 },
-  { 0.10911051574714808, 50, -0.30000000000000004 },
-  { 0.083432272204197466, 50, -0.19999999999999996 },
-  { -0.038205812661313579, 50, -0.099999999999999978 },
-  { -0.11227517265921705, 50, 0.0000000000000000 },
-  { -0.038205812661314169, 50, 0.10000000000000009 },
-  { 0.083432272204197466, 50, 0.19999999999999996 },
-  { 0.10911051574714808, 50, 0.30000000000000004 },
-  { 0.041569033381824647, 50, 0.39999999999999991 },
-  { -0.031059099239609828, 50, 0.50000000000000000 },
-  { -0.058860798844001430, 50, 0.60000000000000009 },
-  { -0.014572731645892805, 50, 0.69999999999999996 },
-  { 0.13879737345093118, 50, 0.80000000000000004 },
-  { -0.17003765994383663, 50, 0.89999999999999991 },
-  { 1.0000000000000000, 50, 1.0000000000000000 },
+  { 1.0000000000000000, 20, -1.0000000000000000, 0.0 },
+  { -0.14930823530984835, 20, -0.90000000000000002, 0.0 },
+  { 0.22420460541741347, 20, -0.80000000000000004, 0.0 },
+  { -0.20457394463834172, 20, -0.69999999999999996, 0.0 },
+  { 0.15916752910098109, 20, -0.59999999999999998, 0.0 },
+  { -0.048358381067373557, 20, -0.50000000000000000, 0.0 },
+  { -0.10159261558628112, 20, -0.39999999999999991, 0.0 },
+  { 0.18028715947998047, 20, -0.29999999999999993, 0.0 },
+  { -0.098042194344594796, 20, -0.19999999999999996, 0.0 },
+  { -0.082077130944527663, 20, -0.099999999999999978, 0.0 },
+  { 0.17619705200195312, 20, 0.0000000000000000, 0.0 },
+  { -0.082077130944528023, 20, 0.10000000000000009, 0.0 },
+  { -0.098042194344594089, 20, 0.20000000000000018, 0.0 },
+  { 0.18028715947998042, 20, 0.30000000000000004, 0.0 },
+  { -0.10159261558628192, 20, 0.40000000000000013, 0.0 },
+  { -0.048358381067373557, 20, 0.50000000000000000, 0.0 },
+  { 0.15916752910098075, 20, 0.60000000000000009, 0.0 },
+  { -0.20457394463834136, 20, 0.70000000000000018, 0.0 },
+  { 0.22420460541741347, 20, 0.80000000000000004, 0.0 },
+  { -0.14930823530984758, 20, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 20, 1.0000000000000000, 0.0 },
 };
+const double toler006 = 2.5000000000000020e-13;
 
-// Test function for l=50.
-template <typename Tp>
-void test007()
+// Test data for l=50.
+// max(|f - f_GSL|): 1.6653345369377348e-16 at index 2
+// max(|f - f_GSL| / |f_GSL|): 1.6665460706897444e-15
+// mean(f - f_GSL): -8.0953762212251003e-18
+// variance(f - f_GSL): 3.4405935985667807e-36
+// stddev(f - f_GSL): 1.8548837156454796e-18
+const testcase_legendre<double>
+data007[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data007)
-                         / sizeof(testcase_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::legendre(Tp(data007[i].l), Tp(data007[i].x));
-      const Tp f0 = data007[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+  { 1.0000000000000000, 50, -1.0000000000000000, 0.0 },
+  { -0.17003765994383671, 50, -0.90000000000000002, 0.0 },
+  { 0.13879737345093113, 50, -0.80000000000000004, 0.0 },
+  { -0.014572731645892852, 50, -0.69999999999999996, 0.0 },
+  { -0.058860798844002096, 50, -0.59999999999999998, 0.0 },
+  { -0.031059099239609811, 50, -0.50000000000000000, 0.0 },
+  { 0.041569033381824674, 50, -0.39999999999999991, 0.0 },
+  { 0.10911051574714790, 50, -0.29999999999999993, 0.0 },
+  { 0.083432272204197494, 50, -0.19999999999999996, 0.0 },
+  { -0.038205812661313600, 50, -0.099999999999999978, 0.0 },
+  { -0.11227517265921705, 50, 0.0000000000000000, 0.0 },
+  { -0.038205812661314155, 50, 0.10000000000000009, 0.0 },
+  { 0.083432272204196564, 50, 0.20000000000000018, 0.0 },
+  { 0.10911051574714797, 50, 0.30000000000000004, 0.0 },
+  { 0.041569033381826007, 50, 0.40000000000000013, 0.0 },
+  { -0.031059099239609811, 50, 0.50000000000000000, 0.0 },
+  { -0.058860798844001430, 50, 0.60000000000000009, 0.0 },
+  { -0.014572731645890737, 50, 0.70000000000000018, 0.0 },
+  { 0.13879737345093113, 50, 0.80000000000000004, 0.0 },
+  { -0.17003765994383679, 50, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 50, 1.0000000000000000, 0.0 },
+};
+const double toler007 = 2.5000000000000020e-13;
 
 // Test data for l=100.
-testcase_legendre<double> data008[] = {
-  { 1.0000000000000000, 100, -1.0000000000000000 },
-  { 0.10226582055871908, 100, -0.90000000000000002 },
-  { 0.050861167913584124, 100, -0.80000000000000004 },
-  { -0.077132507199778780, 100, -0.69999999999999996 },
-  { -0.023747023905133110, 100, -0.59999999999999998 },
-  { -0.060518025961861198, 100, -0.50000000000000000 },
-  { -0.072258202125684429, 100, -0.40000000000000002 },
-  { 0.057127392202801719, 100, -0.30000000000000004 },
-  { 0.014681835355659636, 100, -0.19999999999999996 },
-  { -0.063895098434750303, 100, -0.099999999999999978 },
-  { 0.079589237387178727, 100, 0.0000000000000000 },
-  { -0.063895098434749775, 100, 0.10000000000000009 },
-  { 0.014681835355659636, 100, 0.19999999999999996 },
-  { 0.057127392202801719, 100, 0.30000000000000004 },
-  { -0.072258202125685012, 100, 0.39999999999999991 },
-  { -0.060518025961861198, 100, 0.50000000000000000 },
-  { -0.023747023905134217, 100, 0.60000000000000009 },
-  { -0.077132507199778780, 100, 0.69999999999999996 },
-  { 0.050861167913584124, 100, 0.80000000000000004 },
-  { 0.10226582055871723, 100, 0.89999999999999991 },
-  { 1.0000000000000000, 100, 1.0000000000000000 },
+// max(|f - f_GSL|): 3.4694469519536142e-16 at index 2
+// max(|f - f_GSL| / |f_GSL|): 6.8214063779431592e-15
+// mean(f - f_GSL): -4.1385545784018113e-17
+// variance(f - f_GSL): 8.9920078491655612e-35
+// stddev(f - f_GSL): 9.4826198116161765e-18
+const testcase_legendre<double>
+data008[21] =
+{
+  { 1.0000000000000000, 100, -1.0000000000000000, 0.0 },
+  { 0.10226582055871893, 100, -0.90000000000000002, 0.0 },
+  { 0.050861167913584228, 100, -0.80000000000000004, 0.0 },
+  { -0.077132507199778641, 100, -0.69999999999999996, 0.0 },
+  { -0.023747023905133141, 100, -0.59999999999999998, 0.0 },
+  { -0.060518025961861198, 100, -0.50000000000000000, 0.0 },
+  { -0.072258202125685025, 100, -0.39999999999999991, 0.0 },
+  { 0.057127392202801046, 100, -0.29999999999999993, 0.0 },
+  { 0.014681835355659706, 100, -0.19999999999999996, 0.0 },
+  { -0.063895098434750205, 100, -0.099999999999999978, 0.0 },
+  { 0.079589237387178727, 100, 0.0000000000000000, 0.0 },
+  { -0.063895098434749761, 100, 0.10000000000000009, 0.0 },
+  { 0.014681835355657875, 100, 0.20000000000000018, 0.0 },
+  { 0.057127392202801566, 100, 0.30000000000000004, 0.0 },
+  { -0.072258202125684082, 100, 0.40000000000000013, 0.0 },
+  { -0.060518025961861198, 100, 0.50000000000000000, 0.0 },
+  { -0.023747023905134217, 100, 0.60000000000000009, 0.0 },
+  { -0.077132507199780501, 100, 0.70000000000000018, 0.0 },
+  { 0.050861167913584228, 100, 0.80000000000000004, 0.0 },
+  { 0.10226582055872063, 100, 0.90000000000000013, 0.0 },
+  { 1.0000000000000000, 100, 1.0000000000000000, 0.0 },
 };
+const double toler008 = 5.0000000000000039e-13;
 
-// Test function for l=100.
-template <typename Tp>
-void test008()
-{
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data008)
-                         / sizeof(testcase_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::legendre(Tp(data008[i].l), Tp(data008[i].x));
-      const Tp f0 = data008[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_legendre<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+      {
+       const Ret f = std::tr1::legendre(data[i].l, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
+int
+main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
   return 0;
 }
index a679118..c8035a9 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data.
-testcase_riemann_zeta<double> data001[] = {
-  { 0.0000000000000000, -10.000000000000000 },
-  { -0.0033669820451019579, -9.8000000000000007 },
-  { -0.0058129517767319039, -9.5999999999999996 },
-  { -0.0072908732290557004, -9.4000000000000004 },
-  { -0.0078420910654484442, -9.1999999999999993 },
-  { -0.0075757575757575803, -9.0000000000000000 },
-  { -0.0066476555677551898, -8.8000000000000007 },
-  { -0.0052400095350859429, -8.5999999999999996 },
-  { -0.0035434308017674959, -8.4000000000000004 },
-  { -0.0017417330388368585, -8.1999999999999993 },
-  { 0.0000000000000000, -8.0000000000000000 },
-  { 0.0015440036789213965, -7.7999999999999998 },
-  { 0.0027852131086497423, -7.5999999999999996 },
-  { 0.0036537321227995880, -7.4000000000000004 },
-  { 0.0041147930817053468, -7.2000000000000002 },
-  { 0.0041666666666666683, -7.0000000000000000 },
-  { 0.0038369975032738366, -6.7999999999999998 },
-  { 0.0031780270571782981, -6.5999999999999996 },
-  { 0.0022611282027338573, -6.4000000000000004 },
-  { 0.0011710237049390511, -6.2000000000000002 },
-  { 0.0000000000000000, -6.0000000000000000 },
-  { -0.0011576366649881879, -5.7999999999999998 },
-  { -0.0022106784318564345, -5.5999999999999996 },
-  { -0.0030755853460586891, -5.4000000000000004 },
-  { -0.0036804380477934787, -5.2000000000000002 },
-  { -0.0039682539682539698, -5.0000000000000000 },
-  { -0.0038996891301999797, -4.7999999999999998 },
-  { -0.0034551830834302711, -4.5999999999999996 },
-  { -0.0026366345018725115, -4.4000000000000004 },
-  { -0.0014687209305056974, -4.2000000000000002 },
-  { 0.0000000000000000, -4.0000000000000000 },
-  { 0.0016960463875825209, -3.7999999999999998 },
-  { 0.0035198355903356747, -3.5999999999999996 },
-  { 0.0053441503206513421, -3.4000000000000004 },
-  { 0.0070119720770910540, -3.2000000000000002 },
-  { 0.0083333333333333350, -3.0000000000000000 },
-  { 0.0090807294856852811, -2.7999999999999998 },
-  { 0.0089824623788396681, -2.5999999999999996 },
-  { 0.0077130239874243630, -2.4000000000000004 },
-  { 0.0048792123593036068, -2.2000000000000002 },
-  { 0.0000000000000000, -2.0000000000000000 },
-  { -0.0075229347765968010, -1.8000000000000007 },
-  { -0.018448986678963775, -1.5999999999999996 },
-  { -0.033764987694047593, -1.4000000000000004 },
-  { -0.054788441243880631, -1.1999999999999993 },
-  { -0.083333333333333398, -1.0000000000000000 },
-  { -0.12198707766977103, -0.80000000000000071 },
-  { -0.17459571193801401, -0.59999999999999964 },
-  { -0.24716546083171492, -0.40000000000000036 },
-  { -0.34966628059831484, -0.19999999999999929 },
-  { -0.49999999999999994, 0.0000000000000000 },
-  { -0.73392092489633953, 0.19999999999999929 },
-  { -1.1347977838669825, 0.40000000000000036 },
-  { -1.9526614482239983, 0.59999999999999964 },
-  { -4.4375384158955677, 0.80000000000000071 },
+// max(|f - f_Boost|): 6.6613381477509392e-16 at index 52
+// max(|f - f_Boost| / |f_Boost|): 2.1066054193139689e-15
+// mean(f - f_Boost): -2.3962839288606896e-17
+// variance(f - f_Boost): 1.0830580134580974e-35
+// stddev(f - f_Boost): 3.2909846755311660e-18
+const testcase_riemann_zeta<double>
+data001[55] =
+{
+  { 0.0000000000000000, -10.000000000000000, 0.0 },
+  { -0.0033669820451019570, -9.8000000000000007, 0.0 },
+  { -0.0058129517767319012, -9.5999999999999996, 0.0 },
+  { -0.0072908732290556961, -9.4000000000000004, 0.0 },
+  { -0.0078420910654484390, -9.1999999999999993, 0.0 },
+  { -0.0075757575757575760, -9.0000000000000000, 0.0 },
+  { -0.0066476555677551889, -8.8000000000000007, 0.0 },
+  { -0.0052400095350859403, -8.5999999999999996, 0.0 },
+  { -0.0035434308017674907, -8.4000000000000004, 0.0 },
+  { -0.0017417330388368587, -8.1999999999999993, 0.0 },
+  { 0.0000000000000000, -8.0000000000000000, 0.0 },
+  { 0.0015440036789213937, -7.7999999999999998, 0.0 },
+  { 0.0027852131086497402, -7.5999999999999996, 0.0 },
+  { 0.0036537321227995885, -7.4000000000000004, 0.0 },
+  { 0.0041147930817053528, -7.1999999999999993, 0.0 },
+  { 0.0041666666666666666, -7.0000000000000000, 0.0 },
+  { 0.0038369975032738362, -6.7999999999999998, 0.0 },
+  { 0.0031780270571782998, -6.5999999999999996, 0.0 },
+  { 0.0022611282027338573, -6.4000000000000004, 0.0 },
+  { 0.0011710237049390457, -6.1999999999999993, 0.0 },
+  { 0.0000000000000000, -6.0000000000000000, 0.0 },
+  { -0.0011576366649881868, -5.7999999999999998, 0.0 },
+  { -0.0022106784318564332, -5.5999999999999996, 0.0 },
+  { -0.0030755853460586913, -5.3999999999999995, 0.0 },
+  { -0.0036804380477934761, -5.1999999999999993, 0.0 },
+  { -0.0039682539682539680, -5.0000000000000000, 0.0 },
+  { -0.0038996891301999771, -4.7999999999999998, 0.0 },
+  { -0.0034551830834302698, -4.5999999999999996, 0.0 },
+  { -0.0026366345018725037, -4.3999999999999995, 0.0 },
+  { -0.0014687209305056920, -4.1999999999999993, 0.0 },
+  { 0.0000000000000000, -4.0000000000000000, 0.0 },
+  { 0.0016960463875825209, -3.7999999999999998, 0.0 },
+  { 0.0035198355903356634, -3.5999999999999996, 0.0 },
+  { 0.0053441503206513464, -3.3999999999999995, 0.0 },
+  { 0.0070119720770910566, -3.1999999999999993, 0.0 },
+  { 0.0083333333333333332, -3.0000000000000000, 0.0 },
+  { 0.0090807294856852499, -2.7999999999999998, 0.0 },
+  { 0.0089824623788396559, -2.5999999999999996, 0.0 },
+  { 0.0077130239874243379, -2.3999999999999995, 0.0 },
+  { 0.0048792123593035816, -2.1999999999999993, 0.0 },
+  { 0.0000000000000000, -2.0000000000000000, 0.0 },
+  { -0.0075229347765968738, -1.7999999999999989, 0.0 },
+  { -0.018448986678963719, -1.5999999999999996, 0.0 },
+  { -0.033764987694047545, -1.4000000000000004, 0.0 },
+  { -0.054788441243880513, -1.1999999999999993, 0.0 },
+  { -0.083333333333333329, -1.0000000000000000, 0.0 },
+  { -0.12198707766977138, -0.79999999999999893, 0.0 },
+  { -0.17459571193801349, -0.59999999999999964, 0.0 },
+  { -0.24716546083171545, -0.39999999999999858, 0.0 },
+  { -0.34966628059831456, -0.19999999999999929, 0.0 },
+  { -0.50000000000000000, 0.0000000000000000, 0.0 },
+  { -0.73392092489634220, 0.20000000000000107, 0.0 },
+  { -1.1347977838669825, 0.40000000000000036, 0.0 },
+  { -1.9526614482240094, 0.60000000000000142, 0.0 },
+  { -4.4375384158955686, 0.80000000000000071, 0.0 },
 };
+const double toler001 = 2.5000000000000020e-13;
+//  riemann_zeta
+
+// This can take long on simulators, timing out the test.
+// { dg-options "-DMAX_ITERATIONS=5" { target simulator } }
+
+#ifndef MAX_ITERATIONS
+#define MAX_ITERATIONS (sizeof(data001) / sizeof(testcase_riemann_zeta<double>))
+#endif
 
-// Test function.
-template <typename Tp>
-void test001()
+
+// Test data.
+// max(|f - f_Boost|): 8.8817841970012523e-16 at index 1
+// max(|f - f_Boost| / |f_Boost|): 2.8599739118398860e-16
+// mean(f - f_Boost): -1.5313421029312504e-18
+// variance(f - f_Boost): 1.6397870961151434e-38
+// stddev(f - f_Boost): 1.2805417197870374e-19
+const testcase_riemann_zeta<double>
+data002[145] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = MAX_ITERATIONS;
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::riemann_zeta(Tp(data001[i].x));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+  { 5.5915824411777519, 1.2000000000000000, 0.0 },
+  { 3.1055472779775810, 1.3999999999999999, 0.0 },
+  { 2.2857656656801297, 1.6000000000000001, 0.0 },
+  { 1.8822296181028220, 1.8000000000000000, 0.0 },
+  { 1.6449340668482264, 2.0000000000000000, 0.0 },
+  { 1.4905432565068935, 2.2000000000000002, 0.0 },
+  { 1.3833428588407355, 2.4000000000000004, 0.0 },
+  { 1.3054778090727805, 2.6000000000000001, 0.0 },
+  { 1.2470314223172534, 2.7999999999999998, 0.0 },
+  { 1.2020569031595942, 3.0000000000000000, 0.0 },
+  { 1.1667733709844670, 3.2000000000000002, 0.0 },
+  { 1.1386637757280416, 3.4000000000000004, 0.0 },
+  { 1.1159890791233376, 3.6000000000000001, 0.0 },
+  { 1.0975105764590043, 3.8000000000000003, 0.0 },
+  { 1.0823232337111381, 4.0000000000000000, 0.0 },
+  { 1.0697514772338095, 4.2000000000000002, 0.0 },
+  { 1.0592817259798355, 4.4000000000000004, 0.0 },
+  { 1.0505173825665735, 4.5999999999999996, 0.0 },
+  { 1.0431480133351789, 4.8000000000000007, 0.0 },
+  { 1.0369277551433700, 5.0000000000000000, 0.0 },
+  { 1.0316598766779166, 5.2000000000000002, 0.0 },
+  { 1.0271855389203539, 5.4000000000000004, 0.0 },
+  { 1.0233754792270300, 5.6000000000000005, 0.0 },
+  { 1.0201237683883446, 5.8000000000000007, 0.0 },
+  { 1.0173430619844492, 6.0000000000000000, 0.0 },
+  { 1.0149609451852231, 6.2000000000000002, 0.0 },
+  { 1.0129170887121841, 6.4000000000000004, 0.0 },
+  { 1.0111610141542711, 6.6000000000000005, 0.0 },
+  { 1.0096503223447120, 6.8000000000000007, 0.0 },
+  { 1.0083492773819229, 7.0000000000000000, 0.0 },
+  { 1.0072276664807172, 7.2000000000000002, 0.0 },
+  { 1.0062598756930512, 7.4000000000000004, 0.0 },
+  { 1.0054241359879634, 7.6000000000000005, 0.0 },
+  { 1.0047019048164696, 7.8000000000000007, 0.0 },
+  { 1.0040773561979444, 8.0000000000000000, 0.0 },
+  { 1.0035369583062013, 8.1999999999999993, 0.0 },
+  { 1.0030691220374448, 8.4000000000000004, 0.0 },
+  { 1.0026639074861505, 8.6000000000000014, 0.0 },
+  { 1.0023127779098220, 8.8000000000000007, 0.0 },
+  { 1.0020083928260821, 9.0000000000000000, 0.0 },
+  { 1.0017444334995897, 9.2000000000000011, 0.0 },
+  { 1.0015154553480514, 9.4000000000000004, 0.0 },
+  { 1.0013167628052648, 9.5999999999999996, 0.0 },
+  { 1.0011443029840295, 9.8000000000000007, 0.0 },
+  { 1.0009945751278180, 10.000000000000000, 0.0 },
+  { 1.0008645533615088, 10.200000000000001, 0.0 },
+  { 1.0007516206744651, 10.400000000000000, 0.0 },
+  { 1.0006535124140850, 10.600000000000001, 0.0 },
+  { 1.0005682678503411, 10.800000000000001, 0.0 },
+  { 1.0004941886041194, 11.000000000000000, 0.0 },
+  { 1.0004298029239942, 11.200000000000001, 0.0 },
+  { 1.0003738349551166, 11.400000000000000, 0.0 },
+  { 1.0003251782761946, 11.600000000000001, 0.0 },
+  { 1.0002828730909989, 11.800000000000001, 0.0 },
+  { 1.0002460865533080, 12.000000000000000, 0.0 },
+  { 1.0002140957818750, 12.200000000000001, 0.0 },
+  { 1.0001862731874054, 12.400000000000000, 0.0 },
+  { 1.0001620737887460, 12.600000000000001, 0.0 },
+  { 1.0001410242422091, 12.800000000000001, 0.0 },
+  { 1.0001227133475785, 13.000000000000000, 0.0 },
+  { 1.0001067838280169, 13.200000000000001, 0.0 },
+  { 1.0000929252097515, 13.400000000000000, 0.0 },
+  { 1.0000808676518720, 13.600000000000001, 0.0 },
+  { 1.0000703765974504, 13.800000000000001, 0.0 },
+  { 1.0000612481350588, 14.000000000000000, 0.0 },
+  { 1.0000533049750668, 14.200000000000001, 0.0 },
+  { 1.0000463929582293, 14.400000000000000, 0.0 },
+  { 1.0000403780253397, 14.600000000000001, 0.0 },
+  { 1.0000351435864272, 14.800000000000001, 0.0 },
+  { 1.0000305882363070, 15.000000000000000, 0.0 },
+  { 1.0000266237704787, 15.200000000000001, 0.0 },
+  { 1.0000231734615617, 15.400000000000000, 0.0 },
+  { 1.0000201705617975, 15.600000000000001, 0.0 },
+  { 1.0000175570017611, 15.800000000000001, 0.0 },
+  { 1.0000152822594086, 16.000000000000000, 0.0 },
+  { 1.0000133023770335, 16.200000000000003, 0.0 },
+  { 1.0000115791066833, 16.399999999999999, 0.0 },
+  { 1.0000100791671644, 16.600000000000001, 0.0 },
+  { 1.0000087735980012, 16.800000000000001, 0.0 },
+  { 1.0000076371976379, 17.000000000000000, 0.0 },
+  { 1.0000066480348633, 17.199999999999999, 0.0 },
+  { 1.0000057870238737, 17.400000000000002, 0.0 },
+  { 1.0000050375546610, 17.600000000000001, 0.0 },
+  { 1.0000043851715013, 17.800000000000001, 0.0 },
+  { 1.0000038172932650, 18.000000000000000, 0.0 },
+  { 1.0000033229700953, 18.199999999999999, 0.0 },
+  { 1.0000028926717150, 18.400000000000002, 0.0 },
+  { 1.0000025181032419, 18.600000000000001, 0.0 },
+  { 1.0000021920449285, 18.800000000000001, 0.0 },
+  { 1.0000019082127165, 19.000000000000000, 0.0 },
+  { 1.0000016611368951, 19.199999999999999, 0.0 },
+  { 1.0000014460565094, 19.400000000000002, 0.0 },
+  { 1.0000012588274738, 19.600000000000001, 0.0 },
+  { 1.0000010958426055, 19.800000000000001, 0.0 },
+  { 1.0000009539620338, 20.000000000000000, 0.0 },
+  { 1.0000008304526344, 20.200000000000003, 0.0 },
+  { 1.0000007229353187, 20.400000000000002, 0.0 },
+  { 1.0000006293391575, 20.600000000000001, 0.0 },
+  { 1.0000005478614529, 20.800000000000001, 0.0 },
+  { 1.0000004769329869, 21.000000000000000, 0.0 },
+  { 1.0000004151877719, 21.200000000000003, 0.0 },
+  { 1.0000003614367252, 21.400000000000002, 0.0 },
+  { 1.0000003146447527, 21.600000000000001, 0.0 },
+  { 1.0000002739108020, 21.800000000000001, 0.0 },
+  { 1.0000002384505027, 22.000000000000000, 0.0 },
+  { 1.0000002075810521, 22.200000000000003, 0.0 },
+  { 1.0000001807080625, 22.400000000000002, 0.0 },
+  { 1.0000001573141093, 22.600000000000001, 0.0 },
+  { 1.0000001369487659, 22.800000000000001, 0.0 },
+  { 1.0000001192199259, 23.000000000000000, 0.0 },
+  { 1.0000001037862518, 23.200000000000003, 0.0 },
+  { 1.0000000903506006, 23.400000000000002, 0.0 },
+  { 1.0000000786543011, 23.600000000000001, 0.0 },
+  { 1.0000000684721728, 23.800000000000001, 0.0 },
+  { 1.0000000596081891, 24.000000000000000, 0.0 },
+  { 1.0000000518917020, 24.200000000000003, 0.0 },
+  { 1.0000000451741575, 24.400000000000002, 0.0 },
+  { 1.0000000393262332, 24.600000000000001, 0.0 },
+  { 1.0000000342353501, 24.800000000000001, 0.0 },
+  { 1.0000000298035034, 25.000000000000000, 0.0 },
+  { 1.0000000259453767, 25.200000000000003, 0.0 },
+  { 1.0000000225866978, 25.400000000000002, 0.0 },
+  { 1.0000000196628109, 25.600000000000001, 0.0 },
+  { 1.0000000171174297, 25.800000000000001, 0.0 },
+  { 1.0000000149015549, 26.000000000000000, 0.0 },
+  { 1.0000000129725302, 26.200000000000003, 0.0 },
+  { 1.0000000112932221, 26.400000000000002, 0.0 },
+  { 1.0000000098313035, 26.600000000000001, 0.0 },
+  { 1.0000000085586331, 26.800000000000001, 0.0 },
+  { 1.0000000074507118, 27.000000000000000, 0.0 },
+  { 1.0000000064862125, 27.200000000000003, 0.0 },
+  { 1.0000000056465688, 27.400000000000002, 0.0 },
+  { 1.0000000049156179, 27.600000000000001, 0.0 },
+  { 1.0000000042792894, 27.800000000000001, 0.0 },
+  { 1.0000000037253340, 28.000000000000000, 0.0 },
+  { 1.0000000032430887, 28.200000000000003, 0.0 },
+  { 1.0000000028232703, 28.400000000000002, 0.0 },
+  { 1.0000000024577975, 28.600000000000001, 0.0 },
+  { 1.0000000021396356, 28.800000000000001, 0.0 },
+  { 1.0000000018626598, 29.000000000000000, 0.0 },
+  { 1.0000000016215385, 29.200000000000003, 0.0 },
+  { 1.0000000014116304, 29.400000000000002, 0.0 },
+  { 1.0000000012288950, 29.600000000000001, 0.0 },
+  { 1.0000000010698147, 29.800000000000001, 0.0 },
+  { 1.0000000009313275, 30.000000000000000, 0.0 },
+};
+const double toler002 = 2.5000000000000020e-13;
+
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_riemann_zeta<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = MAX_ITERATIONS;
+    for (unsigned int i = 0; i < num_datum; ++i)
+      {
+       const Ret f = std::tr1::riemann_zeta(data[i].s);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
+int
+main()
 {
-  test001<double>();
+  test(data001, toler001);
+  test(data002, toler002);
   return 0;
 }
index 5154c83..512f6ea 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  sph_bessel
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for n=0.
-testcase_sph_bessel<double> data001[] = {
-  { 1.0000000000000000, 0, 0.0000000000000000 },
-  { 0.98961583701809175, 0, 0.25000000000000000 },
-  { 0.95885107720840601, 0, 0.50000000000000000 },
-  { 0.90885168003111216, 0, 0.75000000000000000 },
-  { 0.84147098480789650, 0, 1.0000000000000000 },
-  { 0.75918769548446896, 0, 1.2500000000000000 },
-  { 0.66499665773603633, 0, 1.5000000000000000 },
-  { 0.56227768392796396, 0, 1.7500000000000000 },
-  { 0.45464871341284085, 0, 2.0000000000000000 },
-  { 0.34581030972796500, 0, 2.2500000000000000 },
-  { 0.23938885764158258, 0, 2.5000000000000000 },
-  { 0.13878581529175696, 0, 2.7500000000000000 },
-  { 0.047040002686622402, 0, 3.0000000000000000 },
-  { -0.033290810624648733, 0, 3.2500000000000000 },
-  { -0.10022377933989138, 0, 3.5000000000000000 },
-  { -0.15241635166462500, 0, 3.7500000000000000 },
-  { -0.18920062382698205, 0, 4.0000000000000000 },
-  { -0.21058573134790201, 0, 4.2500000000000000 },
-  { -0.21722891503668823, 0, 4.5000000000000000 },
-  { -0.21037742925797431, 0, 4.7500000000000000 },
-  { -0.19178485493262770, 0, 5.0000000000000000 },
+// max(|f - f_GSL|): 3.3306690738754696e-16 at index 1
+// max(|f - f_GSL| / |f_GSL|): 2.2927598190254308e-15
+// mean(f - f_GSL): -6.2780468654398733e-18
+// variance(f - f_GSL): 6.0810091607155313e-35
+// stddev(f - f_GSL): 7.7980825596524246e-18
+const testcase_sph_bessel<double>
+data001[21] =
+{
+  { 1.0000000000000000, 0, 0.0000000000000000, 0.0 },
+  { 0.98961583701809175, 0, 0.25000000000000000, 0.0 },
+  { 0.95885107720840601, 0, 0.50000000000000000, 0.0 },
+  { 0.90885168003111227, 0, 0.75000000000000000, 0.0 },
+  { 0.84147098480789650, 0, 1.0000000000000000, 0.0 },
+  { 0.75918769548446896, 0, 1.2500000000000000, 0.0 },
+  { 0.66499665773603633, 0, 1.5000000000000000, 0.0 },
+  { 0.56227768392796396, 0, 1.7500000000000000, 0.0 },
+  { 0.45464871341284080, 0, 2.0000000000000000, 0.0 },
+  { 0.34581030972796500, 0, 2.2500000000000000, 0.0 },
+  { 0.23938885764158258, 0, 2.5000000000000000, 0.0 },
+  { 0.13878581529175696, 0, 2.7500000000000000, 0.0 },
+  { 0.047040002686622402, 0, 3.0000000000000000, 0.0 },
+  { -0.033290810624648733, 0, 3.2500000000000000, 0.0 },
+  { -0.10022377933989138, 0, 3.5000000000000000, 0.0 },
+  { -0.15241635166462503, 0, 3.7500000000000000, 0.0 },
+  { -0.18920062382698205, 0, 4.0000000000000000, 0.0 },
+  { -0.21058573134790204, 0, 4.2500000000000000, 0.0 },
+  { -0.21722891503668823, 0, 4.5000000000000000, 0.0 },
+  { -0.21037742925797431, 0, 4.7500000000000000, 0.0 },
+  { -0.19178485493262770, 0, 5.0000000000000000, 0.0 },
 };
-
-// Test function for n=0.
-template<typename Tp>
-  void
-  test001()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data001)
-                          / sizeof(testcase_sph_bessel<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_bessel(Tp(data001[i].n), Tp(data001[i].x));
-       const Tp f0 = data001[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler001 = 2.5000000000000020e-13;
 
 // Test data for n=1.
-testcase_sph_bessel<double> data002[] = {
-  { 0.0000000000000000, 1, 0.0000000000000000 },
-  { 0.082813661229788060, 1, 0.25000000000000000 },
-  { 0.16253703063606650, 1, 0.50000000000000000 },
-  { 0.23621708154305501, 1, 0.75000000000000000 },
-  { 0.30116867893975674, 1, 1.0000000000000000 },
-  { 0.35509226647136022, 1, 1.2500000000000000 },
-  { 0.39617297071222229, 1, 1.5000000000000000 },
-  { 0.42315642261568914, 1, 1.7500000000000000 },
-  { 0.43539777497999166, 1, 2.0000000000000000 },
-  { 0.43288174775586846, 1, 2.2500000000000000 },
-  { 0.41621298927540645, 1, 2.5000000000000000 },
-  { 0.38657752506335291, 1, 2.7500000000000000 },
-  { 0.34567749976235596, 1, 3.0000000000000000 },
-  { 0.29564272783258383, 1, 3.2500000000000000 },
-  { 0.23892368798597285, 1, 3.5000000000000000 },
-  { 0.17817146817998289, 1, 3.7500000000000000 },
-  { 0.11611074925915747, 1, 4.0000000000000000 },
-  { 0.055412178486091958, 1, 4.2500000000000000 },
-  { -0.0014295812457574459, 1, 4.5000000000000000 },
-  { -0.052206227820200179, 1, 4.7500000000000000 },
-  { -0.095089408079170795, 1, 5.0000000000000000 },
+// max(|f - f_GSL|): 3.1918911957973251e-16 at index 1
+// max(|f - f_GSL| / |f_GSL|): 2.8667725070943857e-14
+// mean(f - f_GSL): -1.3578341493508937e-17
+// variance(f - f_GSL): 1.0552183286053657e-35
+// stddev(f - f_GSL): 3.2484124254862801e-18
+const testcase_sph_bessel<double>
+data002[21] =
+{
+  { 0.0000000000000000, 1, 0.0000000000000000, 0.0 },
+  { 0.082813661229788060, 1, 0.25000000000000000, 0.0 },
+  { 0.16253703063606650, 1, 0.50000000000000000, 0.0 },
+  { 0.23621708154305501, 1, 0.75000000000000000, 0.0 },
+  { 0.30116867893975674, 1, 1.0000000000000000, 0.0 },
+  { 0.35509226647136022, 1, 1.2500000000000000, 0.0 },
+  { 0.39617297071222229, 1, 1.5000000000000000, 0.0 },
+  { 0.42315642261568914, 1, 1.7500000000000000, 0.0 },
+  { 0.43539777497999166, 1, 2.0000000000000000, 0.0 },
+  { 0.43288174775586852, 1, 2.2500000000000000, 0.0 },
+  { 0.41621298927540656, 1, 2.5000000000000000, 0.0 },
+  { 0.38657752506335291, 1, 2.7500000000000000, 0.0 },
+  { 0.34567749976235596, 1, 3.0000000000000000, 0.0 },
+  { 0.29564272783258383, 1, 3.2500000000000000, 0.0 },
+  { 0.23892368798597285, 1, 3.5000000000000000, 0.0 },
+  { 0.17817146817998289, 1, 3.7500000000000000, 0.0 },
+  { 0.11611074925915747, 1, 4.0000000000000000, 0.0 },
+  { 0.055412178486091958, 1, 4.2500000000000000, 0.0 },
+  { -0.0014295812457574522, 1, 4.5000000000000000, 0.0 },
+  { -0.052206227820200179, 1, 4.7500000000000000, 0.0 },
+  { -0.095089408079170795, 1, 5.0000000000000000, 0.0 },
 };
-
-// Test function for n=1.
-template<typename Tp>
-  void
-  test002()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data002)
-                          / sizeof(testcase_sph_bessel<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_bessel(Tp(data002[i].n), Tp(data002[i].x));
-       const Tp f0 = data002[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-  }
+const double toler002 = 2.5000000000000015e-12;
 
 // Test data for n=2.
-testcase_sph_bessel<double> data003[] = {
-  { 0.0000000000000000, 2, 0.0000000000000000 },
-  { 0.0041480977393611252, 2, 0.25000000000000000 },
-  { 0.016371106607993412, 2, 0.50000000000000000 },
-  { 0.036016646141108236, 2, 0.75000000000000000 },
-  { 0.062035052011373860, 2, 1.0000000000000000 },
-  { 0.093033744046795624, 2, 1.2500000000000000 },
-  { 0.12734928368840817, 2, 1.5000000000000000 },
-  { 0.16313332627036031, 2, 1.7500000000000000 },
-  { 0.19844794905714661, 2, 2.0000000000000000 },
-  { 0.23136535394652627, 2, 2.2500000000000000 },
-  { 0.26006672948890525, 2, 2.5000000000000000 },
-  { 0.28293512114099162, 2, 2.7500000000000000 },
-  { 0.29863749707573356, 2, 3.0000000000000000 },
-  { 0.30619179016241843, 2, 3.2500000000000000 },
-  { 0.30501551189929671, 2, 3.5000000000000000 },
-  { 0.29495352620861132, 2, 3.7500000000000000 },
-  { 0.27628368577135015, 2, 4.0000000000000000 },
-  { 0.24970021027926106, 2, 4.2500000000000000 },
-  { 0.21627586087284995, 2, 4.5000000000000000 },
-  { 0.17740507484521628, 2, 4.7500000000000000 },
-  { 0.13473121008512520, 2, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.6653345369377348e-16 at index 11
+// max(|f - f_GSL| / |f_GSL|): 6.5384527054443100e-16
+// mean(f - f_GSL): -5.3693821875472602e-18
+// variance(f - f_GSL): 1.3199534264872259e-34
+// stddev(f - f_GSL): 1.1488922606089858e-17
+const testcase_sph_bessel<double>
+data003[21] =
+{
+  { 0.0000000000000000, 2, 0.0000000000000000, 0.0 },
+  { 0.0041480977393611252, 2, 0.25000000000000000, 0.0 },
+  { 0.016371106607993412, 2, 0.50000000000000000, 0.0 },
+  { 0.036016646141108236, 2, 0.75000000000000000, 0.0 },
+  { 0.062035052011373860, 2, 1.0000000000000000, 0.0 },
+  { 0.093033744046795624, 2, 1.2500000000000000, 0.0 },
+  { 0.12734928368840817, 2, 1.5000000000000000, 0.0 },
+  { 0.16313332627036031, 2, 1.7500000000000000, 0.0 },
+  { 0.19844794905714661, 2, 2.0000000000000000, 0.0 },
+  { 0.23136535394652627, 2, 2.2500000000000000, 0.0 },
+  { 0.26006672948890525, 2, 2.5000000000000000, 0.0 },
+  { 0.28293512114099162, 2, 2.7500000000000000, 0.0 },
+  { 0.29863749707573356, 2, 3.0000000000000000, 0.0 },
+  { 0.30619179016241843, 2, 3.2500000000000000, 0.0 },
+  { 0.30501551189929671, 2, 3.5000000000000000, 0.0 },
+  { 0.29495352620861132, 2, 3.7500000000000000, 0.0 },
+  { 0.27628368577135015, 2, 4.0000000000000000, 0.0 },
+  { 0.24970021027926106, 2, 4.2500000000000000, 0.0 },
+  { 0.21627586087284995, 2, 4.5000000000000000, 0.0 },
+  { 0.17740507484521628, 2, 4.7500000000000000, 0.0 },
+  { 0.13473121008512520, 2, 5.0000000000000000, 0.0 },
 };
-
-// Test function for n=2.
-template<typename Tp>
-  void
-  test003()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data003)
-                          / sizeof(testcase_sph_bessel<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_bessel(Tp(data003[i].n), Tp(data003[i].x));
-       const Tp f0 = data003[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler003 = 2.5000000000000020e-13;
 
 // Test data for n=5.
-testcase_sph_bessel<double> data004[] = {
-  { 0.0000000000000000, 5, 0.0000000000000000 },
-  { 9.3719811237268220e-08, 5, 0.25000000000000000 },
-  { 2.9774668754574453e-06, 5, 0.50000000000000000 },
-  { 2.2339447678335762e-05, 5, 0.75000000000000000 },
-  { 9.2561158611258144e-05, 5, 1.0000000000000000 },
-  { 0.00027638888920123806, 5, 1.2500000000000000 },
-  { 0.00066962059628932456, 5, 1.5000000000000000 },
-  { 0.0014021729022572799, 5, 1.7500000000000000 },
-  { 0.0026351697702441169, 5, 2.0000000000000000 },
-  { 0.0045540034750567553, 5, 2.2500000000000000 },
-  { 0.0073576387377689359, 5, 2.5000000000000000 },
-  { 0.011244740276407145, 5, 2.7500000000000000 },
-  { 0.016397480955999105, 5, 3.0000000000000000 },
-  { 0.022964112474845508, 5, 3.2500000000000000 },
-  { 0.031041536537391189, 5, 3.5000000000000000 },
-  { 0.040659189440948935, 5, 3.7500000000000000 },
-  { 0.051765539757363456, 5, 4.0000000000000000 },
-  { 0.064218395773425613, 5, 4.2500000000000000 },
-  { 0.077780030832892866, 5, 4.5000000000000000 },
-  { 0.092117870593729223, 5, 4.7500000000000000 },
-  { 0.10681116145650453, 5, 5.0000000000000000 },
+// max(|f - f_GSL|): 8.3266726846886741e-17 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.7459190669103549e-15
+// mean(f - f_GSL): 2.3688486417034017e-18
+// variance(f - f_GSL): 2.9460080408325262e-37
+// stddev(f - f_GSL): 5.4277141052495815e-19
+const testcase_sph_bessel<double>
+data004[21] =
+{
+  { 0.0000000000000000, 5, 0.0000000000000000, 0.0 },
+  { 9.3719811237268233e-08, 5, 0.25000000000000000, 0.0 },
+  { 2.9774668754574457e-06, 5, 0.50000000000000000, 0.0 },
+  { 2.2339447678335765e-05, 5, 0.75000000000000000, 0.0 },
+  { 9.2561158611258158e-05, 5, 1.0000000000000000, 0.0 },
+  { 0.00027638888920123806, 5, 1.2500000000000000, 0.0 },
+  { 0.00066962059628932467, 5, 1.5000000000000000, 0.0 },
+  { 0.0014021729022572801, 5, 1.7500000000000000, 0.0 },
+  { 0.0026351697702441173, 5, 2.0000000000000000, 0.0 },
+  { 0.0045540034750567553, 5, 2.2500000000000000, 0.0 },
+  { 0.0073576387377689376, 5, 2.5000000000000000, 0.0 },
+  { 0.011244740276407147, 5, 2.7500000000000000, 0.0 },
+  { 0.016397480955999109, 5, 3.0000000000000000, 0.0 },
+  { 0.022964112474845508, 5, 3.2500000000000000, 0.0 },
+  { 0.031041536537391189, 5, 3.5000000000000000, 0.0 },
+  { 0.040659189440948949, 5, 3.7500000000000000, 0.0 },
+  { 0.051765539757363470, 5, 4.0000000000000000, 0.0 },
+  { 0.064218395773425627, 5, 4.2500000000000000, 0.0 },
+  { 0.077780030832892866, 5, 4.5000000000000000, 0.0 },
+  { 0.092117870593729223, 5, 4.7500000000000000, 0.0 },
+  { 0.10681116145650453, 5, 5.0000000000000000, 0.0 },
 };
-
-// Test function for n=5.
-template<typename Tp>
-  void
-  test004()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data004)
-                          / sizeof(testcase_sph_bessel<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_bessel(Tp(data004[i].n), Tp(data004[i].x));
-       const Tp f0 = data004[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler004 = 2.5000000000000020e-13;
 
 // Test data for n=10.
-testcase_sph_bessel<double> data005[] = {
-  { 0.0000000000000000, 10, 0.0000000000000000 },
-  { 6.9267427453708468e-17, 10, 0.25000000000000000 },
-  { 7.0641239636618740e-14, 10, 0.50000000000000000 },
-  { 4.0459307474109287e-12, 10, 0.75000000000000000 },
-  { 7.1165526400473096e-11, 10, 1.0000000000000000 },
-  { 6.5470739530199939e-10, 10, 1.2500000000000000 },
-  { 3.9934406994836296e-09, 10, 1.5000000000000000 },
-  { 1.8327719460735247e-08, 10, 1.7500000000000000 },
-  { 6.8253008649747220e-08, 10, 2.0000000000000000 },
-  { 2.1653870546846626e-07, 10, 2.2500000000000000 },
-  { 6.0504362296385381e-07, 10, 2.5000000000000000 },
-  { 1.5246485352158441e-06, 10, 2.7500000000000000 },
-  { 3.5260038931752543e-06, 10, 3.0000000000000000 },
-  { 7.5839040020531456e-06, 10, 3.2500000000000000 },
-  { 1.5327786999397106e-05, 10, 3.5000000000000000 },
-  { 2.9348811002317661e-05, 10, 3.7500000000000000 },
-  { 5.3589865768632612e-05, 10, 4.0000000000000000 },
-  { 9.3818602410477989e-05, 10, 4.2500000000000000 },
-  { 0.00015817516371455801, 10, 4.5000000000000000 },
-  { 0.00025777607369970674, 10, 4.7500000000000000 },
-  { 0.00040734424424946052, 10, 5.0000000000000000 },
+// max(|f - f_GSL|): 8.4025668367626594e-19 at index 18
+// max(|f - f_GSL| / |f_GSL|): 6.7232224139500876e-15
+// mean(f - f_GSL): 3.5485202136403188e-20
+// variance(f - f_GSL): 3.7809684768411230e-38
+// stddev(f - f_GSL): 1.9444712589393351e-19
+const testcase_sph_bessel<double>
+data005[21] =
+{
+  { 0.0000000000000000, 10, 0.0000000000000000, 0.0 },
+  { 6.9267427453708468e-17, 10, 0.25000000000000000, 0.0 },
+  { 7.0641239636618740e-14, 10, 0.50000000000000000, 0.0 },
+  { 4.0459307474109287e-12, 10, 0.75000000000000000, 0.0 },
+  { 7.1165526400473096e-11, 10, 1.0000000000000000, 0.0 },
+  { 6.5470739530199939e-10, 10, 1.2500000000000000, 0.0 },
+  { 3.9934406994836296e-09, 10, 1.5000000000000000, 0.0 },
+  { 1.8327719460735247e-08, 10, 1.7500000000000000, 0.0 },
+  { 6.8253008649747220e-08, 10, 2.0000000000000000, 0.0 },
+  { 2.1653870546846626e-07, 10, 2.2500000000000000, 0.0 },
+  { 6.0504362296385381e-07, 10, 2.5000000000000000, 0.0 },
+  { 1.5246485352158441e-06, 10, 2.7500000000000000, 0.0 },
+  { 3.5260038931752543e-06, 10, 3.0000000000000000, 0.0 },
+  { 7.5839040020531456e-06, 10, 3.2500000000000000, 0.0 },
+  { 1.5327786999397103e-05, 10, 3.5000000000000000, 0.0 },
+  { 2.9348811002317664e-05, 10, 3.7500000000000000, 0.0 },
+  { 5.3589865768632612e-05, 10, 4.0000000000000000, 0.0 },
+  { 9.3818602410477989e-05, 10, 4.2500000000000000, 0.0 },
+  { 0.00015817516371455801, 10, 4.5000000000000000, 0.0 },
+  { 0.00025777607369970674, 10, 4.7500000000000000, 0.0 },
+  { 0.00040734424424946052, 10, 5.0000000000000000, 0.0 },
 };
-
-// Test function for n=10.
-template<typename Tp>
-  void
-  test005()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data005)
-                          / sizeof(testcase_sph_bessel<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_bessel(Tp(data005[i].n), Tp(data005[i].x));
-       const Tp f0 = data005[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-  }
+const double toler005 = 5.0000000000000039e-13;
 
 // Test data for n=20.
-testcase_sph_bessel<double> data006[] = {
-  { 0.0000000000000000, 20, 0.0000000000000000 },
-  { 6.9307487073399339e-38, 20, 0.25000000000000000 },
-  { 7.2515880810153944e-32, 20, 0.50000000000000000 },
-  { 2.4025911398834722e-28, 20, 0.75000000000000000 },
-  { 7.5377957222368705e-26, 20, 1.0000000000000000 },
-  { 6.4953439243593413e-24, 20, 1.2500000000000000 },
-  { 2.4703120390884050e-22, 20, 1.5000000000000000 },
-  { 5.3404627138297197e-21, 20, 1.7500000000000000 },
-  { 7.6326411008876072e-20, 20, 2.0000000000000000 },
-  { 7.9496335952781075e-19, 20, 2.2500000000000000 },
-  { 6.4488532759578977e-18, 20, 2.5000000000000000 },
-  { 4.2725223040880135e-17, 20, 2.7500000000000000 },
-  { 2.3942249272752627e-16, 20, 3.0000000000000000 },
-  { 1.1654033741499860e-15, 20, 3.2500000000000000 },
-  { 5.0303402625237510e-15, 20, 3.5000000000000000 },
-  { 1.9572475798118559e-14, 20, 3.7500000000000000 },
-  { 6.9559880644906101e-14, 20, 4.0000000000000000 },
-  { 2.2825949745670935e-13, 20, 4.2500000000000000 },
-  { 6.9781823021792824e-13, 20, 4.5000000000000000 },
-  { 2.0024157388665026e-12, 20, 4.7500000000000000 },
-  { 5.4277267607932098e-12, 20, 5.0000000000000000 },
+// max(|f - f_GSL|): 4.9275407583725281e-26 at index 20
+// max(|f - f_GSL| / |f_GSL|): 2.3196047253257129e-14
+// mean(f - f_GSL): 6.3234533203992742e-28
+// variance(f - f_GSL): 1.2422274402412017e-52
+// stddev(f - f_GSL): 1.1145525740139860e-26
+const testcase_sph_bessel<double>
+data006[21] =
+{
+  { 0.0000000000000000, 20, 0.0000000000000000, 0.0 },
+  { 6.9307487073399339e-38, 20, 0.25000000000000000, 0.0 },
+  { 7.2515880810153944e-32, 20, 0.50000000000000000, 0.0 },
+  { 2.4025911398834722e-28, 20, 0.75000000000000000, 0.0 },
+  { 7.5377957222368705e-26, 20, 1.0000000000000000, 0.0 },
+  { 6.4953439243593413e-24, 20, 1.2500000000000000, 0.0 },
+  { 2.4703120390884050e-22, 20, 1.5000000000000000, 0.0 },
+  { 5.3404627138297197e-21, 20, 1.7500000000000000, 0.0 },
+  { 7.6326411008876072e-20, 20, 2.0000000000000000, 0.0 },
+  { 7.9496335952781085e-19, 20, 2.2500000000000000, 0.0 },
+  { 6.4488532759578977e-18, 20, 2.5000000000000000, 0.0 },
+  { 4.2725223040880135e-17, 20, 2.7500000000000000, 0.0 },
+  { 2.3942249272752627e-16, 20, 3.0000000000000000, 0.0 },
+  { 1.1654033741499860e-15, 20, 3.2500000000000000, 0.0 },
+  { 5.0303402625237494e-15, 20, 3.5000000000000000, 0.0 },
+  { 1.9572475798118565e-14, 20, 3.7500000000000000, 0.0 },
+  { 6.9559880644906101e-14, 20, 4.0000000000000000, 0.0 },
+  { 2.2825949745670935e-13, 20, 4.2500000000000000, 0.0 },
+  { 6.9781823021792824e-13, 20, 4.5000000000000000, 0.0 },
+  { 2.0024157388665022e-12, 20, 4.7500000000000000, 0.0 },
+  { 5.4277267607932098e-12, 20, 5.0000000000000000, 0.0 },
 };
-
-// Test function for n=20.
-template<typename Tp>
-  void
-  test006()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data006)
-                          / sizeof(testcase_sph_bessel<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_bessel(Tp(data006[i].n), Tp(data006[i].x));
-       const Tp f0 = data006[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-  }
+const double toler006 = 2.5000000000000015e-12;
 //  sph_bessel
 
 // Test data for n=0.
-testcase_sph_bessel<double> data007[] = {
-  { 1.0000000000000000, 0, 0.0000000000000000 },
-  { -0.19178485493262770, 0, 5.0000000000000000 },
-  { -0.054402111088936979, 0, 10.000000000000000 },
-  { 0.043352522677141132, 0, 15.000000000000000 },
-  { 0.045647262536381385, 0, 20.000000000000000 },
-  { -0.0052940700039109216, 0, 25.000000000000000 },
-  { -0.032934387469762058, 0, 30.000000000000000 },
-  { -0.012233790557032885, 0, 35.000000000000000 },
-  { 0.018627829011983722, 0, 40.000000000000000 },
-  { 0.018908967211869299, 0, 45.000000000000000 },
-  { -0.0052474970740785751, 0, 50.000000000000000 },
-  { -0.018177366788338544, 0, 55.000000000000000 },
-  { -0.0050801770183702783, 0, 60.000000000000000 },
-  { 0.012720441222924669, 0, 65.000000000000000 },
-  { 0.011055581165112701, 0, 70.000000000000000 },
-  { -0.0051704218054590724, 0, 75.000000000000000 },
-  { -0.012423608174042190, 0, 80.000000000000000 },
-  { -0.0020714778817480834, 0, 85.000000000000000 },
-  { 0.0099332962622284207, 0, 90.000000000000000 },
-  { 0.0071922285761696946, 0, 95.000000000000000 },
-  { -0.0050636564110975880, 0, 100.00000000000000 },
+// max(|f - f_GSL|): 1.0703243846776900e-15 at index 15
+// max(|f - f_GSL| / |f_GSL|): 3.7516988430587603e-13
+// mean(f - f_GSL): -2.6681699178119462e-17
+// variance(f - f_GSL): 1.2529792126711598e-32
+// stddev(f - f_GSL): 1.1193655402374864e-16
+const testcase_sph_bessel<double>
+data007[21] =
+{
+  { 1.0000000000000000, 0, 0.0000000000000000, 0.0 },
+  { -0.19178485493262770, 0, 5.0000000000000000, 0.0 },
+  { -0.054402111088936986, 0, 10.000000000000000, 0.0 },
+  { 0.043352522677141132, 0, 15.000000000000000, 0.0 },
+  { 0.045647262536381385, 0, 20.000000000000000, 0.0 },
+  { -0.0052940700039109216, 0, 25.000000000000000, 0.0 },
+  { -0.032934387469762058, 0, 30.000000000000000, 0.0 },
+  { -0.012233790557032886, 0, 35.000000000000000, 0.0 },
+  { 0.018627829011983722, 0, 40.000000000000000, 0.0 },
+  { 0.018908967211869295, 0, 45.000000000000000, 0.0 },
+  { -0.0052474970740785751, 0, 50.000000000000000, 0.0 },
+  { -0.018177366788338544, 0, 55.000000000000000, 0.0 },
+  { -0.0050801770183702783, 0, 60.000000000000000, 0.0 },
+  { 0.012720441222924667, 0, 65.000000000000000, 0.0 },
+  { 0.011055581165112701, 0, 70.000000000000000, 0.0 },
+  { -0.0051704218054590724, 0, 75.000000000000000, 0.0 },
+  { -0.012423608174042190, 0, 80.000000000000000, 0.0 },
+  { -0.0020714778817480834, 0, 85.000000000000000, 0.0 },
+  { 0.0099332962622284224, 0, 90.000000000000000, 0.0 },
+  { 0.0071922285761696946, 0, 95.000000000000000, 0.0 },
+  { -0.0050636564110975880, 0, 100.00000000000000, 0.0 },
 };
-
-// Test function for n=0.
-template<typename Tp>
-  void
-  test007()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data007)
-                          / sizeof(testcase_sph_bessel<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_bessel(Tp(data007[i].n), Tp(data007[i].x));
-       const Tp f0 = data007[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-  }
+const double toler007 = 2.5000000000000014e-11;
 
 // Test data for n=1.
-testcase_sph_bessel<double> data008[] = {
-  { 0.0000000000000000, 1, 0.0000000000000000 },
-  { -0.095089408079170795, 1, 5.0000000000000000 },
-  { 0.078466941798751549, 1, 10.000000000000000 },
-  { 0.053536029035730827, 1, 15.000000000000000 },
-  { -0.018121739963850528, 1, 20.000000000000000 },
-  { -0.039859875274695380, 1, 25.000000000000000 },
-  { -0.0062395279119115375, 1, 30.000000000000000 },
-  { 0.025470240415270681, 1, 35.000000000000000 },
-  { 0.017139147266606137, 1, 40.000000000000000 },
-  { -0.011253622702352454, 1, 45.000000000000000 },
-  { -0.019404270511323839, 1, 50.000000000000000 },
-  { -0.00073280223727807778, 1, 55.000000000000000 },
-  { 0.015788880056613101, 1, 60.000000000000000 },
-  { 0.0088488352686322581, 1, 65.000000000000000 },
-  { -0.0088894803131598157, 1, 70.000000000000000 },
-  { -0.012358955887069445, 1, 75.000000000000000 },
-  { 0.0012245454458125670, 1, 80.000000000000000 },
-  { 0.011556531358968161, 1, 85.000000000000000 },
-  { 0.0050889656932377623, 1, 90.000000000000000 },
-  { -0.0076103298149331573, 1, 95.000000000000000 },
-  { -0.0086738252869878168, 1, 100.00000000000000 },
+// max(|f - f_GSL|): 1.0061396160665481e-15 at index 13
+// max(|f - f_GSL| / |f_GSL|): 6.5465850130521528e-13
+// mean(f - f_GSL): 5.2800645800044066e-17
+// variance(f - f_GSL): 2.8606709739566642e-33
+// stddev(f - f_GSL): 5.3485240711402470e-17
+const testcase_sph_bessel<double>
+data008[21] =
+{
+  { 0.0000000000000000, 1, 0.0000000000000000, 0.0 },
+  { -0.095089408079170795, 1, 5.0000000000000000, 0.0 },
+  { 0.078466941798751549, 1, 10.000000000000000, 0.0 },
+  { 0.053536029035730827, 1, 15.000000000000000, 0.0 },
+  { -0.018121739963850528, 1, 20.000000000000000, 0.0 },
+  { -0.039859875274695380, 1, 25.000000000000000, 0.0 },
+  { -0.0062395279119115375, 1, 30.000000000000000, 0.0 },
+  { 0.025470240415270681, 1, 35.000000000000000, 0.0 },
+  { 0.017139147266606140, 1, 40.000000000000000, 0.0 },
+  { -0.011253622702352454, 1, 45.000000000000000, 0.0 },
+  { -0.019404270511323839, 1, 50.000000000000000, 0.0 },
+  { -0.00073280223727807778, 1, 55.000000000000000, 0.0 },
+  { 0.015788880056613101, 1, 60.000000000000000, 0.0 },
+  { 0.0088488352686322581, 1, 65.000000000000000, 0.0 },
+  { -0.0088894803131598157, 1, 70.000000000000000, 0.0 },
+  { -0.012358955887069445, 1, 75.000000000000000, 0.0 },
+  { 0.0012245454458125673, 1, 80.000000000000000, 0.0 },
+  { 0.011556531358968161, 1, 85.000000000000000, 0.0 },
+  { 0.0050889656932377614, 1, 90.000000000000000, 0.0 },
+  { -0.0076103298149331573, 1, 95.000000000000000, 0.0 },
+  { -0.0086738252869878150, 1, 100.00000000000000, 0.0 },
 };
-
-// Test function for n=1.
-template<typename Tp>
-  void
-  test008()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data008)
-                          / sizeof(testcase_sph_bessel<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_bessel(Tp(data008[i].n), Tp(data008[i].x));
-       const Tp f0 = data008[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000028e-11));
-  }
+const double toler008 = 5.0000000000000028e-11;
 
 // Test data for n=2.
-testcase_sph_bessel<double> data009[] = {
-  { 0.0000000000000000, 2, 0.0000000000000000 },
-  { 0.13473121008512520, 2, 5.0000000000000000 },
-  { 0.077942193628562445, 2, 10.000000000000000 },
-  { -0.032645316869994966, 2, 15.000000000000000 },
-  { -0.048365523530958965, 2, 20.000000000000000 },
-  { 0.00051088497094747614, 2, 25.000000000000000 },
-  { 0.032310434678570907, 2, 30.000000000000000 },
-  { 0.014416954021198941, 2, 35.000000000000000 },
-  { -0.017342392966988262, 2, 40.000000000000000 },
-  { -0.019659208725359461, 2, 45.000000000000000 },
-  { 0.0040832408433991458, 2, 50.000000000000000 },
-  { 0.018137395757214285, 2, 55.000000000000000 },
-  { 0.0058696210212009327, 2, 60.000000000000000 },
-  { -0.012312033441295490, 2, 65.000000000000000 },
-  { -0.011436558892819550, 2, 70.000000000000000 },
-  { 0.0046760635699762939, 2, 75.000000000000000 },
-  { 0.012469528628260161, 2, 80.000000000000000 },
-  { 0.0024793554591234306, 2, 85.000000000000000 },
-  { -0.0097636640724538277, 2, 90.000000000000000 },
-  { -0.0074325547808517939, 2, 95.000000000000000 },
-  { 0.0048034416524879537, 2, 100.00000000000000 },
+// max(|f - f_GSL|): 1.0772632785815972e-15 at index 15
+// max(|f - f_GSL| / |f_GSL|): 3.4761702917932150e-13
+// mean(f - f_GSL): 2.9356064536917039e-17
+// variance(f - f_GSL): 1.2041524334573537e-32
+// stddev(f - f_GSL): 1.0973387961141963e-16
+const testcase_sph_bessel<double>
+data009[21] =
+{
+  { 0.0000000000000000, 2, 0.0000000000000000, 0.0 },
+  { 0.13473121008512520, 2, 5.0000000000000000, 0.0 },
+  { 0.077942193628562445, 2, 10.000000000000000, 0.0 },
+  { -0.032645316869994966, 2, 15.000000000000000, 0.0 },
+  { -0.048365523530958965, 2, 20.000000000000000, 0.0 },
+  { 0.00051088497094747614, 2, 25.000000000000000, 0.0 },
+  { 0.032310434678570907, 2, 30.000000000000000, 0.0 },
+  { 0.014416954021198941, 2, 35.000000000000000, 0.0 },
+  { -0.017342392966988262, 2, 40.000000000000000, 0.0 },
+  { -0.019659208725359461, 2, 45.000000000000000, 0.0 },
+  { 0.0040832408433991458, 2, 50.000000000000000, 0.0 },
+  { 0.018137395757214285, 2, 55.000000000000000, 0.0 },
+  { 0.0058696210212009327, 2, 60.000000000000000, 0.0 },
+  { -0.012312033441295490, 2, 65.000000000000000, 0.0 },
+  { -0.011436558892819550, 2, 70.000000000000000, 0.0 },
+  { 0.0046760635699762939, 2, 75.000000000000000, 0.0 },
+  { 0.012469528628260161, 2, 80.000000000000000, 0.0 },
+  { 0.0024793554591234306, 2, 85.000000000000000, 0.0 },
+  { -0.0097636640724538277, 2, 90.000000000000000, 0.0 },
+  { -0.0074325547808517939, 2, 95.000000000000000, 0.0 },
+  { 0.0048034416524879537, 2, 100.00000000000000, 0.0 },
 };
-
-// Test function for n=2.
-template<typename Tp>
-  void
-  test009()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data009)
-                          / sizeof(testcase_sph_bessel<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_bessel(Tp(data009[i].n), Tp(data009[i].x));
-       const Tp f0 = data009[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-  }
+const double toler009 = 2.5000000000000014e-11;
 
 // Test data for n=5.
-testcase_sph_bessel<double> data010[] = {
-  { 0.0000000000000000, 5, 0.0000000000000000 },
-  { 0.10681116145650453, 5, 5.0000000000000000 },
-  { -0.055534511621452155, 5, 10.000000000000000 },
-  { 0.065968007076521951, 5, 15.000000000000000 },
-  { 0.016683908063095682, 5, 20.000000000000000 },
-  { -0.036117795989722382, 5, 25.000000000000000 },
-  { -0.020504008736827489, 5, 30.000000000000000 },
-  { 0.018499481206814560, 5, 35.000000000000000 },
-  { 0.022448773791044995, 5, 40.000000000000000 },
-  { -0.0048552694845020138, 5, 45.000000000000000 },
-  { -0.020048300563664877, 5, 50.000000000000000 },
-  { -0.0052999924455565742, 5, 55.000000000000000 },
-  { 0.014151556281331407, 5, 60.000000000000000 },
-  { 0.011354588594416780, 5, 65.000000000000000 },
-  { -0.0064983781785323573, 5, 70.000000000000000 },
-  { -0.013089909320064257, 5, 75.000000000000000 },
-  { -0.00096200450071302446, 5, 80.000000000000000 },
-  { 0.011048668899130202, 5, 85.000000000000000 },
-  { 0.0065639581708136037, 5, 90.000000000000000 },
-  { -0.0064646119368202771, 5, 95.000000000000000 },
-  { -0.0092901489349075730, 5, 100.00000000000000 },
+// max(|f - f_GSL|): 9.4629165614534827e-16 at index 14
+// max(|f - f_GSL| / |f_GSL|): 8.4323936619049507e-13
+// mean(f - f_GSL): 4.3853396443294642e-17
+// variance(f - f_GSL): 1.4779322601100139e-33
+// stddev(f - f_GSL): 3.8443884560616579e-17
+const testcase_sph_bessel<double>
+data010[21] =
+{
+  { 0.0000000000000000, 5, 0.0000000000000000, 0.0 },
+  { 0.10681116145650453, 5, 5.0000000000000000, 0.0 },
+  { -0.055534511621452155, 5, 10.000000000000000, 0.0 },
+  { 0.065968007076521951, 5, 15.000000000000000, 0.0 },
+  { 0.016683908063095682, 5, 20.000000000000000, 0.0 },
+  { -0.036117795989722382, 5, 25.000000000000000, 0.0 },
+  { -0.020504008736827489, 5, 30.000000000000000, 0.0 },
+  { 0.018499481206814560, 5, 35.000000000000000, 0.0 },
+  { 0.022448773791044995, 5, 40.000000000000000, 0.0 },
+  { -0.0048552694845020129, 5, 45.000000000000000, 0.0 },
+  { -0.020048300563664877, 5, 50.000000000000000, 0.0 },
+  { -0.0052999924455565742, 5, 55.000000000000000, 0.0 },
+  { 0.014151556281331407, 5, 60.000000000000000, 0.0 },
+  { 0.011354588594416778, 5, 65.000000000000000, 0.0 },
+  { -0.0064983781785323573, 5, 70.000000000000000, 0.0 },
+  { -0.013089909320064257, 5, 75.000000000000000, 0.0 },
+  { -0.00096200450071302446, 5, 80.000000000000000, 0.0 },
+  { 0.011048668899130202, 5, 85.000000000000000, 0.0 },
+  { 0.0065639581708136045, 5, 90.000000000000000, 0.0 },
+  { -0.0064646119368202771, 5, 95.000000000000000, 0.0 },
+  { -0.0092901489349075713, 5, 100.00000000000000, 0.0 },
 };
-
-// Test function for n=5.
-template<typename Tp>
-  void
-  test010()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data010)
-                          / sizeof(testcase_sph_bessel<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_bessel(Tp(data010[i].n), Tp(data010[i].x));
-       const Tp f0 = data010[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000028e-11));
-  }
+const double toler010 = 5.0000000000000028e-11;
 
 // Test data for n=10.
-testcase_sph_bessel<double> data011[] = {
-  { 0.0000000000000000, 10, 0.0000000000000000 },
-  { 0.00040734424424946052, 10, 5.0000000000000000 },
-  { 0.064605154492564265, 10, 10.000000000000000 },
-  { 0.0018969790010883577, 10, 15.000000000000000 },
-  { 0.039686698644626366, 10, 20.000000000000000 },
-  { -0.036253285601128581, 10, 25.000000000000000 },
-  { -0.014529646403897799, 10, 30.000000000000000 },
-  { 0.026281264603993857, 10, 35.000000000000000 },
-  { 0.013124803182748323, 10, 40.000000000000000 },
-  { -0.017600831383728983, 10, 45.000000000000000 },
-  { -0.015039221463465955, 10, 50.000000000000000 },
-  { 0.0095256289349167390, 10, 55.000000000000000 },
-  { 0.015822719394008339, 10, 60.000000000000000 },
-  { -0.0019391391708249756, 10, 65.000000000000000 },
-  { -0.014293389028395012, 10, 70.000000000000000 },
-  { -0.0044210285031696227, 10, 75.000000000000000 },
-  { 0.010516146958338813, 10, 80.000000000000000 },
-  { 0.0086736275131325726, 10, 85.000000000000000 },
-  { -0.0052905066357239322, 10, 90.000000000000000 },
-  { -0.010258326955210768, 10, 95.000000000000000 },
-  { -0.00019565785971342419, 10, 100.00000000000000 },
+// max(|f - f_GSL|): 1.1999949645069563e-15 at index 13
+// max(|f - f_GSL| / |f_GSL|): 2.9533832871668437e-12
+// mean(f - f_GSL): 4.3565566580837178e-17
+// variance(f - f_GSL): 1.4986791255793479e-32
+// stddev(f - f_GSL): 1.2242055079027163e-16
+const testcase_sph_bessel<double>
+data011[21] =
+{
+  { 0.0000000000000000, 10, 0.0000000000000000, 0.0 },
+  { 0.00040734424424946052, 10, 5.0000000000000000, 0.0 },
+  { 0.064605154492564265, 10, 10.000000000000000, 0.0 },
+  { 0.0018969790010883577, 10, 15.000000000000000, 0.0 },
+  { 0.039686698644626366, 10, 20.000000000000000, 0.0 },
+  { -0.036253285601128581, 10, 25.000000000000000, 0.0 },
+  { -0.014529646403897799, 10, 30.000000000000000, 0.0 },
+  { 0.026281264603993857, 10, 35.000000000000000, 0.0 },
+  { 0.013124803182748323, 10, 40.000000000000000, 0.0 },
+  { -0.017600831383728980, 10, 45.000000000000000, 0.0 },
+  { -0.015039221463465955, 10, 50.000000000000000, 0.0 },
+  { 0.0095256289349167390, 10, 55.000000000000000, 0.0 },
+  { 0.015822719394008339, 10, 60.000000000000000, 0.0 },
+  { -0.0019391391708249754, 10, 65.000000000000000, 0.0 },
+  { -0.014293389028395012, 10, 70.000000000000000, 0.0 },
+  { -0.0044210285031696227, 10, 75.000000000000000, 0.0 },
+  { 0.010516146958338813, 10, 80.000000000000000, 0.0 },
+  { 0.0086736275131325726, 10, 85.000000000000000, 0.0 },
+  { -0.0052905066357239331, 10, 90.000000000000000, 0.0 },
+  { -0.010258326955210768, 10, 95.000000000000000, 0.0 },
+  { -0.00019565785971342414, 10, 100.00000000000000, 0.0 },
 };
-
-// Test function for n=10.
-template<typename Tp>
-  void
-  test011()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data011)
-                          / sizeof(testcase_sph_bessel<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_bessel(Tp(data011[i].n), Tp(data011[i].x));
-       const Tp f0 = data011[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000017e-10));
-  }
+const double toler011 = 2.5000000000000017e-10;
 
 // Test data for n=20.
-testcase_sph_bessel<double> data012[] = {
-  { 0.0000000000000000, 20, 0.0000000000000000 },
-  { 5.4277267607932098e-12, 20, 5.0000000000000000 },
-  { 2.3083719613194670e-06, 20, 10.000000000000000 },
-  { 0.0015467058510412498, 20, 15.000000000000000 },
-  { 0.038324851639805160, 20, 20.000000000000000 },
-  { 0.028500071484154645, 20, 25.000000000000000 },
-  { -0.014711593353429081, 20, 30.000000000000000 },
-  { -0.010797653070264229, 20, 35.000000000000000 },
-  { 0.026535391837540293, 20, 40.000000000000000 },
-  { -0.011582959134716393, 20, 45.000000000000000 },
-  { -0.015785029898269291, 20, 50.000000000000000 },
-  { 0.013885519185862741, 20, 55.000000000000000 },
-  { 0.011112458964023273, 20, 60.000000000000000 },
-  { -0.011938384963927570, 20, 65.000000000000000 },
-  { -0.010117695207156904, 20, 70.000000000000000 },
-  { 0.0089871214102383232, 20, 75.000000000000000 },
-  { 0.010400578884991936, 20, 80.000000000000000 },
-  { -0.0055359020656326700, 20, 85.000000000000000 },
-  { -0.010639343320787521, 20, 90.000000000000000 },
-  { 0.0018051661455979529, 20, 95.000000000000000 },
-  { 0.010107671283873056, 20, 100.00000000000000 },
+// max(|f - f_GSL|): 8.5435131191857749e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 2.3195586735048320e-13
+// mean(f - f_GSL): 8.6950352153253420e-18
+// variance(f - f_GSL): 1.4336055666601385e-36
+// stddev(f - f_GSL): 1.1973326883786889e-18
+const testcase_sph_bessel<double>
+data012[21] =
+{
+  { 0.0000000000000000, 20, 0.0000000000000000, 0.0 },
+  { 5.4277267607932098e-12, 20, 5.0000000000000000, 0.0 },
+  { 2.3083719613194670e-06, 20, 10.000000000000000, 0.0 },
+  { 0.0015467058510412498, 20, 15.000000000000000, 0.0 },
+  { 0.038324851639805160, 20, 20.000000000000000, 0.0 },
+  { 0.028500071484154645, 20, 25.000000000000000, 0.0 },
+  { -0.014711593353429081, 20, 30.000000000000000, 0.0 },
+  { -0.010797653070264229, 20, 35.000000000000000, 0.0 },
+  { 0.026535391837540293, 20, 40.000000000000000, 0.0 },
+  { -0.011582959134716391, 20, 45.000000000000000, 0.0 },
+  { -0.015785029898269291, 20, 50.000000000000000, 0.0 },
+  { 0.013885519185862741, 20, 55.000000000000000, 0.0 },
+  { 0.011112458964023273, 20, 60.000000000000000, 0.0 },
+  { -0.011938384963927568, 20, 65.000000000000000, 0.0 },
+  { -0.010117695207156904, 20, 70.000000000000000, 0.0 },
+  { 0.0089871214102383232, 20, 75.000000000000000, 0.0 },
+  { 0.010400578884991936, 20, 80.000000000000000, 0.0 },
+  { -0.0055359020656326700, 20, 85.000000000000000, 0.0 },
+  { -0.010639343320787522, 20, 90.000000000000000, 0.0 },
+  { 0.0018051661455979529, 20, 95.000000000000000, 0.0 },
+  { 0.010107671283873054, 20, 100.00000000000000, 0.0 },
 };
-
-// Test function for n=20.
-template<typename Tp>
-  void
-  test012()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data012)
-                          / sizeof(testcase_sph_bessel<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_bessel(Tp(data012[i].n), Tp(data012[i].x));
-       const Tp f0 = data012[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-  }
+const double toler012 = 2.5000000000000014e-11;
 
 // Test data for n=50.
-testcase_sph_bessel<double> data013[] = {
-  { 0.0000000000000000, 50, 0.0000000000000000 },
-  { 2.8574793504401511e-46, 50, 5.0000000000000000 },
-  { 2.2306960232186471e-31, 50, 10.000000000000000 },
-  { 7.6804716640080804e-23, 50, 15.000000000000000 },
-  { 5.6500807918725220e-17, 50, 20.000000000000000 },
-  { 1.2540416973758975e-12, 50, 25.000000000000000 },
-  { 2.6901637185735326e-09, 50, 30.000000000000000 },
-  { 1.0167148174422245e-06, 50, 35.000000000000000 },
-  { 9.3949174038179069e-05, 50, 40.000000000000000 },
-  { 0.0024888927213794561, 50, 45.000000000000000 },
-  { 0.018829107369282647, 50, 50.000000000000000 },
-  { 0.026373198438145489, 50, 55.000000000000000 },
-  { -0.021230978268739001, 50, 60.000000000000000 },
-  { 0.016539881802291313, 50, 65.000000000000000 },
-  { -0.015985416061436664, 50, 70.000000000000000 },
-  { 0.015462548984405590, 50, 75.000000000000000 },
-  { -0.010638570118081819, 50, 80.000000000000000 },
-  { 0.00046961239784540793, 50, 85.000000000000000 },
-  { 0.0096065882189920251, 50, 90.000000000000000 },
-  { -0.010613873910261154, 50, 95.000000000000000 },
-  { 0.00057971408822774949, 50, 100.00000000000000 },
+// max(|f - f_GSL|): 9.7366776100060726e-16 at index 17
+// max(|f - f_GSL| / |f_GSL|): 2.0733433901400738e-12
+// mean(f - f_GSL): 7.9976407365692512e-18
+// variance(f - f_GSL): 4.9608706858434859e-33
+// stddev(f - f_GSL): 7.0433448629493399e-17
+const testcase_sph_bessel<double>
+data013[21] =
+{
+  { 0.0000000000000000, 50, 0.0000000000000000, 0.0 },
+  { 2.8574793504401518e-46, 50, 5.0000000000000000, 0.0 },
+  { 2.2306960232186480e-31, 50, 10.000000000000000, 0.0 },
+  { 7.6804716640080804e-23, 50, 15.000000000000000, 0.0 },
+  { 5.6500807918725220e-17, 50, 20.000000000000000, 0.0 },
+  { 1.2540416973758975e-12, 50, 25.000000000000000, 0.0 },
+  { 2.6901637185735326e-09, 50, 30.000000000000000, 0.0 },
+  { 1.0167148174422245e-06, 50, 35.000000000000000, 0.0 },
+  { 9.3949174038179069e-05, 50, 40.000000000000000, 0.0 },
+  { 0.0024888927213794557, 50, 45.000000000000000, 0.0 },
+  { 0.018829107369282647, 50, 50.000000000000000, 0.0 },
+  { 0.026373198438145489, 50, 55.000000000000000, 0.0 },
+  { -0.021230978268739001, 50, 60.000000000000000, 0.0 },
+  { 0.016539881802291313, 50, 65.000000000000000, 0.0 },
+  { -0.015985416061436664, 50, 70.000000000000000, 0.0 },
+  { 0.015462548984405590, 50, 75.000000000000000, 0.0 },
+  { -0.010638570118081819, 50, 80.000000000000000, 0.0 },
+  { 0.00046961239784540793, 50, 85.000000000000000, 0.0 },
+  { 0.0096065882189920251, 50, 90.000000000000000, 0.0 },
+  { -0.010613873910261154, 50, 95.000000000000000, 0.0 },
+  { 0.00057971408822774927, 50, 100.00000000000000, 0.0 },
 };
-
-// Test function for n=50.
-template<typename Tp>
-  void
-  test013()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data013)
-                          / sizeof(testcase_sph_bessel<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_bessel(Tp(data013[i].n), Tp(data013[i].x));
-       const Tp f0 = data013[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000017e-10));
-  }
+const double toler013 = 2.5000000000000017e-10;
 
 // Test data for n=100.
-testcase_sph_bessel<double> data014[] = {
-  { 0.0000000000000000, 100, 0.0000000000000000 },
-  { 5.5356503033889938e-120, 100, 5.0000000000000000 },
-  { 5.8320401820058771e-90, 100, 10.000000000000000 },
-  { 1.7406387750766626e-72, 100, 15.000000000000000 },
-  { 3.5152711125317012e-60, 100, 20.000000000000000 },
-  { 9.8455459353815965e-51, 100, 25.000000000000000 },
-  { 4.0888596744301583e-43, 100, 30.000000000000000 },
-  { 8.8975854911133939e-37, 100, 35.000000000000000 },
-  { 2.1513492547733828e-31, 100, 40.000000000000000 },
-  { 9.3673586994539108e-27, 100, 45.000000000000000 },
-  { 1.0190122629310471e-22, 100, 50.000000000000000 },
-  { 3.4887804977690388e-19, 100, 55.000000000000000 },
-  { 4.4442883425555593e-16, 100, 60.000000000000000 },
-  { 2.3832619568710728e-13, 100, 65.000000000000000 },
-  { 5.8948384175607987e-11, 100, 70.000000000000000 },
-  { 7.1884446357022277e-09, 100, 75.000000000000000 },
-  { 4.5247964400095002e-07, 100, 80.000000000000000 },
-  { 1.5096093228779032e-05, 100, 85.000000000000000 },
-  { 0.00026825172647807507, 100, 90.000000000000000 },
-  { 0.0024744308520581117, 100, 95.000000000000000 },
-  { 0.010880477011438352, 100, 100.00000000000000 },
+// max(|f - f_GSL|): 3.2959746043559335e-17 at index 20
+// max(|f - f_GSL| / |f_GSL|): 8.7701893132122237e-14
+// mean(f - f_GSL): -1.3192742355211203e-18
+// variance(f - f_GSL): 5.2558771452351202e-35
+// stddev(f - f_GSL): 7.2497428542225690e-18
+const testcase_sph_bessel<double>
+data014[21] =
+{
+  { 0.0000000000000000, 100, 0.0000000000000000, 0.0 },
+  { 5.5356503033889931e-120, 100, 5.0000000000000000, 0.0 },
+  { 5.8320401820058771e-90, 100, 10.000000000000000, 0.0 },
+  { 1.7406387750766626e-72, 100, 15.000000000000000, 0.0 },
+  { 3.5152711125317012e-60, 100, 20.000000000000000, 0.0 },
+  { 9.8455459353815965e-51, 100, 25.000000000000000, 0.0 },
+  { 4.0888596744301583e-43, 100, 30.000000000000000, 0.0 },
+  { 8.8975854911133939e-37, 100, 35.000000000000000, 0.0 },
+  { 2.1513492547733828e-31, 100, 40.000000000000000, 0.0 },
+  { 9.3673586994539094e-27, 100, 45.000000000000000, 0.0 },
+  { 1.0190122629310471e-22, 100, 50.000000000000000, 0.0 },
+  { 3.4887804977690388e-19, 100, 55.000000000000000, 0.0 },
+  { 4.4442883425555593e-16, 100, 60.000000000000000, 0.0 },
+  { 2.3832619568710723e-13, 100, 65.000000000000000, 0.0 },
+  { 5.8948384175607987e-11, 100, 70.000000000000000, 0.0 },
+  { 7.1884446357022277e-09, 100, 75.000000000000000, 0.0 },
+  { 4.5247964400095002e-07, 100, 80.000000000000000, 0.0 },
+  { 1.5096093228779032e-05, 100, 85.000000000000000, 0.0 },
+  { 0.00026825172647807513, 100, 90.000000000000000, 0.0 },
+  { 0.0024744308520581117, 100, 95.000000000000000, 0.0 },
+  { 0.010880477011438350, 100, 100.00000000000000, 0.0 },
 };
+const double toler014 = 5.0000000000000029e-12;
 
-// Test function for n=100.
-template<typename Tp>
+template<typename Ret, unsigned int Num>
   void
-  test014()
+  test(const testcase_sph_bessel<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data014)
-                          / sizeof(testcase_sph_bessel<double>);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::tr1::sph_bessel(Tp(data014[i].n), Tp(data014[i].x));
-       const Tp f0 = data014[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::tr1::sph_bessel(data[i].n, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
       }
-    VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
+    VERIFY(max_abs_frac < toler);
   }
 
 int
 main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
   return 0;
 }
index 66a649d..e86b165 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  sph_legendre
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for l=0, m=0.
-testcase_sph_legendre<double> data001[] = {
-  { 0.28209479177387814, 0, 0,
-          0.0000000000000000 },
-  { 0.28209479177387814, 0, 0,
-          0.15707963267948966 },
-  { 0.28209479177387814, 0, 0,
-          0.31415926535897931 },
-  { 0.28209479177387814, 0, 0,
-          0.47123889803846897 },
-  { 0.28209479177387814, 0, 0,
-          0.62831853071795862 },
-  { 0.28209479177387814, 0, 0,
-          0.78539816339744828 },
-  { 0.28209479177387814, 0, 0,
-          0.94247779607693793 },
-  { 0.28209479177387814, 0, 0,
-          1.0995574287564276 },
-  { 0.28209479177387814, 0, 0,
-          1.2566370614359172 },
-  { 0.28209479177387814, 0, 0,
-          1.4137166941154069 },
-  { 0.28209479177387814, 0, 0,
-          1.5707963267948966 },
-  { 0.28209479177387814, 0, 0,
-          1.7278759594743860 },
-  { 0.28209479177387814, 0, 0,
-          1.8849555921538759 },
-  { 0.28209479177387814, 0, 0,
-          2.0420352248333655 },
-  { 0.28209479177387814, 0, 0,
-          2.1991148575128552 },
-  { 0.28209479177387814, 0, 0,
-          2.3561944901923448 },
-  { 0.28209479177387814, 0, 0,
-          2.5132741228718345 },
-  { 0.28209479177387814, 0, 0,
-          2.6703537555513241 },
-  { 0.28209479177387814, 0, 0,
-          2.8274333882308138 },
-  { 0.28209479177387814, 0, 0,
-          2.9845130209103035 },
-  { 0.28209479177387814, 0, 0,
-          3.1415926535897931 },
-};
-
-// Test function for l=0, m=0.
-template <typename Tp>
-void test001()
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_sph_legendre<double>
+data001[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data001)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data001[i].l), Tp(data001[i].m),
-                   Tp(data001[i].theta));
-      const Tp f0 = data001[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=1, m=0.
-testcase_sph_legendre<double> data002[] = {
-  { 0.48860251190291992, 1, 0,
-          0.0000000000000000 },
-  { 0.48258700419201100, 1, 0,
-          0.15707963267948966 },
-  { 0.46468860282345231, 1, 0,
-          0.31415926535897931 },
-  { 0.43534802584032634, 1, 0,
-          0.47123889803846897 },
-  { 0.39528773562374975, 1, 0,
-          0.62831853071795862 },
-  { 0.34549414947133544, 1, 0,
-          0.78539816339744828 },
-  { 0.28719335072959390, 1, 0,
-          0.94247779607693793 },
-  { 0.22182089855280451, 1, 0,
-          1.0995574287564276 },
-  { 0.15098647967228984, 1, 0,
-          1.2566370614359172 },
-  { 0.076434272566846345, 1, 0,
-          1.4137166941154069 },
-  { 2.9918275112863369e-17, 1, 0,
-          1.5707963267948966 },
-  { -0.076434272566846179, 1, 0,
-          1.7278759594743860 },
-  { -0.15098647967228976, 1, 0,
-          1.8849555921538759 },
-  { -0.22182089855280446, 1, 0,
-          2.0420352248333655 },
-  { -0.28719335072959390, 1, 0,
-          2.1991148575128552 },
-  { -0.34549414947133544, 1, 0,
-          2.3561944901923448 },
-  { -0.39528773562374969, 1, 0,
-          2.5132741228718345 },
-  { -0.43534802584032628, 1, 0,
-          2.6703537555513241 },
-  { -0.46468860282345231, 1, 0,
-          2.8274333882308138 },
-  { -0.48258700419201095, 1, 0,
-          2.9845130209103035 },
-  { -0.48860251190291992, 1, 0,
-          3.1415926535897931 },
+  { 0.28209479177387814, 0, 0, 
+         0.0000000000000000, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         0.15707963267948966, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         0.31415926535897931, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         0.47123889803846897, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         0.62831853071795862, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         0.78539816339744828, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         0.94247779607693793, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         1.0995574287564276, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         1.2566370614359172, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         1.4137166941154069, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         1.5707963267948966, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         1.7278759594743862, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         1.8849555921538759, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         2.0420352248333655, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         2.1991148575128552, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         2.3561944901923448, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         2.5132741228718345, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         2.6703537555513241, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         2.8274333882308138, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         2.9845130209103035, 0.0 },
+  { 0.28209479177387814, 0, 0, 
+         3.1415926535897931, 0.0 },
 };
+const double toler001 = 2.5000000000000020e-13;
 
-// Test function for l=1, m=0.
-template <typename Tp>
-void test002()
+// Test data for l=1, m=0.
+// max(|f - f_GSL|): 0.0000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_sph_legendre<double>
+data002[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data002)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data002[i].l), Tp(data002[i].m),
-                   Tp(data002[i].theta));
-      const Tp f0 = data002[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=1, m=1.
-testcase_sph_legendre<double> data003[] = {
-  { 0.0000000000000000, 1, 1,
-          0.0000000000000000 },
-  { -0.054047192447077917, 1, 1,
-          0.15707963267948966 },
-  { -0.10676356364376104, 1, 1,
-          0.31415926535897931 },
-  { -0.15685106157558129, 1, 1,
-          0.47123889803846897 },
-  { -0.20307636581258243, 1, 1,
-          0.62831853071795862 },
-  { -0.24430125595146013, 1, 1,
-          0.78539816339744828 },
-  { -0.27951063837942880, 1, 1,
-          0.94247779607693793 },
-  { -0.30783754124787122, 1, 1,
-          1.0995574287564276 },
-  { -0.32858446219656551, 1, 1,
-          1.2566370614359172 },
-  { -0.34124054317667202, 1, 1,
-          1.4137166941154069 },
-  { -0.34549414947133567, 1, 1,
-          1.5707963267948966 },
-  { -0.34124054317667202, 1, 1,
-          1.7278759594743860 },
-  { -0.32858446219656556, 1, 1,
-          1.8849555921538759 },
-  { -0.30783754124787127, 1, 1,
-          2.0420352248333655 },
-  { -0.27951063837942880, 1, 1,
-          2.1991148575128552 },
-  { -0.24430125595146013, 1, 1,
-          2.3561944901923448 },
-  { -0.20307636581258248, 1, 1,
-          2.5132741228718345 },
-  { -0.15685106157558140, 1, 1,
-          2.6703537555513241 },
-  { -0.10676356364376104, 1, 1,
-          2.8274333882308138 },
-  { -0.054047192447078167, 1, 1,
-          2.9845130209103035 },
-  { 0.0000000000000000, 1, 1,
-          3.1415926535897931 },
+  { 0.48860251190291992, 1, 0, 
+         0.0000000000000000, 0.0 },
+  { 0.48258700419201095, 1, 0, 
+         0.15707963267948966, 0.0 },
+  { 0.46468860282345237, 1, 0, 
+         0.31415926535897931, 0.0 },
+  { 0.43534802584032634, 1, 0, 
+         0.47123889803846897, 0.0 },
+  { 0.39528773562374969, 1, 0, 
+         0.62831853071795862, 0.0 },
+  { 0.34549414947133550, 1, 0, 
+         0.78539816339744828, 0.0 },
+  { 0.28719335072959395, 1, 0, 
+         0.94247779607693793, 0.0 },
+  { 0.22182089855280449, 1, 0, 
+         1.0995574287564276, 0.0 },
+  { 0.15098647967228981, 1, 0, 
+         1.2566370614359172, 0.0 },
+  { 0.076434272566846345, 1, 0, 
+         1.4137166941154069, 0.0 },
+  { 2.9918275112863332e-17, 1, 0, 
+         1.5707963267948966, 0.0 },
+  { -0.076434272566846290, 1, 0, 
+         1.7278759594743862, 0.0 },
+  { -0.15098647967228976, 1, 0, 
+         1.8849555921538759, 0.0 },
+  { -0.22182089855280446, 1, 0, 
+         2.0420352248333655, 0.0 },
+  { -0.28719335072959384, 1, 0, 
+         2.1991148575128552, 0.0 },
+  { -0.34549414947133544, 1, 0, 
+         2.3561944901923448, 0.0 },
+  { -0.39528773562374975, 1, 0, 
+         2.5132741228718345, 0.0 },
+  { -0.43534802584032628, 1, 0, 
+         2.6703537555513241, 0.0 },
+  { -0.46468860282345231, 1, 0, 
+         2.8274333882308138, 0.0 },
+  { -0.48258700419201095, 1, 0, 
+         2.9845130209103035, 0.0 },
+  { -0.48860251190291992, 1, 0, 
+         3.1415926535897931, 0.0 },
 };
+const double toler002 = 2.5000000000000020e-13;
 
-// Test function for l=1, m=1.
-template <typename Tp>
-void test003()
+// Test data for l=1, m=1.
+// max(|f - f_GSL|): 1.9984014443252818e-15 at index 9
+// max(|f - f_GSL| / |f_GSL|): 5.9507621559271917e-15
+// mean(f - f_GSL): 1.1981156807413147e-15
+// variance(f - f_GSL): 7.5362762183006766e-32
+// stddev(f - f_GSL): 2.7452278991553101e-16
+const testcase_sph_legendre<double>
+data003[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data003)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data003[i].l), Tp(data003[i].m),
-                   Tp(data003[i].theta));
-      const Tp f0 = data003[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=2, m=0.
-testcase_sph_legendre<double> data004[] = {
-  { 0.63078313050504009, 2, 0,
-          0.0000000000000000 },
-  { 0.60762858760316607, 2, 0,
-          0.15707963267948966 },
-  { 0.54043148688396569, 2, 0,
-          0.31415926535897931 },
-  { 0.43576954875556589, 2, 0,
-          0.47123889803846897 },
-  { 0.30388781294457579, 2, 0,
-          0.62831853071795862 },
-  { 0.15769578262625994, 2, 0,
-          0.78539816339744828 },
-  { 0.011503752307944235, 2, 0,
-          0.94247779607693793 },
-  { -0.12037798350304565, 2, 0,
-          1.0995574287564276 },
-  { -0.22503992163144573, 2, 0,
-          1.2566370614359172 },
-  { -0.29223702235064597, 2, 0,
-          1.4137166941154069 },
-  { -0.31539156525252005, 2, 0,
-          1.5707963267948966 },
-  { -0.29223702235064608, 2, 0,
-          1.7278759594743860 },
-  { -0.22503992163144584, 2, 0,
-          1.8849555921538759 },
-  { -0.12037798350304577, 2, 0,
-          2.0420352248333655 },
-  { 0.011503752307944235, 2, 0,
-          2.1991148575128552 },
-  { 0.15769578262625994, 2, 0,
-          2.3561944901923448 },
-  { 0.30388781294457567, 2, 0,
-          2.5132741228718345 },
-  { 0.43576954875556562, 2, 0,
-          2.6703537555513241 },
-  { 0.54043148688396569, 2, 0,
-          2.8274333882308138 },
-  { 0.60762858760316585, 2, 0,
-          2.9845130209103035 },
-  { 0.63078313050504009, 2, 0,
-          3.1415926535897931 },
+  { 0.0000000000000000, 1, 1, 
+         0.0000000000000000, 0.0 },
+  { -0.054047192447078167, 1, 1, 
+         0.15707963267948966, 0.0 },
+  { -0.10676356364376091, 1, 1, 
+         0.31415926535897931, 0.0 },
+  { -0.15685106157558129, 1, 1, 
+         0.47123889803846897, 0.0 },
+  { -0.20307636581258248, 1, 1, 
+         0.62831853071795862, 0.0 },
+  { -0.24430125595146007, 1, 1, 
+         0.78539816339744828, 0.0 },
+  { -0.27951063837942880, 1, 1, 
+         0.94247779607693793, 0.0 },
+  { -0.30783754124787122, 1, 1, 
+         1.0995574287564276, 0.0 },
+  { -0.32858446219656556, 1, 1, 
+         1.2566370614359172, 0.0 },
+  { -0.34124054317667202, 1, 1, 
+         1.4137166941154069, 0.0 },
+  { -0.34549414947133567, 1, 1, 
+         1.5707963267948966, 0.0 },
+  { -0.34124054317667202, 1, 1, 
+         1.7278759594743862, 0.0 },
+  { -0.32858446219656556, 1, 1, 
+         1.8849555921538759, 0.0 },
+  { -0.30783754124787127, 1, 1, 
+         2.0420352248333655, 0.0 },
+  { -0.27951063837942880, 1, 1, 
+         2.1991148575128552, 0.0 },
+  { -0.24430125595146013, 1, 1, 
+         2.3561944901923448, 0.0 },
+  { -0.20307636581258243, 1, 1, 
+         2.5132741228718345, 0.0 },
+  { -0.15685106157558140, 1, 1, 
+         2.6703537555513241, 0.0 },
+  { -0.10676356364376104, 1, 1, 
+         2.8274333882308138, 0.0 },
+  { -0.054047192447078167, 1, 1, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 1, 1, 
+         3.1415926535897931, 0.0 },
 };
+const double toler003 = 5.0000000000000039e-13;
 
-// Test function for l=2, m=0.
-template <typename Tp>
-void test004()
+// Test data for l=2, m=0.
+// max(|f - f_GSL|): 1.1102230246251565e-16 at index 0
+// max(|f - f_GSL| / |f_GSL|): 3.1667226501700652e-15
+// mean(f - f_GSL): -3.0233752009881492e-17
+// variance(f - f_GSL): 3.4265646892248527e-34
+// stddev(f - f_GSL): 1.8510982386747748e-17
+const testcase_sph_legendre<double>
+data004[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data004)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data004[i].l), Tp(data004[i].m),
-                   Tp(data004[i].theta));
-      const Tp f0 = data004[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=2, m=1.
-testcase_sph_legendre<double> data005[] = {
-  { 0.0000000000000000, 2, 1,
-          0.0000000000000000 },
-  { -0.11936529291378727, 2, 1,
-          0.15707963267948966 },
-  { -0.22704627929027449, 2, 1,
-          0.31415926535897931 },
-  { -0.31250239392538215, 2, 1,
-          0.47123889803846897 },
-  { -0.36736859691086526, 2, 1,
-          0.62831853071795862 },
-  { -0.38627420202318979, 2, 1,
-          0.78539816339744828 },
-  { -0.36736859691086526, 2, 1,
-          0.94247779607693793 },
-  { -0.31250239392538226, 2, 1,
-          1.0995574287564276 },
-  { -0.22704627929027435, 2, 1,
-          1.2566370614359172 },
-  { -0.11936529291378740, 2, 1,
-          1.4137166941154069 },
-  { -4.7304946510089748e-17, 2, 1,
-          1.5707963267948966 },
-  { 0.11936529291378714, 2, 1,
-          1.7278759594743860 },
-  { 0.22704627929027429, 2, 1,
-          1.8849555921538759 },
-  { 0.31250239392538226, 2, 1,
-          2.0420352248333655 },
-  { 0.36736859691086526, 2, 1,
-          2.1991148575128552 },
-  { 0.38627420202318979, 2, 1,
-          2.3561944901923448 },
-  { 0.36736859691086526, 2, 1,
-          2.5132741228718345 },
-  { 0.31250239392538232, 2, 1,
-          2.6703537555513241 },
-  { 0.22704627929027449, 2, 1,
-          2.8274333882308138 },
-  { 0.11936529291378781, 2, 1,
-          2.9845130209103035 },
-  { 0.0000000000000000, 2, 1,
-          3.1415926535897931 },
+  { 0.63078313050504009, 2, 0, 
+         0.0000000000000000, 0.0 },
+  { 0.60762858760316585, 2, 0, 
+         0.15707963267948966, 0.0 },
+  { 0.54043148688396603, 2, 0, 
+         0.31415926535897931, 0.0 },
+  { 0.43576954875556589, 2, 0, 
+         0.47123889803846897, 0.0 },
+  { 0.30388781294457567, 2, 0, 
+         0.62831853071795862, 0.0 },
+  { 0.15769578262626011, 2, 0, 
+         0.78539816339744828, 0.0 },
+  { 0.011503752307944374, 2, 0, 
+         0.94247779607693793, 0.0 },
+  { -0.12037798350304570, 2, 0, 
+         1.0995574287564276, 0.0 },
+  { -0.22503992163144576, 2, 0, 
+         1.2566370614359172, 0.0 },
+  { -0.29223702235064597, 2, 0, 
+         1.4137166941154069, 0.0 },
+  { -0.31539156525252005, 2, 0, 
+         1.5707963267948966, 0.0 },
+  { -0.29223702235064597, 2, 0, 
+         1.7278759594743862, 0.0 },
+  { -0.22503992163144584, 2, 0, 
+         1.8849555921538759, 0.0 },
+  { -0.12037798350304577, 2, 0, 
+         2.0420352248333655, 0.0 },
+  { 0.011503752307944164, 2, 0, 
+         2.1991148575128552, 0.0 },
+  { 0.15769578262625994, 2, 0, 
+         2.3561944901923448, 0.0 },
+  { 0.30388781294457579, 2, 0, 
+         2.5132741228718345, 0.0 },
+  { 0.43576954875556562, 2, 0, 
+         2.6703537555513241, 0.0 },
+  { 0.54043148688396569, 2, 0, 
+         2.8274333882308138, 0.0 },
+  { 0.60762858760316585, 2, 0, 
+         2.9845130209103035, 0.0 },
+  { 0.63078313050504009, 2, 0, 
+         3.1415926535897931, 0.0 },
 };
+const double toler004 = 2.5000000000000020e-13;
 
-// Test function for l=2, m=1.
-template <typename Tp>
-void test005()
+// Test data for l=2, m=1.
+// max(|f - f_GSL|): 2.2204460492503131e-15 at index 5
+// max(|f - f_GSL| / |f_GSL|): 5.9294218689659490e-15
+// mean(f - f_GSL): 6.6084703846736834e-19
+// variance(f - f_GSL): 2.2927737433182295e-38
+// stddev(f - f_GSL): 1.5141907882820546e-19
+const testcase_sph_legendre<double>
+data005[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data005)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data005[i].l), Tp(data005[i].m),
-                   Tp(data005[i].theta));
-      const Tp f0 = data005[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=2, m=2.
-testcase_sph_legendre<double> data006[] = {
-  { 0.0000000000000000, 2, 2,
-          0.0000000000000000 },
-  { 0.0094528025561622549, 2, 2,
-          0.15707963267948966 },
-  { 0.036885904048903795, 2, 2,
-          0.31415926535897931 },
-  { 0.079613961366457681, 2, 2,
-          0.47123889803846897 },
-  { 0.13345445455470123, 2, 2,
-          0.62831853071795862 },
-  { 0.19313710101159492, 2, 2,
-          0.78539816339744828 },
-  { 0.25281974746848851, 2, 2,
-          0.94247779607693793 },
-  { 0.30666024065673203, 2, 2,
-          1.0995574287564276 },
-  { 0.34938829797428600, 2, 2,
-          1.2566370614359172 },
-  { 0.37682139946702747, 2, 2,
-          1.4137166941154069 },
-  { 0.38627420202318979, 2, 2,
-          1.5707963267948966 },
-  { 0.37682139946702753, 2, 2,
-          1.7278759594743860 },
-  { 0.34938829797428606, 2, 2,
-          1.8849555921538759 },
-  { 0.30666024065673209, 2, 2,
-          2.0420352248333655 },
-  { 0.25281974746848851, 2, 2,
-          2.1991148575128552 },
-  { 0.19313710101159492, 2, 2,
-          2.3561944901923448 },
-  { 0.13345445455470126, 2, 2,
-          2.5132741228718345 },
-  { 0.079613961366457764, 2, 2,
-          2.6703537555513241 },
-  { 0.036885904048903795, 2, 2,
-          2.8274333882308138 },
-  { 0.0094528025561623433, 2, 2,
-          2.9845130209103035 },
-  { 0.0000000000000000, 2, 2,
-          3.1415926535897931 },
+  { 0.0000000000000000, 2, 1, 
+         0.0000000000000000, 0.0 },
+  { -0.11936529291378781, 2, 1, 
+         0.15707963267948966, 0.0 },
+  { -0.22704627929027421, 2, 1, 
+         0.31415926535897931, 0.0 },
+  { -0.31250239392538215, 2, 1, 
+         0.47123889803846897, 0.0 },
+  { -0.36736859691086526, 2, 1, 
+         0.62831853071795862, 0.0 },
+  { -0.38627420202318979, 2, 1, 
+         0.78539816339744828, 0.0 },
+  { -0.36736859691086532, 2, 1, 
+         0.94247779607693793, 0.0 },
+  { -0.31250239392538226, 2, 1, 
+         1.0995574287564276, 0.0 },
+  { -0.22704627929027438, 2, 1, 
+         1.2566370614359172, 0.0 },
+  { -0.11936529291378740, 2, 1, 
+         1.4137166941154069, 0.0 },
+  { -4.7304946510089680e-17, 2, 1, 
+         1.5707963267948966, 0.0 },
+  { 0.11936529291378731, 2, 1, 
+         1.7278759594743862, 0.0 },
+  { 0.22704627929027429, 2, 1, 
+         1.8849555921538759, 0.0 },
+  { 0.31250239392538226, 2, 1, 
+         2.0420352248333655, 0.0 },
+  { 0.36736859691086521, 2, 1, 
+         2.1991148575128552, 0.0 },
+  { 0.38627420202318979, 2, 1, 
+         2.3561944901923448, 0.0 },
+  { 0.36736859691086526, 2, 1, 
+         2.5132741228718345, 0.0 },
+  { 0.31250239392538232, 2, 1, 
+         2.6703537555513241, 0.0 },
+  { 0.22704627929027449, 2, 1, 
+         2.8274333882308138, 0.0 },
+  { 0.11936529291378781, 2, 1, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 2, 1, 
+         3.1415926535897931, 0.0 },
 };
+const double toler005 = 5.0000000000000039e-13;
 
-// Test function for l=2, m=2.
-template <typename Tp>
-void test006()
+// Test data for l=2, m=2.
+// max(|f - f_GSL|): 2.2759572004815709e-15 at index 10
+// max(|f - f_GSL| / |f_GSL|): 6.0197685443914339e-15
+// mean(f - f_GSL): -1.0489294618073093e-15
+// variance(f - f_GSL): 5.7763283331987012e-32
+// stddev(f - f_GSL): 2.4033993287006430e-16
+const testcase_sph_legendre<double>
+data006[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data006)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data006[i].l), Tp(data006[i].m),
-                   Tp(data006[i].theta));
-      const Tp f0 = data006[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=5, m=0.
-testcase_sph_legendre<double> data007[] = {
-  { 0.93560257962738880, 5, 0,
-          0.0000000000000000 },
-  { 0.77014422942080019, 5, 0,
-          0.15707963267948966 },
-  { 0.35892185032365215, 5, 0,
-          0.31415926535897931 },
-  { -0.090214932090594183, 5, 0,
-          0.47123889803846897 },
-  { -0.36214460396518888, 5, 0,
-          0.62831853071795862 },
-  { -0.35145955579226890, 5, 0,
-          0.78539816339744828 },
-  { -0.11441703594725168, 5, 0,
-          0.94247779607693793 },
-  { 0.17248966720808098, 5, 0,
-          1.0995574287564276 },
-  { 0.32128384287200523, 5, 0,
-          1.2566370614359172 },
-  { 0.24377632246714948, 5, 0,
-          1.4137166941154069 },
-  { 1.0741712853887702e-16, 5, 0,
-          1.5707963267948966 },
-  { -0.24377632246714906, 5, 0,
-          1.7278759594743860 },
-  { -0.32128384287200534, 5, 0,
-          1.8849555921538759 },
-  { -0.17248966720808118, 5, 0,
-          2.0420352248333655 },
-  { 0.11441703594725168, 5, 0,
-          2.1991148575128552 },
-  { 0.35145955579226890, 5, 0,
-          2.3561944901923448 },
-  { 0.36214460396518910, 5, 0,
-          2.5132741228718345 },
-  { 0.090214932090594724, 5, 0,
-          2.6703537555513241 },
-  { -0.35892185032365215, 5, 0,
-          2.8274333882308138 },
-  { -0.77014422942079797, 5, 0,
-          2.9845130209103035 },
-  { -0.93560257962738880, 5, 0,
-          3.1415926535897931 },
+  { 0.0000000000000000, 2, 2, 
+         0.0000000000000000, 0.0 },
+  { 0.0094528025561623485, 2, 2, 
+         0.15707963267948966, 0.0 },
+  { 0.036885904048903732, 2, 2, 
+         0.31415926535897931, 0.0 },
+  { 0.079613961366457681, 2, 2, 
+         0.47123889803846897, 0.0 },
+  { 0.13345445455470126, 2, 2, 
+         0.62831853071795862, 0.0 },
+  { 0.19313710101159490, 2, 2, 
+         0.78539816339744828, 0.0 },
+  { 0.25281974746848851, 2, 2, 
+         0.94247779607693793, 0.0 },
+  { 0.30666024065673209, 2, 2, 
+         1.0995574287564276, 0.0 },
+  { 0.34938829797428600, 2, 2, 
+         1.2566370614359172, 0.0 },
+  { 0.37682139946702753, 2, 2, 
+         1.4137166941154069, 0.0 },
+  { 0.38627420202318985, 2, 2, 
+         1.5707963267948966, 0.0 },
+  { 0.37682139946702753, 2, 2, 
+         1.7278759594743862, 0.0 },
+  { 0.34938829797428606, 2, 2, 
+         1.8849555921538759, 0.0 },
+  { 0.30666024065673214, 2, 2, 
+         2.0420352248333655, 0.0 },
+  { 0.25281974746848856, 2, 2, 
+         2.1991148575128552, 0.0 },
+  { 0.19313710101159498, 2, 2, 
+         2.3561944901923448, 0.0 },
+  { 0.13345445455470123, 2, 2, 
+         2.5132741228718345, 0.0 },
+  { 0.079613961366457764, 2, 2, 
+         2.6703537555513241, 0.0 },
+  { 0.036885904048903809, 2, 2, 
+         2.8274333882308138, 0.0 },
+  { 0.0094528025561623485, 2, 2, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 2, 2, 
+         3.1415926535897931, 0.0 },
 };
+const double toler006 = 5.0000000000000039e-13;
 
-// Test function for l=5, m=0.
-template <typename Tp>
-void test007()
+// Test data for l=5, m=0.
+// max(|f - f_GSL|): 1.0547118733938987e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 2.9385557676213648e-15
+// mean(f - f_GSL): -4.2955057500378082e-17
+// variance(f - f_GSL): 9.6869690655191325e-35
+// stddev(f - f_GSL): 9.8422401238331574e-18
+const testcase_sph_legendre<double>
+data007[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data007)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data007[i].l), Tp(data007[i].m),
-                   Tp(data007[i].theta));
-      const Tp f0 = data007[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=5, m=1.
-testcase_sph_legendre<double> data008[] = {
-  { 0.0000000000000000, 5, 1,
-          0.0000000000000000 },
-  { -0.36712373713318258, 5, 1,
-          0.15707963267948966 },
-  { -0.54610329010534753, 5, 1,
-          0.31415926535897931 },
-  { -0.45381991493631785, 5, 1,
-          0.47123889803846897 },
-  { -0.15679720635769953, 5, 1,
-          0.62831853071795862 },
-  { 0.16985499419838637, 5, 1,
-          0.78539816339744828 },
-  { 0.34468004499725180, 5, 1,
-          0.94247779607693793 },
-  { 0.28349471119605985, 5, 1,
-          1.0995574287564276 },
-  { 0.044286619339675856, 5, 1,
-          1.2566370614359172 },
-  { -0.21193784177193470, 5, 1,
-          1.4137166941154069 },
-  { -0.32028164857621527, 5, 1,
-          1.5707963267948966 },
-  { -0.21193784177193514, 5, 1,
-          1.7278759594743860 },
-  { 0.044286619339675606, 5, 1,
-          1.8849555921538759 },
-  { 0.28349471119605979, 5, 1,
-          2.0420352248333655 },
-  { 0.34468004499725180, 5, 1,
-          2.1991148575128552 },
-  { 0.16985499419838637, 5, 1,
-          2.3561944901923448 },
-  { -0.15679720635769920, 5, 1,
-          2.5132741228718345 },
-  { -0.45381991493631757, 5, 1,
-          2.6703537555513241 },
-  { -0.54610329010534753, 5, 1,
-          2.8274333882308138 },
-  { -0.36712373713318397, 5, 1,
-          2.9845130209103035 },
-  { 0.0000000000000000, 5, 1,
-          3.1415926535897931 },
+  { 0.93560257962738880, 5, 0, 
+         0.0000000000000000, 0.0 },
+  { 0.77014422942079852, 5, 0, 
+         0.15707963267948966, 0.0 },
+  { 0.35892185032365348, 5, 0, 
+         0.31415926535897931, 0.0 },
+  { -0.090214932090594294, 5, 0, 
+         0.47123889803846897, 0.0 },
+  { -0.36214460396518905, 5, 0, 
+         0.62831853071795862, 0.0 },
+  { -0.35145955579226906, 5, 0, 
+         0.78539816339744828, 0.0 },
+  { -0.11441703594725193, 5, 0, 
+         0.94247779607693793, 0.0 },
+  { 0.17248966720808107, 5, 0, 
+         1.0995574287564276, 0.0 },
+  { 0.32128384287200523, 5, 0, 
+         1.2566370614359172, 0.0 },
+  { 0.24377632246714948, 5, 0, 
+         1.4137166941154069, 0.0 },
+  { 1.0741712853887687e-16, 5, 0, 
+         1.5707963267948966, 0.0 },
+  { -0.24377632246714936, 5, 0, 
+         1.7278759594743862, 0.0 },
+  { -0.32128384287200534, 5, 0, 
+         1.8849555921538759, 0.0 },
+  { -0.17248966720808118, 5, 0, 
+         2.0420352248333655, 0.0 },
+  { 0.11441703594725151, 5, 0, 
+         2.1991148575128552, 0.0 },
+  { 0.35145955579226895, 5, 0, 
+         2.3561944901923448, 0.0 },
+  { 0.36214460396518883, 5, 0, 
+         2.5132741228718345, 0.0 },
+  { 0.090214932090594752, 5, 0, 
+         2.6703537555513241, 0.0 },
+  { -0.35892185032365165, 5, 0, 
+         2.8274333882308138, 0.0 },
+  { -0.77014422942079852, 5, 0, 
+         2.9845130209103035, 0.0 },
+  { -0.93560257962738880, 5, 0, 
+         3.1415926535897931, 0.0 },
 };
+const double toler007 = 2.5000000000000020e-13;
 
-// Test function for l=5, m=1.
-template <typename Tp>
-void test008()
+// Test data for l=5, m=1.
+// max(|f - f_GSL|): 3.3306690738754696e-15 at index 2
+// max(|f - f_GSL| / |f_GSL|): 6.7265986294921411e-15
+// mean(f - f_GSL): 6.3573485100559560e-16
+// variance(f - f_GSL): 2.1218337041113107e-32
+// stddev(f - f_GSL): 1.4566515383273072e-16
+const testcase_sph_legendre<double>
+data008[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data008)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data008[i].l), Tp(data008[i].m),
-                   Tp(data008[i].theta));
-      const Tp f0 = data008[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=5, m=2.
-testcase_sph_legendre<double> data009[] = {
-  { 0.0000000000000000, 5, 2,
-          0.0000000000000000 },
-  { 0.078919441745546146, 5, 2,
-          0.15707963267948966 },
-  { 0.26373799140437981, 5, 2,
-          0.31415926535897931 },
-  { 0.43002359842080096, 5, 2,
-          0.47123889803846897 },
-  { 0.45642486439050994, 5, 2,
-          0.62831853071795862 },
-  { 0.29959604906083276, 5, 2,
-          0.78539816339744828 },
-  { 0.023781239849532242, 5, 2,
-          0.94247779607693793 },
-  { -0.23313989334673815, 5, 2,
-          1.0995574287564276 },
-  { -0.33799912776303714, 5, 2,
-          1.2566370614359172 },
-  { -0.23964508489529743, 5, 2,
-          1.4137166941154069 },
-  { -1.0377480524338170e-16, 5, 2,
-          1.5707963267948966 },
-  { 0.23964508489529704, 5, 2,
-          1.7278759594743860 },
-  { 0.33799912776303714, 5, 2,
-          1.8849555921538759 },
-  { 0.23313989334673837, 5, 2,
-          2.0420352248333655 },
-  { -0.023781239849532242, 5, 2,
-          2.1991148575128552 },
-  { -0.29959604906083276, 5, 2,
-          2.3561944901923448 },
-  { -0.45642486439050978, 5, 2,
-          2.5132741228718345 },
-  { -0.43002359842080118, 5, 2,
-          2.6703537555513241 },
-  { -0.26373799140437981, 5, 2,
-          2.8274333882308138 },
-  { -0.078919441745546867, 5, 2,
-          2.9845130209103035 },
-  { 0.0000000000000000, 5, 2,
-          3.1415926535897931 },
+  { 0.0000000000000000, 5, 1, 
+         0.0000000000000000, 0.0 },
+  { -0.36712373713318402, 5, 1, 
+         0.15707963267948966, 0.0 },
+  { -0.54610329010534708, 5, 1, 
+         0.31415926535897931, 0.0 },
+  { -0.45381991493631763, 5, 1, 
+         0.47123889803846897, 0.0 },
+  { -0.15679720635769906, 5, 1, 
+         0.62831853071795862, 0.0 },
+  { 0.16985499419838601, 5, 1, 
+         0.78539816339744828, 0.0 },
+  { 0.34468004499725169, 5, 1, 
+         0.94247779607693793, 0.0 },
+  { 0.28349471119605985, 5, 1, 
+         1.0995574287564276, 0.0 },
+  { 0.044286619339675815, 5, 1, 
+         1.2566370614359172, 0.0 },
+  { -0.21193784177193470, 5, 1, 
+         1.4137166941154069, 0.0 },
+  { -0.32028164857621527, 5, 1, 
+         1.5707963267948966, 0.0 },
+  { -0.21193784177193487, 5, 1, 
+         1.7278759594743862, 0.0 },
+  { 0.044286619339675592, 5, 1, 
+         1.8849555921538759, 0.0 },
+  { 0.28349471119605973, 5, 1, 
+         2.0420352248333655, 0.0 },
+  { 0.34468004499725174, 5, 1, 
+         2.1991148575128552, 0.0 },
+  { 0.16985499419838640, 5, 1, 
+         2.3561944901923448, 0.0 },
+  { -0.15679720635769961, 5, 1, 
+         2.5132741228718345, 0.0 },
+  { -0.45381991493631768, 5, 1, 
+         2.6703537555513241, 0.0 },
+  { -0.54610329010534753, 5, 1, 
+         2.8274333882308138, 0.0 },
+  { -0.36712373713318402, 5, 1, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 5, 1, 
+         3.1415926535897931, 0.0 },
 };
+const double toler008 = 5.0000000000000039e-13;
 
-// Test function for l=5, m=2.
-template <typename Tp>
-void test009()
+// Test data for l=5, m=2.
+// max(|f - f_GSL|): 2.6645352591003757e-15 at index 4
+// max(|f - f_GSL| / |f_GSL|): 6.1144597746666128e-15
+// mean(f - f_GSL): -4.3615904538845404e-17
+// variance(f - f_GSL): 9.9873224258937960e-35
+// stddev(f - f_GSL): 9.9936592026613535e-18
+const testcase_sph_legendre<double>
+data009[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data009)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data009[i].l), Tp(data009[i].m),
-                   Tp(data009[i].theta));
-      const Tp f0 = data009[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=5, m=5.
-testcase_sph_legendre<double> data010[] = {
-  { 0.0000000000000000, 5, 5,
-          0.0000000000000000 },
-  { -4.3481439097909148e-05, 5, 5,
-          0.15707963267948966 },
-  { -0.0013078367086431812, 5, 5,
-          0.31415926535897931 },
-  { -0.0089510818191922761, 5, 5,
-          0.47123889803846897 },
-  { -0.032563803777573896, 5, 5,
-          0.62831853071795862 },
-  { -0.082047757105021310, 5, 5,
-          0.78539816339744828 },
-  { -0.16085328164143819, 5, 5,
-          0.94247779607693793 },
-  { -0.26064303436645375, 5, 5,
-          1.0995574287564276 },
-  { -0.36113811790820566, 5, 5,
-          1.2566370614359172 },
-  { -0.43625592459446139, 5, 5,
-          1.4137166941154069 },
-  { -0.46413220344085809, 5, 5,
-          1.5707963267948966 },
-  { -0.43625592459446155, 5, 5,
-          1.7278759594743860 },
-  { -0.36113811790820577, 5, 5,
-          1.8849555921538759 },
-  { -0.26064303436645381, 5, 5,
-          2.0420352248333655 },
-  { -0.16085328164143819, 5, 5,
-          2.1991148575128552 },
-  { -0.082047757105021310, 5, 5,
-          2.3561944901923448 },
-  { -0.032563803777573924, 5, 5,
-          2.5132741228718345 },
-  { -0.0089510818191923004, 5, 5,
-          2.6703537555513241 },
-  { -0.0013078367086431812, 5, 5,
-          2.8274333882308138 },
-  { -4.3481439097910151e-05, 5, 5,
-          2.9845130209103035 },
-  { 0.0000000000000000, 5, 5,
-          3.1415926535897931 },
+  { 0.0000000000000000, 5, 2, 
+         0.0000000000000000, 0.0 },
+  { 0.078919441745546909, 5, 2, 
+         0.15707963267948966, 0.0 },
+  { 0.26373799140437948, 5, 2, 
+         0.31415926535897931, 0.0 },
+  { 0.43002359842080096, 5, 2, 
+         0.47123889803846897, 0.0 },
+  { 0.45642486439050983, 5, 2, 
+         0.62831853071795862, 0.0 },
+  { 0.29959604906083298, 5, 2, 
+         0.78539816339744828, 0.0 },
+  { 0.023781239849532509, 5, 2, 
+         0.94247779607693793, 0.0 },
+  { -0.23313989334673826, 5, 2, 
+         1.0995574287564276, 0.0 },
+  { -0.33799912776303714, 5, 2, 
+         1.2566370614359172, 0.0 },
+  { -0.23964508489529746, 5, 2, 
+         1.4137166941154069, 0.0 },
+  { -1.0377480524338157e-16, 5, 2, 
+         1.5707963267948966, 0.0 },
+  { 0.23964508489529732, 5, 2, 
+         1.7278759594743862, 0.0 },
+  { 0.33799912776303714, 5, 2, 
+         1.8849555921538759, 0.0 },
+  { 0.23313989334673843, 5, 2, 
+         2.0420352248333655, 0.0 },
+  { -0.023781239849531916, 5, 2, 
+         2.1991148575128552, 0.0 },
+  { -0.29959604906083270, 5, 2, 
+         2.3561944901923448, 0.0 },
+  { -0.45642486439050983, 5, 2, 
+         2.5132741228718345, 0.0 },
+  { -0.43002359842080118, 5, 2, 
+         2.6703537555513241, 0.0 },
+  { -0.26373799140437981, 5, 2, 
+         2.8274333882308138, 0.0 },
+  { -0.078919441745546909, 5, 2, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 5, 2, 
+         3.1415926535897931, 0.0 },
 };
+const double toler009 = 5.0000000000000039e-13;
 
-// Test function for l=5, m=5.
-template <typename Tp>
-void test010()
+// Test data for l=5, m=5.
+// max(|f - f_GSL|): 2.3869795029440866e-15 at index 10
+// max(|f - f_GSL| / |f_GSL|): 5.4714279627676651e-15
+// mean(f - f_GSL): 7.7966720691209837e-16
+// variance(f - f_GSL): 3.1913750060540917e-32
+// stddev(f - f_GSL): 1.7864419962747438e-16
+const testcase_sph_legendre<double>
+data010[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data010)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data010[i].l), Tp(data010[i].m),
-                   Tp(data010[i].theta));
-      const Tp f0 = data010[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=10, m=0.
-testcase_sph_legendre<double> data011[] = {
-  { 1.2927207364566027, 10, 0,
-          0.0000000000000000 },
-  { 0.55288895150522632, 10, 0,
-          0.15707963267948966 },
-  { -0.44874428379711506, 10, 0,
-          0.31415926535897931 },
-  { -0.25532095827149692, 10, 0,
-          0.47123889803846897 },
-  { 0.36625249688013967, 10, 0,
-          0.62831853071795862 },
-  { 0.14880806329084145, 10, 0,
-          0.78539816339744828 },
-  { -0.33533356797848746, 10, 0,
-          0.94247779607693793 },
-  { -0.080639967662335818, 10, 0,
-          1.0995574287564276 },
-  { 0.32197986450174521, 10, 0,
-          1.2566370614359172 },
-  { 0.025713542103667848, 10, 0,
-          1.4137166941154069 },
-  { -0.31813049373736707, 10, 0,
-          1.5707963267948966 },
-  { 0.025713542103666668, 10, 0,
-          1.7278759594743860 },
-  { 0.32197986450174532, 10, 0,
-          1.8849555921538759 },
-  { -0.080639967662335416, 10, 0,
-          2.0420352248333655 },
-  { -0.33533356797848746, 10, 0,
-          2.1991148575128552 },
-  { 0.14880806329084145, 10, 0,
-          2.3561944901923448 },
-  { 0.36625249688013994, 10, 0,
-          2.5132741228718345 },
-  { -0.25532095827149576, 10, 0,
-          2.6703537555513241 },
-  { -0.44874428379711506, 10, 0,
-          2.8274333882308138 },
-  { 0.55288895150521977, 10, 0,
-          2.9845130209103035 },
-  { 1.2927207364566027, 10, 0,
-          3.1415926535897931 },
+  { 0.0000000000000000, 5, 5, 
+         0.0000000000000000, 0.0 },
+  { -4.3481439097910151e-05, 5, 5, 
+         0.15707963267948966, 0.0 },
+  { -0.0013078367086431740, 5, 5, 
+         0.31415926535897931, 0.0 },
+  { -0.0089510818191922761, 5, 5, 
+         0.47123889803846897, 0.0 },
+  { -0.032563803777573910, 5, 5, 
+         0.62831853071795862, 0.0 },
+  { -0.082047757105021241, 5, 5, 
+         0.78539816339744828, 0.0 },
+  { -0.16085328164143806, 5, 5, 
+         0.94247779607693793, 0.0 },
+  { -0.26064303436645381, 5, 5, 
+         1.0995574287564276, 0.0 },
+  { -0.36113811790820571, 5, 5, 
+         1.2566370614359172, 0.0 },
+  { -0.43625592459446139, 5, 5, 
+         1.4137166941154069, 0.0 },
+  { -0.46413220344085809, 5, 5, 
+         1.5707963267948966, 0.0 },
+  { -0.43625592459446144, 5, 5, 
+         1.7278759594743862, 0.0 },
+  { -0.36113811790820577, 5, 5, 
+         1.8849555921538759, 0.0 },
+  { -0.26064303436645381, 5, 5, 
+         2.0420352248333655, 0.0 },
+  { -0.16085328164143822, 5, 5, 
+         2.1991148575128552, 0.0 },
+  { -0.082047757105021310, 5, 5, 
+         2.3561944901923448, 0.0 },
+  { -0.032563803777573896, 5, 5, 
+         2.5132741228718345, 0.0 },
+  { -0.0089510818191923004, 5, 5, 
+         2.6703537555513241, 0.0 },
+  { -0.0013078367086431812, 5, 5, 
+         2.8274333882308138, 0.0 },
+  { -4.3481439097910151e-05, 5, 5, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 5, 5, 
+         3.1415926535897931, 0.0 },
 };
+const double toler010 = 5.0000000000000039e-13;
 
-// Test function for l=10, m=0.
-template <typename Tp>
-void test011()
+// Test data for l=10, m=0.
+// max(|f - f_GSL|): 9.9920072216264089e-16 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.3176588435352323e-15
+// mean(f - f_GSL): 5.6171998269725183e-18
+// variance(f - f_GSL): 1.6565290295473546e-36
+// stddev(f - f_GSL): 1.2870621700397205e-18
+const testcase_sph_legendre<double>
+data011[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data011)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data011[i].l), Tp(data011[i].m),
-                   Tp(data011[i].theta));
-      const Tp f0 = data011[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=10, m=1.
-testcase_sph_legendre<double> data012[] = {
-  { 0.0000000000000000, 10, 1,
-          0.0000000000000000 },
-  { -0.74373723919063905, 10, 1,
-          0.15707963267948966 },
-  { -0.29035110456209551, 10, 1,
-          0.31415926535897931 },
-  { 0.42219282075271497, 10, 1,
-          0.47123889803846897 },
-  { 0.17109256898931269, 10, 1,
-          0.62831853071795862 },
-  { -0.35583574648544292, 10, 1,
-          0.78539816339744828 },
-  { -0.10089212303543979, 10, 1,
-          0.94247779607693793 },
-  { 0.32997652649321085, 10, 1,
-          1.0995574287564276 },
-  { 0.047416376890033113, 10, 1,
-          1.2566370614359172 },
-  { -0.31999356750295654, 10, 1,
-          1.4137166941154069 },
-  { -2.0430664782290766e-16, 10, 1,
-          1.5707963267948966 },
-  { 0.31999356750295660, 10, 1,
-          1.7278759594743860 },
-  { -0.047416376890032523, 10, 1,
-          1.8849555921538759 },
-  { -0.32997652649321102, 10, 1,
-          2.0420352248333655 },
-  { 0.10089212303543979, 10, 1,
-          2.1991148575128552 },
-  { 0.35583574648544292, 10, 1,
-          2.3561944901923448 },
-  { -0.17109256898931186, 10, 1,
-          2.5132741228718345 },
-  { -0.42219282075271553, 10, 1,
-          2.6703537555513241 },
-  { 0.29035110456209551, 10, 1,
-          2.8274333882308138 },
-  { 0.74373723919064028, 10, 1,
-          2.9845130209103035 },
-  { 0.0000000000000000, 10, 1,
-          3.1415926535897931 },
+  { 1.2927207364566027, 10, 0, 
+         0.0000000000000000, 0.0 },
+  { 0.55288895150522011, 10, 0, 
+         0.15707963267948966, 0.0 },
+  { -0.44874428379711329, 10, 0, 
+         0.31415926535897931, 0.0 },
+  { -0.25532095827149687, 10, 0, 
+         0.47123889803846897, 0.0 },
+  { 0.36625249688013994, 10, 0, 
+         0.62831853071795862, 0.0 },
+  { 0.14880806329084206, 10, 0, 
+         0.78539816339744828, 0.0 },
+  { -0.33533356797848740, 10, 0, 
+         0.94247779607693793, 0.0 },
+  { -0.080639967662335665, 10, 0, 
+         1.0995574287564276, 0.0 },
+  { 0.32197986450174521, 10, 0, 
+         1.2566370614359172, 0.0 },
+  { 0.025713542103667848, 10, 0, 
+         1.4137166941154069, 0.0 },
+  { -0.31813049373736707, 10, 0, 
+         1.5707963267948966, 0.0 },
+  { 0.025713542103667528, 10, 0, 
+         1.7278759594743862, 0.0 },
+  { 0.32197986450174543, 10, 0, 
+         1.8849555921538759, 0.0 },
+  { -0.080639967662335416, 10, 0, 
+         2.0420352248333655, 0.0 },
+  { -0.33533356797848757, 10, 0, 
+         2.1991148575128552, 0.0 },
+  { 0.14880806329084156, 10, 0, 
+         2.3561944901923448, 0.0 },
+  { 0.36625249688013961, 10, 0, 
+         2.5132741228718345, 0.0 },
+  { -0.25532095827149576, 10, 0, 
+         2.6703537555513241, 0.0 },
+  { -0.44874428379711545, 10, 0, 
+         2.8274333882308138, 0.0 },
+  { 0.55288895150522011, 10, 0, 
+         2.9845130209103035, 0.0 },
+  { 1.2927207364566027, 10, 0, 
+         3.1415926535897931, 0.0 },
 };
+const double toler011 = 2.5000000000000020e-13;
 
-// Test function for l=10, m=1.
-template <typename Tp>
-void test012()
+// Test data for l=10, m=1.
+// max(|f - f_GSL|): 6.2172489379008766e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.0515246092567303e-14
+// mean(f - f_GSL): -3.3042351923367698e-17
+// variance(f - f_GSL): 5.7319343582953255e-35
+// stddev(f - f_GSL): 7.5709539414101082e-18
+const testcase_sph_legendre<double>
+data012[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data012)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data012[i].l), Tp(data012[i].m),
-                   Tp(data012[i].theta));
-      const Tp f0 = data012[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=10, m=2.
-testcase_sph_legendre<double> data013[] = {
-  { 0.0000000000000000, 10, 2,
-          0.0000000000000000 },
-  { 0.34571695599980284, 10, 2,
-          0.15707963267948966 },
-  { 0.62485535978198059, 10, 2,
-          0.31415926535897931 },
-  { 0.098210039644716363, 10, 2,
-          0.47123889803846897 },
-  { -0.41494799233049656, 10, 2,
-          0.62831853071795862 },
-  { -0.081698973831472149, 10, 2,
-          0.78539816339744828 },
-  { 0.35253132222271272, 10, 2,
-          0.94247779607693793 },
-  { 0.049026298555981063, 10, 2,
-          1.0995574287564276 },
-  { -0.32791246874130797, 10, 2,
-          1.2566370614359172 },
-  { -0.016196782433946910, 10, 2,
-          1.4137166941154069 },
-  { 0.32106263400438328, 10, 2,
-          1.5707963267948966 },
-  { -0.016196782433945765, 10, 2,
-          1.7278759594743860 },
-  { -0.32791246874130797, 10, 2,
-          1.8849555921538759 },
-  { 0.049026298555980702, 10, 2,
-          2.0420352248333655 },
-  { 0.35253132222271272, 10, 2,
-          2.1991148575128552 },
-  { -0.081698973831472149, 10, 2,
-          2.3561944901923448 },
-  { -0.41494799233049667, 10, 2,
-          2.5132741228718345 },
-  { 0.098210039644714753, 10, 2,
-          2.6703537555513241 },
-  { 0.62485535978198059, 10, 2,
-          2.8274333882308138 },
-  { 0.34571695599980551, 10, 2,
-          2.9845130209103035 },
-  { 0.0000000000000000, 10, 2,
-          3.1415926535897931 },
+  { 0.0000000000000000, 10, 1, 
+         0.0000000000000000, 0.0 },
+  { -0.74373723919064050, 10, 1, 
+         0.15707963267948966, 0.0 },
+  { -0.29035110456209651, 10, 1, 
+         0.31415926535897931, 0.0 },
+  { 0.42219282075271530, 10, 1, 
+         0.47123889803846897, 0.0 },
+  { 0.17109256898931161, 10, 1, 
+         0.62831853071795862, 0.0 },
+  { -0.35583574648544281, 10, 1, 
+         0.78539816339744828, 0.0 },
+  { -0.10089212303544023, 10, 1, 
+         0.94247779607693793, 0.0 },
+  { 0.32997652649321085, 10, 1, 
+         1.0995574287564276, 0.0 },
+  { 0.047416376890032939, 10, 1, 
+         1.2566370614359172, 0.0 },
+  { -0.31999356750295660, 10, 1, 
+         1.4137166941154069, 0.0 },
+  { -2.0430664782290742e-16, 10, 1, 
+         1.5707963267948966, 0.0 },
+  { 0.31999356750295660, 10, 1, 
+         1.7278759594743862, 0.0 },
+  { -0.047416376890032544, 10, 1, 
+         1.8849555921538759, 0.0 },
+  { -0.32997652649321096, 10, 1, 
+         2.0420352248333655, 0.0 },
+  { 0.10089212303543935, 10, 1, 
+         2.1991148575128552, 0.0 },
+  { 0.35583574648544292, 10, 1, 
+         2.3561944901923448, 0.0 },
+  { -0.17109256898931269, 10, 1, 
+         2.5132741228718345, 0.0 },
+  { -0.42219282075271569, 10, 1, 
+         2.6703537555513241, 0.0 },
+  { 0.29035110456209601, 10, 1, 
+         2.8274333882308138, 0.0 },
+  { 0.74373723919064050, 10, 1, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 10, 1, 
+         3.1415926535897931, 0.0 },
 };
+const double toler012 = 1.0000000000000008e-12;
 
-// Test function for l=10, m=2.
-template <typename Tp>
-void test013()
+// Test data for l=10, m=2.
+// max(|f - f_GSL|): 3.3306690738754696e-15 at index 2
+// max(|f - f_GSL| / |f_GSL|): 7.9132043938587384e-15
+// mean(f - f_GSL): -3.3504944850294902e-16
+// variance(f - f_GSL): 5.8935519794618406e-33
+// stddev(f - f_GSL): 7.6769472965898634e-17
+const testcase_sph_legendre<double>
+data013[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data013)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data013[i].l), Tp(data013[i].m),
-                   Tp(data013[i].theta));
-      const Tp f0 = data013[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for l=10, m=5.
-testcase_sph_legendre<double> data014[] = {
-  { 0.0000000000000000, 10, 5,
-          0.0000000000000000 },
-  { -0.0030300124052750187, 10, 5,
-          0.15707963267948966 },
-  { -0.070348585248056830, 10, 5,
-          0.31415926535897931 },
-  { -0.30055029290703639, 10, 5,
-          0.47123889803846897 },
-  { -0.49987818144009166, 10, 5,
-          0.62831853071795862 },
-  { -0.28108771757150086, 10, 5,
-          0.78539816339744828 },
-  { 0.22068081187249308, 10, 5,
-          0.94247779607693793 },
-  { 0.33689502212592115, 10, 5,
-          1.0995574287564276 },
-  { -0.086095515520763985, 10, 5,
-          1.2566370614359172 },
-  { -0.33935827318511558, 10, 5,
-          1.4137166941154069 },
-  { -1.9213014340664578e-16, 10, 5,
-          1.5707963267948966 },
-  { 0.33935827318511552, 10, 5,
-          1.7278759594743860 },
-  { 0.086095515520764526, 10, 5,
-          1.8849555921538759 },
-  { -0.33689502212592098, 10, 5,
-          2.0420352248333655 },
-  { -0.22068081187249308, 10, 5,
-          2.1991148575128552 },
-  { 0.28108771757150086, 10, 5,
-          2.3561944901923448 },
-  { 0.49987818144009155, 10, 5,
-          2.5132741228718345 },
-  { 0.30055029290703678, 10, 5,
-          2.6703537555513241 },
-  { 0.070348585248056830, 10, 5,
-          2.8274333882308138 },
-  { 0.0030300124052750855, 10, 5,
-          2.9845130209103035 },
-  { 0.0000000000000000, 10, 5,
-          3.1415926535897931 },
+  { 0.0000000000000000, 10, 2, 
+         0.0000000000000000, 0.0 },
+  { 0.34571695599980556, 10, 2, 
+         0.15707963267948966, 0.0 },
+  { 0.62485535978198148, 10, 2, 
+         0.31415926535897931, 0.0 },
+  { 0.098210039644716252, 10, 2, 
+         0.47123889803846897, 0.0 },
+  { -0.41494799233049695, 10, 2, 
+         0.62831853071795862, 0.0 },
+  { -0.081698973831472732, 10, 2, 
+         0.78539816339744828, 0.0 },
+  { 0.35253132222271277, 10, 2, 
+         0.94247779607693793, 0.0 },
+  { 0.049026298555980979, 10, 2, 
+         1.0995574287564276, 0.0 },
+  { -0.32791246874130792, 10, 2, 
+         1.2566370614359172, 0.0 },
+  { -0.016196782433946871, 10, 2, 
+         1.4137166941154069, 0.0 },
+  { 0.32106263400438334, 10, 2, 
+         1.5707963267948966, 0.0 },
+  { -0.016196782433946497, 10, 2, 
+         1.7278759594743862, 0.0 },
+  { -0.32791246874130803, 10, 2, 
+         1.8849555921538759, 0.0 },
+  { 0.049026298555980730, 10, 2, 
+         2.0420352248333655, 0.0 },
+  { 0.35253132222271266, 10, 2, 
+         2.1991148575128552, 0.0 },
+  { -0.081698973831472121, 10, 2, 
+         2.3561944901923448, 0.0 },
+  { -0.41494799233049684, 10, 2, 
+         2.5132741228718345, 0.0 },
+  { 0.098210039644715197, 10, 2, 
+         2.6703537555513241, 0.0 },
+  { 0.62485535978198081, 10, 2, 
+         2.8274333882308138, 0.0 },
+  { 0.34571695599980556, 10, 2, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 10, 2, 
+         3.1415926535897931, 0.0 },
 };
+const double toler013 = 5.0000000000000039e-13;
 
-// Test function for l=10, m=5.
-template <typename Tp>
-void test014()
+// Test data for l=10, m=5.
+// max(|f - f_GSL|): 2.8310687127941492e-15 at index 4
+// max(|f - f_GSL| / |f_GSL|): 6.7700052018114004e-15
+// mean(f - f_GSL): 3.8329128231106644e-17
+// variance(f - f_GSL): 7.7128908725222343e-35
+// stddev(f - f_GSL): 8.7823065720357509e-18
+const testcase_sph_legendre<double>
+data014[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data014)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data014[i].l), Tp(data014[i].m),
-                   Tp(data014[i].theta));
-      const Tp f0 = data014[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=10, m=10.
-testcase_sph_legendre<double> data015[] = {
-  { 0.0000000000000000, 10, 10,
-          0.0000000000000000 },
-  { 4.7624282733343473e-09, 10, 10,
-          0.15707963267948966 },
-  { 4.3085156534549772e-06, 10, 10,
-          0.31415926535897931 },
-  { 0.00020182347649472368, 10, 10,
-          0.47123889803846897 },
-  { 0.0026711045506511684, 10, 10,
-          0.62831853071795862 },
-  { 0.016957196623256943, 10, 10,
-          0.78539816339744828 },
-  { 0.065174916004990341, 10, 10,
-          0.94247779607693793 },
-  { 0.17112476903017843, 10, 10,
-          1.0995574287564276 },
-  { 0.32852414199733548, 10, 10,
-          1.2566370614359172 },
-  { 0.47940582314838287, 10, 10,
-          1.4137166941154069 },
-  { 0.54263029194422152, 10, 10,
-          1.5707963267948966 },
-  { 0.47940582314838309, 10, 10,
-          1.7278759594743860 },
-  { 0.32852414199733571, 10, 10,
-          1.8849555921538759 },
-  { 0.17112476903017854, 10, 10,
-          2.0420352248333655 },
-  { 0.065174916004990341, 10, 10,
-          2.1991148575128552 },
-  { 0.016957196623256943, 10, 10,
-          2.3561944901923448 },
-  { 0.0026711045506511706, 10, 10,
-          2.5132741228718345 },
-  { 0.00020182347649472493, 10, 10,
-          2.6703537555513241 },
-  { 4.3085156534549772e-06, 10, 10,
-          2.8274333882308138 },
-  { 4.7624282733345673e-09, 10, 10,
-          2.9845130209103035 },
-  { 0.0000000000000000, 10, 10,
-          3.1415926535897931 },
+  { 0.0000000000000000, 10, 5, 
+         0.0000000000000000, 0.0 },
+  { -0.0030300124052750873, 10, 5, 
+         0.15707963267948966, 0.0 },
+  { -0.070348585248056511, 10, 5, 
+         0.31415926535897931, 0.0 },
+  { -0.30055029290703639, 10, 5, 
+         0.47123889803846897, 0.0 },
+  { -0.49987818144009138, 10, 5, 
+         0.62831853071795862, 0.0 },
+  { -0.28108771757150108, 10, 5, 
+         0.78539816339744828, 0.0 },
+  { 0.22068081187249255, 10, 5, 
+         0.94247779607693793, 0.0 },
+  { 0.33689502212592121, 10, 5, 
+         1.0995574287564276, 0.0 },
+  { -0.086095515520764110, 10, 5, 
+         1.2566370614359172, 0.0 },
+  { -0.33935827318511558, 10, 5, 
+         1.4137166941154069, 0.0 },
+  { -1.9213014340664546e-16, 10, 5, 
+         1.5707963267948966, 0.0 },
+  { 0.33935827318511558, 10, 5, 
+         1.7278759594743862, 0.0 },
+  { 0.086095515520764512, 10, 5, 
+         1.8849555921538759, 0.0 },
+  { -0.33689502212592104, 10, 5, 
+         2.0420352248333655, 0.0 },
+  { -0.22068081187249344, 10, 5, 
+         2.1991148575128552, 0.0 },
+  { 0.28108771757150064, 10, 5, 
+         2.3561944901923448, 0.0 },
+  { 0.49987818144009155, 10, 5, 
+         2.5132741228718345, 0.0 },
+  { 0.30055029290703672, 10, 5, 
+         2.6703537555513241, 0.0 },
+  { 0.070348585248056802, 10, 5, 
+         2.8274333882308138, 0.0 },
+  { 0.0030300124052750873, 10, 5, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 10, 5, 
+         3.1415926535897931, 0.0 },
 };
+const double toler014 = 5.0000000000000039e-13;
 
-// Test function for l=10, m=10.
-template <typename Tp>
-void test015()
+// Test data for l=10, m=10.
+// max(|f - f_GSL|): 2.8865798640254070e-15 at index 10
+// max(|f - f_GSL| / |f_GSL|): 5.5362170773729674e-15
+// mean(f - f_GSL): -6.6245801611758948e-16
+// variance(f - f_GSL): 2.3039657713718755e-32
+// stddev(f - f_GSL): 1.5178820017945649e-16
+const testcase_sph_legendre<double>
+data015[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data015)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data015[i].l), Tp(data015[i].m),
-                   Tp(data015[i].theta));
-      const Tp f0 = data015[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=20, m=0.
-testcase_sph_legendre<double> data016[] = {
-  { 1.8062879984608917, 20, 0,
-          0.0000000000000000 },
-  { -0.58906549291415966, 20, 0,
-          0.15707963267948966 },
-  { 0.45624611402342408, 20, 0,
-          0.31415926535897931 },
-  { -0.39955402700466724, 20, 0,
-          0.47123889803846897 },
-  { 0.36818552901640750, 20, 0,
-          0.62831853071795862 },
-  { -0.34873131330857787, 20, 0,
-          0.78539816339744828 },
-  { 0.33600882829186501, 20, 0,
-          0.94247779607693793 },
-  { -0.32759286308122904, 20, 0,
-          1.0995574287564276 },
-  { 0.32222458068091320, 20, 0,
-          1.2566370614359172 },
-  { -0.31922731037135960, 20, 0,
-          1.4137166941154069 },
-  { 0.31826262039531755, 20, 0,
-          1.5707963267948966 },
-  { -0.31922731037135965, 20, 0,
-          1.7278759594743860 },
-  { 0.32222458068091336, 20, 0,
-          1.8849555921538759 },
-  { -0.32759286308122937, 20, 0,
-          2.0420352248333655 },
-  { 0.33600882829186501, 20, 0,
-          2.1991148575128552 },
-  { -0.34873131330857787, 20, 0,
-          2.3561944901923448 },
-  { 0.36818552901640839, 20, 0,
-          2.5132741228718345 },
-  { -0.39955402700466852, 20, 0,
-          2.6703537555513241 },
-  { 0.45624611402342408, 20, 0,
-          2.8274333882308138 },
-  { -0.58906549291416699, 20, 0,
-          2.9845130209103035 },
-  { 1.8062879984608917, 20, 0,
-          3.1415926535897931 },
+  { 0.0000000000000000, 10, 10, 
+         0.0000000000000000, 0.0 },
+  { 4.7624282733345673e-09, 10, 10, 
+         0.15707963267948966, 0.0 },
+  { 4.3085156534549315e-06, 10, 10, 
+         0.31415926535897931, 0.0 },
+  { 0.00020182347649472387, 10, 10, 
+         0.47123889803846897, 0.0 },
+  { 0.0026711045506511706, 10, 10, 
+         0.62831853071795862, 0.0 },
+  { 0.016957196623256909, 10, 10, 
+         0.78539816339744828, 0.0 },
+  { 0.065174916004990271, 10, 10, 
+         0.94247779607693793, 0.0 },
+  { 0.17112476903017845, 10, 10, 
+         1.0995574287564276, 0.0 },
+  { 0.32852414199733554, 10, 10, 
+         1.2566370614359172, 0.0 },
+  { 0.47940582314838287, 10, 10, 
+         1.4137166941154069, 0.0 },
+  { 0.54263029194422152, 10, 10, 
+         1.5707963267948966, 0.0 },
+  { 0.47940582314838293, 10, 10, 
+         1.7278759594743862, 0.0 },
+  { 0.32852414199733571, 10, 10, 
+         1.8849555921538759, 0.0 },
+  { 0.17112476903017851, 10, 10, 
+         2.0420352248333655, 0.0 },
+  { 0.065174916004990410, 10, 10, 
+         2.1991148575128552, 0.0 },
+  { 0.016957196623256943, 10, 10, 
+         2.3561944901923448, 0.0 },
+  { 0.0026711045506511684, 10, 10, 
+         2.5132741228718345, 0.0 },
+  { 0.00020182347649472493, 10, 10, 
+         2.6703537555513241, 0.0 },
+  { 4.3085156534549772e-06, 10, 10, 
+         2.8274333882308138, 0.0 },
+  { 4.7624282733345673e-09, 10, 10, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 10, 10, 
+         3.1415926535897931, 0.0 },
 };
+const double toler015 = 5.0000000000000039e-13;
 
-// Test function for l=20, m=0.
-template <typename Tp>
-void test016()
+// Test data for l=20, m=0.
+// max(|f - f_GSL|): 1.2212453270876722e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 2.0731910827878347e-15
+// mean(f - f_GSL): 1.1102230246251565e-16
+// variance(f - f_GSL): 6.4711246131411122e-34
+// stddev(f - f_GSL): 2.5438405243138007e-17
+const testcase_sph_legendre<double>
+data016[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data016)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data016[i].l), Tp(data016[i].m),
-                   Tp(data016[i].theta));
-      const Tp f0 = data016[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=20, m=1.
-testcase_sph_legendre<double> data017[] = {
-  { 0.0000000000000000, 20, 1,
-          0.0000000000000000 },
-  { -0.45905213045060206, 20, 1,
-          0.15707963267948966 },
-  { 0.31166370423309170, 20, 1,
-          0.31415926535897931 },
-  { -0.23278757741246814, 20, 1,
-          0.47123889803846897 },
-  { 0.17937240823504183, 20, 1,
-          0.62831853071795862 },
-  { -0.13857299972299736, 20, 1,
-          0.78539816339744828 },
-  { 0.10495324841927710, 20, 1,
-          0.94247779607693793 },
-  { -0.075707774352164178, 20, 1,
-          1.0995574287564276 },
-  { 0.049168697683476620, 20, 1,
-          1.2566370614359172 },
-  { -0.024216050551253254, 20, 1,
-          1.4137166941154069 },
-  { 3.9938443510694349e-16, 20, 1,
-          1.5707963267948966 },
-  { 0.024216050551250898, 20, 1,
-          1.7278759594743860 },
-  { -0.049168697683475482, 20, 1,
-          1.8849555921538759 },
-  { 0.075707774352163332, 20, 1,
-          2.0420352248333655 },
-  { -0.10495324841927710, 20, 1,
-          2.1991148575128552 },
-  { 0.13857299972299736, 20, 1,
-          2.3561944901923448 },
-  { -0.17937240823504039, 20, 1,
-          2.5132741228718345 },
-  { 0.23278757741246658, 20, 1,
-          2.6703537555513241 },
-  { -0.31166370423309170, 20, 1,
-          2.8274333882308138 },
-  { 0.45905213045059318, 20, 1,
-          2.9845130209103035 },
-  { 0.0000000000000000, 20, 1,
-          3.1415926535897931 },
+  { 1.8062879984608917, 20, 0, 
+         0.0000000000000000, 0.0 },
+  { -0.58906549291416732, 20, 0, 
+         0.15707963267948966, 0.0 },
+  { 0.45624611402342063, 20, 0, 
+         0.31415926535897931, 0.0 },
+  { -0.39955402700466724, 20, 0, 
+         0.47123889803846897, 0.0 },
+  { 0.36818552901640805, 20, 0, 
+         0.62831853071795862, 0.0 },
+  { -0.34873131330857743, 20, 0, 
+         0.78539816339744828, 0.0 },
+  { 0.33600882829186468, 20, 0, 
+         0.94247779607693793, 0.0 },
+  { -0.32759286308122931, 20, 0, 
+         1.0995574287564276, 0.0 },
+  { 0.32222458068091325, 20, 0, 
+         1.2566370614359172, 0.0 },
+  { -0.31922731037135965, 20, 0, 
+         1.4137166941154069, 0.0 },
+  { 0.31826262039531755, 20, 0, 
+         1.5707963267948966, 0.0 },
+  { -0.31922731037135971, 20, 0, 
+         1.7278759594743862, 0.0 },
+  { 0.32222458068091342, 20, 0, 
+         1.8849555921538759, 0.0 },
+  { -0.32759286308122926, 20, 0, 
+         2.0420352248333655, 0.0 },
+  { 0.33600882829186518, 20, 0, 
+         2.1991148575128552, 0.0 },
+  { -0.34873131330857782, 20, 0, 
+         2.3561944901923448, 0.0 },
+  { 0.36818552901640772, 20, 0, 
+         2.5132741228718345, 0.0 },
+  { -0.39955402700466824, 20, 0, 
+         2.6703537555513241, 0.0 },
+  { 0.45624611402342408, 20, 0, 
+         2.8274333882308138, 0.0 },
+  { -0.58906549291416732, 20, 0, 
+         2.9845130209103035, 0.0 },
+  { 1.8062879984608917, 20, 0, 
+         3.1415926535897931, 0.0 },
 };
+const double toler016 = 2.5000000000000020e-13;
 
-// Test function for l=20, m=1.
-template <typename Tp>
-void test017()
+// Test data for l=20, m=1.
+// max(|f - f_GSL|): 6.2727600891321345e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.3664592043119372e-14
+// mean(f - f_GSL): 2.8416422654096149e-17
+// variance(f - f_GSL): 4.2393386513952014e-35
+// stddev(f - f_GSL): 6.5110203896126770e-18
+const testcase_sph_legendre<double>
+data017[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data017)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data017[i].l), Tp(data017[i].m),
-                   Tp(data017[i].theta));
-      const Tp f0 = data017[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for l=20, m=2.
-testcase_sph_legendre<double> data018[] = {
-  { 0.0000000000000000, 20, 2,
-          0.0000000000000000 },
-  { 0.87399805141574682, 20, 2,
-          0.15707963267948966 },
-  { -0.55116854080894984, 20, 2,
-          0.31415926535897931 },
-  { 0.44520137308557534, 20, 2,
-          0.47123889803846897 },
-  { -0.39321637877908228, 20, 2,
-          0.62831853071795862 },
-  { 0.36312025711350970, 20, 2,
-          0.78539816339744828 },
-  { -0.34427103004873094, 20, 2,
-          0.94247779607693793 },
-  { 0.33214917638387625, 20, 2,
-          1.0995574287564276 },
-  { -0.32455734448839091, 20, 2,
-          1.2566370614359172 },
-  { 0.32036529628513238, 20, 2,
-          1.4137166941154069 },
-  { -0.31902310563819986, 20, 2,
-          1.5707963267948966 },
-  { 0.32036529628513266, 20, 2,
-          1.7278759594743860 },
-  { -0.32455734448839102, 20, 2,
-          1.8849555921538759 },
-  { 0.33214917638387670, 20, 2,
-          2.0420352248333655 },
-  { -0.34427103004873094, 20, 2,
-          2.1991148575128552 },
-  { 0.36312025711350970, 20, 2,
-          2.3561944901923448 },
-  { -0.39321637877908278, 20, 2,
-          2.5132741228718345 },
-  { 0.44520137308557639, 20, 2,
-          2.6703537555513241 },
-  { -0.55116854080894984, 20, 2,
-          2.8274333882308138 },
-  { 0.87399805141574360, 20, 2,
-          2.9845130209103035 },
-  { 0.0000000000000000, 20, 2,
-          3.1415926535897931 },
+  { 0.0000000000000000, 20, 1, 
+         0.0000000000000000, 0.0 },
+  { -0.45905213045059046, 20, 1, 
+         0.15707963267948966, 0.0 },
+  { 0.31166370423309414, 20, 1, 
+         0.31415926535897931, 0.0 },
+  { -0.23278757741246778, 20, 1, 
+         0.47123889803846897, 0.0 },
+  { 0.17937240823503983, 20, 1, 
+         0.62831853071795862, 0.0 },
+  { -0.13857299972299839, 20, 1, 
+         0.78539816339744828, 0.0 },
+  { 0.10495324841927815, 20, 1, 
+         0.94247779607693793, 0.0 },
+  { -0.075707774352163665, 20, 1, 
+         1.0995574287564276, 0.0 },
+  { 0.049168697683476224, 20, 1, 
+         1.2566370614359172, 0.0 },
+  { -0.024216050551253303, 20, 1, 
+         1.4137166941154069, 0.0 },
+  { 3.9938443510694310e-16, 20, 1, 
+         1.5707963267948966, 0.0 },
+  { 0.024216050551252380, 20, 1, 
+         1.7278759594743862, 0.0 },
+  { -0.049168697683475482, 20, 1, 
+         1.8849555921538759, 0.0 },
+  { 0.075707774352163346, 20, 1, 
+         2.0420352248333655, 0.0 },
+  { -0.10495324841927638, 20, 1, 
+         2.1991148575128552, 0.0 },
+  { 0.13857299972299741, 20, 1, 
+         2.3561944901923448, 0.0 },
+  { -0.17937240823504172, 20, 1, 
+         2.5132741228718345, 0.0 },
+  { 0.23278757741246703, 20, 1, 
+         2.6703537555513241, 0.0 },
+  { -0.31166370423309253, 20, 1, 
+         2.8274333882308138, 0.0 },
+  { 0.45905213045059046, 20, 1, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 20, 1, 
+         3.1415926535897931, 0.0 },
 };
+const double toler017 = 1.0000000000000008e-12;
 
-// Test function for l=20, m=2.
-template <typename Tp>
-void test018()
+// Test data for l=20, m=2.
+// max(|f - f_GSL|): 3.2196467714129540e-15 at index 2
+// max(|f - f_GSL| / |f_GSL|): 7.1072009465107655e-15
+// mean(f - f_GSL): 9.2518585385429716e-17
+// variance(f - f_GSL): 4.4938365369035506e-34
+// stddev(f - f_GSL): 2.1198671035948340e-17
+const testcase_sph_legendre<double>
+data018[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data018)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data018[i].l), Tp(data018[i].m),
-                   Tp(data018[i].theta));
-      const Tp f0 = data018[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=20, m=5.
-testcase_sph_legendre<double> data019[] = {
-  { 0.0000000000000000, 20, 5,
-          0.0000000000000000 },
-  { -0.10024848623504846, 20, 5,
-          0.15707963267948966 },
-  { -0.68115361075940595, 20, 5,
-          0.31415926535897931 },
-  { 0.31774532551156237, 20, 5,
-          0.47123889803846897 },
-  { -0.16011868165390564, 20, 5,
-          0.62831853071795862 },
-  { 0.085844143304116230, 20, 5,
-          0.78539816339744828 },
-  { -0.047467540840864686, 20, 5,
-          0.94247779607693793 },
-  { 0.026283575189471282, 20, 5,
-          1.0995574287564276 },
-  { -0.013891104052597331, 20, 5,
-          1.2566370614359172 },
-  { 0.0059873308239496931, 20, 5,
-          1.4137166941154069 },
-  { 3.9355286582083095e-16, 20, 5,
-          1.5707963267948966 },
-  { -0.0059873308239519040, 20, 5,
-          1.7278759594743860 },
-  { 0.013891104052598531, 20, 5,
-          1.8849555921538759 },
-  { -0.026283575189472212, 20, 5,
-          2.0420352248333655 },
-  { 0.047467540840864686, 20, 5,
-          2.1991148575128552 },
-  { -0.085844143304116230, 20, 5,
-          2.3561944901923448 },
-  { 0.16011868165390636, 20, 5,
-          2.5132741228718345 },
-  { -0.31774532551156448, 20, 5,
-          2.6703537555513241 },
-  { 0.68115361075940595, 20, 5,
-          2.8274333882308138 },
-  { 0.10024848623505037, 20, 5,
-          2.9845130209103035 },
-  { 0.0000000000000000, 20, 5,
-          3.1415926535897931 },
+  { 0.0000000000000000, 20, 2, 
+         0.0000000000000000, 0.0 },
+  { 0.87399805141574205, 20, 2, 
+         0.15707963267948966, 0.0 },
+  { -0.55116854080894906, 20, 2, 
+         0.31415926535897931, 0.0 },
+  { 0.44520137308557572, 20, 2, 
+         0.47123889803846897, 0.0 },
+  { -0.39321637877908278, 20, 2, 
+         0.62831853071795862, 0.0 },
+  { 0.36312025711350954, 20, 2, 
+         0.78539816339744828, 0.0 },
+  { -0.34427103004873089, 20, 2, 
+         0.94247779607693793, 0.0 },
+  { 0.33214917638387642, 20, 2, 
+         1.0995574287564276, 0.0 },
+  { -0.32455734448839091, 20, 2, 
+         1.2566370614359172, 0.0 },
+  { 0.32036529628513255, 20, 2, 
+         1.4137166941154069, 0.0 },
+  { -0.31902310563819986, 20, 2, 
+         1.5707963267948966, 0.0 },
+  { 0.32036529628513261, 20, 2, 
+         1.7278759594743862, 0.0 },
+  { -0.32455734448839102, 20, 2, 
+         1.8849555921538759, 0.0 },
+  { 0.33214917638387659, 20, 2, 
+         2.0420352248333655, 0.0 },
+  { -0.34427103004873105, 20, 2, 
+         2.1991148575128552, 0.0 },
+  { 0.36312025711350981, 20, 2, 
+         2.3561944901923448, 0.0 },
+  { -0.39321637877908228, 20, 2, 
+         2.5132741228718345, 0.0 },
+  { 0.44520137308557650, 20, 2, 
+         2.6703537555513241, 0.0 },
+  { -0.55116854080895039, 20, 2, 
+         2.8274333882308138, 0.0 },
+  { 0.87399805141574205, 20, 2, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 20, 2, 
+         3.1415926535897931, 0.0 },
 };
+const double toler018 = 5.0000000000000039e-13;
 
-// Test function for l=20, m=5.
-template <typename Tp>
-void test019()
+// Test data for l=20, m=5.
+// max(|f - f_GSL|): 3.7747582837255322e-15 at index 2
+// max(|f - f_GSL| / |f_GSL|): 2.9846361325102863e-14
+// mean(f - f_GSL): -1.9825411154020758e-17
+// variance(f - f_GSL): 2.0634963689863462e-35
+// stddev(f - f_GSL): 4.5425723648460969e-18
+const testcase_sph_legendre<double>
+data019[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data019)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data019[i].l), Tp(data019[i].m),
-                   Tp(data019[i].theta));
-      const Tp f0 = data019[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
-
-// Test data for l=20, m=10.
-testcase_sph_legendre<double> data020[] = {
-  { 0.0000000000000000, 20, 10,
-          0.0000000000000000 },
-  { 3.0595797603706485e-05, 20, 10,
-          0.15707963267948966 },
-  { 0.015924453916397008, 20, 10,
-          0.31415926535897931 },
-  { 0.26588079118745700, 20, 10,
-          0.47123889803846897 },
-  { 0.54045081420686825, 20, 10,
-          0.62831853071795862 },
-  { -0.28215279394285597, 20, 10,
-          0.78539816339744828 },
-  { 0.0085297337582246665, 20, 10,
-          0.94247779607693793 },
-  { 0.16930127953533775, 20, 10,
-          1.0995574287564276 },
-  { -0.27215134048018352, 20, 10,
-          1.2566370614359172 },
-  { 0.32456597088029526, 20, 10,
-          1.4137166941154069 },
-  { -0.34057893241353715, 20, 10,
-          1.5707963267948966 },
-  { 0.32456597088029449, 20, 10,
-          1.7278759594743860 },
-  { -0.27215134048018308, 20, 10,
-          1.8849555921538759 },
-  { 0.16930127953533725, 20, 10,
-          2.0420352248333655 },
-  { 0.0085297337582246665, 20, 10,
-          2.1991148575128552 },
-  { -0.28215279394285597, 20, 10,
-          2.3561944901923448 },
-  { 0.54045081420686658, 20, 10,
-          2.5132741228718345 },
-  { 0.26588079118745822, 20, 10,
-          2.6703537555513241 },
-  { 0.015924453916397008, 20, 10,
-          2.8274333882308138 },
-  { 3.0595797603707854e-05, 20, 10,
-          2.9845130209103035 },
-  { 0.0000000000000000, 20, 10,
-          3.1415926535897931 },
+  { 0.0000000000000000, 20, 5, 
+         0.0000000000000000, 0.0 },
+  { -0.10024848623505046, 20, 5, 
+         0.15707963267948966, 0.0 },
+  { -0.68115361075940650, 20, 5, 
+         0.31415926535897931, 0.0 },
+  { 0.31774532551156298, 20, 5, 
+         0.47123889803846897, 0.0 },
+  { -0.16011868165390658, 20, 5, 
+         0.62831853071795862, 0.0 },
+  { 0.085844143304115578, 20, 5, 
+         0.78539816339744828, 0.0 },
+  { -0.047467540840863798, 20, 5, 
+         0.94247779607693793, 0.0 },
+  { 0.026283575189471796, 20, 5, 
+         1.0995574287564276, 0.0 },
+  { -0.013891104052597688, 20, 5, 
+         1.2566370614359172, 0.0 },
+  { 0.0059873308239496957, 20, 5, 
+         1.4137166941154069, 0.0 },
+  { 3.9355286582083051e-16, 20, 5, 
+         1.5707963267948966, 0.0 },
+  { -0.0059873308239503324, 20, 5, 
+         1.7278759594743862, 0.0 },
+  { 0.013891104052598547, 20, 5, 
+         1.8849555921538759, 0.0 },
+  { -0.026283575189472153, 20, 5, 
+         2.0420352248333655, 0.0 },
+  { 0.047467540840865928, 20, 5, 
+         2.1991148575128552, 0.0 },
+  { -0.085844143304117007, 20, 5, 
+         2.3561944901923448, 0.0 },
+  { 0.16011868165390544, 20, 5, 
+         2.5132741228718345, 0.0 },
+  { -0.31774532551156381, 20, 5, 
+         2.6703537555513241, 0.0 },
+  { 0.68115361075940484, 20, 5, 
+         2.8274333882308138, 0.0 },
+  { 0.10024848623505046, 20, 5, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 20, 5, 
+         3.1415926535897931, 0.0 },
 };
+const double toler019 = 2.5000000000000015e-12;
 
-// Test function for l=20, m=10.
-template <typename Tp>
-void test020()
+// Test data for l=20, m=10.
+// max(|f - f_GSL|): 2.3314683517128287e-15 at index 4
+// max(|f - f_GSL| / |f_GSL|): 1.0575432165608034e-14
+// mean(f - f_GSL): -1.4002922808555493e-16
+// variance(f - f_GSL): 1.0294296977074090e-33
+// stddev(f - f_GSL): 3.2084726860414586e-17
+const testcase_sph_legendre<double>
+data020[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data020)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data020[i].l), Tp(data020[i].m),
-                   Tp(data020[i].theta));
-      const Tp f0 = data020[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for l=20, m=20.
-testcase_sph_legendre<double> data021[] = {
-  { 0.0000000000000000, 20, 20,
-          0.0000000000000000 },
-  { 4.9264471419245886e-17, 20, 20,
-          0.15707963267948966 },
-  { 4.0321091681531780e-11, 20, 20,
-          0.31415926535897931 },
-  { 8.8474944184471664e-08, 20, 20,
-          0.47123889803846897 },
-  { 1.5497395129387764e-05, 20, 20,
-          0.62831853071795862 },
-  { 0.00062457564282984723, 20, 20,
-          0.78539816339744828 },
-  { 0.0092265192458967603, 20, 20,
-          0.94247779607693793 },
-  { 0.063606673236323269, 20, 20,
-          1.0995574287564276 },
-  { 0.23442909509776308, 20, 20,
-          1.2566370614359172 },
-  { 0.49921030481087009, 20, 20,
-          1.4137166941154069 },
-  { 0.63956545825776223, 20, 20,
-          1.5707963267948966 },
-  { 0.49921030481087064, 20, 20,
-          1.7278759594743860 },
-  { 0.23442909509776344, 20, 20,
-          1.8849555921538759 },
-  { 0.063606673236323352, 20, 20,
-          2.0420352248333655 },
-  { 0.0092265192458967603, 20, 20,
-          2.1991148575128552 },
-  { 0.00062457564282984723, 20, 20,
-          2.3561944901923448 },
-  { 1.5497395129387818e-05, 20, 20,
-          2.5132741228718345 },
-  { 8.8474944184472617e-08, 20, 20,
-          2.6703537555513241 },
-  { 4.0321091681531780e-11, 20, 20,
-          2.8274333882308138 },
-  { 4.9264471419250786e-17, 20, 20,
-          2.9845130209103035 },
-  { 0.0000000000000000, 20, 20,
-          3.1415926535897931 },
+  { 0.0000000000000000, 20, 10, 
+         0.0000000000000000, 0.0 },
+  { 3.0595797603707888e-05, 20, 10, 
+         0.15707963267948966, 0.0 },
+  { 0.015924453916396863, 20, 10, 
+         0.31415926535897931, 0.0 },
+  { 0.26588079118745744, 20, 10, 
+         0.47123889803846897, 0.0 },
+  { 0.54045081420686736, 20, 10, 
+         0.62831853071795862, 0.0 },
+  { -0.28215279394285531, 20, 10, 
+         0.78539816339744828, 0.0 },
+  { 0.0085297337582239223, 20, 10, 
+         0.94247779607693793, 0.0 },
+  { 0.16930127953533738, 20, 10, 
+         1.0995574287564276, 0.0 },
+  { -0.27215134048018325, 20, 10, 
+         1.2566370614359172, 0.0 },
+  { 0.32456597088029526, 20, 10, 
+         1.4137166941154069, 0.0 },
+  { -0.34057893241353715, 20, 10, 
+         1.5707963267948966, 0.0 },
+  { 0.32456597088029493, 20, 10, 
+         1.7278759594743862, 0.0 },
+  { -0.27215134048018291, 20, 10, 
+         1.8849555921538759, 0.0 },
+  { 0.16930127953533702, 20, 10, 
+         2.0420352248333655, 0.0 },
+  { 0.0085297337582257438, 20, 10, 
+         2.1991148575128552, 0.0 },
+  { -0.28215279394285619, 20, 10, 
+         2.3561944901923448, 0.0 },
+  { 0.54045081420686869, 20, 10, 
+         2.5132741228718345, 0.0 },
+  { 0.26588079118745828, 20, 10, 
+         2.6703537555513241, 0.0 },
+  { 0.015924453916397002, 20, 10, 
+         2.8274333882308138, 0.0 },
+  { 3.0595797603707888e-05, 20, 10, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 20, 10, 
+         3.1415926535897931, 0.0 },
 };
+const double toler020 = 1.0000000000000008e-12;
 
-// Test function for l=20, m=20.
-template <typename Tp>
-void test021()
+// Test data for l=20, m=20.
+// max(|f - f_GSL|): 2.6645352591003757e-15 at index 10
+// max(|f - f_GSL| / |f_GSL|): 4.5133454703584717e-15
+// mean(f - f_GSL): -4.3857545834694365e-16
+// variance(f - f_GSL): 1.0098292714872165e-32
+// stddev(f - f_GSL): 1.0049026179124106e-16
+const testcase_sph_legendre<double>
+data021[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data021)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data021[i].l), Tp(data021[i].m),
-                   Tp(data021[i].theta));
-      const Tp f0 = data021[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=50, m=0.
-testcase_sph_legendre<double> data022[] = {
-  { 2.8350175706934717, 50, 0,
-          0.0000000000000000 },
-  { 0.53157537495174845, 50, 0,
-          0.15707963267948966 },
-  { -0.46056183476301349, 50, 0,
-          0.31415926535897931 },
-  { -0.24876032079677909, 50, 0,
-          0.47123889803846897 },
-  { 0.36926172901532522, 50, 0,
-          0.62831853071795862 },
-  { 0.14571730283563306, 50, 0,
-          0.78539816339744828 },
-  { -0.33636199170850811, 50, 0,
-          0.94247779607693793 },
-  { -0.079132716267092035, 50, 0,
-          1.0995574287564276 },
-  { 0.32232921941301440, 50, 0,
-          1.2566370614359172 },
-  { 0.025253991969481446, 50, 0,
-          1.4137166941154069 },
-  { -0.31830208724152359, 50, 0,
-          1.5707963267948966 },
-  { 0.025253991969476128, 50, 0,
-          1.7278759594743860 },
-  { 0.32232921941301479, 50, 0,
-          1.8849555921538759 },
-  { -0.079132716267090078, 50, 0,
-          2.0420352248333655 },
-  { -0.33636199170850811, 50, 0,
-          2.1991148575128552 },
-  { 0.14571730283563306, 50, 0,
-          2.3561944901923448 },
-  { 0.36926172901532717, 50, 0,
-          2.5132741228718345 },
-  { -0.24876032079677393, 50, 0,
-          2.6703537555513241 },
-  { -0.46056183476301349, 50, 0,
-          2.8274333882308138 },
-  { 0.53157537495172380, 50, 0,
-          2.9845130209103035 },
-  { 2.8350175706934717, 50, 0,
-          3.1415926535897931 },
+  { 0.0000000000000000, 20, 20, 
+         0.0000000000000000, 0.0 },
+  { 4.9264471419250786e-17, 20, 20, 
+         0.15707963267948966, 0.0 },
+  { 4.0321091681530921e-11, 20, 20, 
+         0.31415926535897931, 0.0 },
+  { 8.8474944184471664e-08, 20, 20, 
+         0.47123889803846897, 0.0 },
+  { 1.5497395129387791e-05, 20, 20, 
+         0.62831853071795862, 0.0 },
+  { 0.00062457564282984495, 20, 20, 
+         0.78539816339744828, 0.0 },
+  { 0.0092265192458967308, 20, 20, 
+         0.94247779607693793, 0.0 },
+  { 0.063606673236323297, 20, 20, 
+         1.0995574287564276, 0.0 },
+  { 0.23442909509776316, 20, 20, 
+         1.2566370614359172, 0.0 },
+  { 0.49921030481087009, 20, 20, 
+         1.4137166941154069, 0.0 },
+  { 0.63956545825776223, 20, 20, 
+         1.5707963267948966, 0.0 },
+  { 0.49921030481087025, 20, 20, 
+         1.7278759594743862, 0.0 },
+  { 0.23442909509776336, 20, 20, 
+         1.8849555921538759, 0.0 },
+  { 0.063606673236323324, 20, 20, 
+         2.0420352248333655, 0.0 },
+  { 0.0092265192458967742, 20, 20, 
+         2.1991148575128552, 0.0 },
+  { 0.00062457564282984766, 20, 20, 
+         2.3561944901923448, 0.0 },
+  { 1.5497395129387764e-05, 20, 20, 
+         2.5132741228718345, 0.0 },
+  { 8.8474944184472617e-08, 20, 20, 
+         2.6703537555513241, 0.0 },
+  { 4.0321091681531780e-11, 20, 20, 
+         2.8274333882308138, 0.0 },
+  { 4.9264471419250786e-17, 20, 20, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 20, 20, 
+         3.1415926535897931, 0.0 },
 };
+const double toler021 = 2.5000000000000020e-13;
 
-// Test function for l=50, m=0.
-template <typename Tp>
-void test022()
+// Test data for l=50, m=0.
+// max(|f - f_GSL|): 4.8849813083506888e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 9.1896305557688689e-15
+// mean(f - f_GSL): -4.0592529337857286e-16
+// variance(f - f_GSL): 8.6507055497352237e-33
+// stddev(f - f_GSL): 9.3009169170223341e-17
+const testcase_sph_legendre<double>
+data022[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data022)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data022[i].l), Tp(data022[i].m),
-                   Tp(data022[i].theta));
-      const Tp f0 = data022[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for l=50, m=1.
-testcase_sph_legendre<double> data023[] = {
-  { 0.0000000000000000, 50, 1,
-          0.0000000000000000 },
-  { -0.63751752155226116, 50, 1,
-          0.15707963267948966 },
-  { -0.32616619317604312, 50, 1,
-          0.31415926535897931 },
-  { 0.40649930826162706, 50, 1,
-          0.47123889803846897 },
-  { 0.18473991408344026, 50, 1,
-          0.62831853071795862 },
-  { -0.35083930302013211, 50, 1,
-          0.78539816339744828 },
-  { -0.10755382110947098, 50, 1,
-          0.94247779607693793 },
-  { 0.32822568316499862, 50, 1,
-          1.0995574287564276 },
-  { 0.050286056609798180, 50, 1,
-          1.2566370614359172 },
-  { -0.31935368562159638, 50, 1,
-          1.4137166941154069 },
-  { -9.8421602686195941e-16, 50, 1,
-          1.5707963267948966 },
-  { 0.31935368562159705, 50, 1,
-          1.7278759594743860 },
-  { -0.050286056609795383, 50, 1,
-          1.8849555921538759 },
-  { -0.32822568316499923, 50, 1,
-          2.0420352248333655 },
-  { 0.10755382110947098, 50, 1,
-          2.1991148575128552 },
-  { 0.35083930302013211, 50, 1,
-          2.3561944901923448 },
-  { -0.18473991408343632, 50, 1,
-          2.5132741228718345 },
-  { -0.40649930826163039, 50, 1,
-          2.6703537555513241 },
-  { 0.32616619317604312, 50, 1,
-          2.8274333882308138 },
-  { 0.63751752155227837, 50, 1,
-          2.9845130209103035 },
-  { 0.0000000000000000, 50, 1,
-          3.1415926535897931 },
+  { 2.8350175706934717, 50, 0, 
+         0.0000000000000000, 0.0 },
+  { 0.53157537495172758, 50, 0, 
+         0.15707963267948966, 0.0 },
+  { -0.46056183476300561, 50, 0, 
+         0.31415926535897931, 0.0 },
+  { -0.24876032079677909, 50, 0, 
+         0.47123889803846897, 0.0 },
+  { 0.36926172901532667, 50, 0, 
+         0.62831853071795862, 0.0 },
+  { 0.14571730283563575, 50, 0, 
+         0.78539816339744828, 0.0 },
+  { -0.33636199170850750, 50, 0, 
+         0.94247779607693793, 0.0 },
+  { -0.079132716267091507, 50, 0, 
+         1.0995574287564276, 0.0 },
+  { 0.32232921941301451, 50, 0, 
+         1.2566370614359172, 0.0 },
+  { 0.025253991969481544, 50, 0, 
+         1.4137166941154069, 0.0 },
+  { -0.31830208724152359, 50, 0, 
+         1.5707963267948966, 0.0 },
+  { 0.025253991969479882, 50, 0, 
+         1.7278759594743862, 0.0 },
+  { 0.32232921941301479, 50, 0, 
+         1.8849555921538759, 0.0 },
+  { -0.079132716267090064, 50, 0, 
+         2.0420352248333655, 0.0 },
+  { -0.33636199170850883, 50, 0, 
+         2.1991148575128552, 0.0 },
+  { 0.14571730283563347, 50, 0, 
+         2.3561944901923448, 0.0 },
+  { 0.36926172901532522, 50, 0, 
+         2.5132741228718345, 0.0 },
+  { -0.24876032079677354, 50, 0, 
+         2.6703537555513241, 0.0 },
+  { -0.46056183476301255, 50, 0, 
+         2.8274333882308138, 0.0 },
+  { 0.53157537495172758, 50, 0, 
+         2.9845130209103035, 0.0 },
+  { 2.8350175706934717, 50, 0, 
+         3.1415926535897931, 0.0 },
 };
+const double toler022 = 5.0000000000000039e-13;
 
-// Test function for l=50, m=1.
-template <typename Tp>
-void test023()
+// Test data for l=50, m=1.
+// max(|f - f_GSL|): 7.8825834748386114e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.6168319946399610e-14
+// mean(f - f_GSL): -8.8223079635391627e-17
+// variance(f - f_GSL): 4.0862386846851427e-34
+// stddev(f - f_GSL): 2.0214447023564960e-17
+const testcase_sph_legendre<double>
+data023[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data023)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data023[i].l), Tp(data023[i].m),
-                   Tp(data023[i].theta));
-      const Tp f0 = data023[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for l=50, m=2.
-testcase_sph_legendre<double> data024[] = {
-  { 0.0000000000000000, 50, 2,
-          0.0000000000000000 },
-  { -0.37230261163839168, 50, 2,
-          0.15707963267948966 },
-  { 0.50051599680315972, 50, 2,
-          0.31415926535897931 },
-  { 0.21724795180329545, 50, 2,
-          0.47123889803846897 },
-  { -0.37948127307610940, 50, 2,
-          0.62831853071795862 },
-  { -0.13187372121003119, 50, 2,
-          0.78539816339744828 },
-  { 0.33959009162400194, 50, 2,
-          0.94247779607693793 },
-  { 0.072537503112490409, 50, 2,
-          1.0995574287564276 },
-  { -0.32310306941855271, 50, 2,
-          1.2566370614359172 },
-  { -0.023259822816436588, 50, 2,
-          1.4137166941154069 },
-  { 0.31842698506357275, 50, 2,
-          1.5707963267948966 },
-  { -0.023259822816431144, 50, 2,
-          1.7278759594743860 },
-  { -0.32310306941855299, 50, 2,
-          1.8849555921538759 },
-  { 0.072537503112488369, 50, 2,
-          2.0420352248333655 },
-  { 0.33959009162400194, 50, 2,
-          2.1991148575128552 },
-  { -0.13187372121003119, 50, 2,
-          2.3561944901923448 },
-  { -0.37948127307611074, 50, 2,
-          2.5132741228718345 },
-  { 0.21724795180328935, 50, 2,
-          2.6703537555513241 },
-  { 0.50051599680315972, 50, 2,
-          2.8274333882308138 },
-  { -0.37230261163836298, 50, 2,
-          2.9845130209103035 },
-  { 0.0000000000000000, 50, 2,
-          3.1415926535897931 },
+  { 0.0000000000000000, 50, 1, 
+         0.0000000000000000, 0.0 },
+  { -0.63751752155228247, 50, 1, 
+         0.15707963267948966, 0.0 },
+  { -0.32616619317605133, 50, 1, 
+         0.31415926535897931, 0.0 },
+  { 0.40649930826162850, 50, 1, 
+         0.47123889803846897, 0.0 },
+  { 0.18473991408343635, 50, 1, 
+         0.62831853071795862, 0.0 },
+  { -0.35083930302013117, 50, 1, 
+         0.78539816339744828, 0.0 },
+  { -0.10755382110947342, 50, 1, 
+         0.94247779607693793, 0.0 },
+  { 0.32822568316499900, 50, 1, 
+         1.0995574287564276, 0.0 },
+  { 0.050286056609797389, 50, 1, 
+         1.2566370614359172, 0.0 },
+  { -0.31935368562159644, 50, 1, 
+         1.4137166941154069, 0.0 },
+  { -9.8421602686195843e-16, 50, 1, 
+         1.5707963267948966, 0.0 },
+  { 0.31935368562159649, 50, 1, 
+         1.7278759594743862, 0.0 },
+  { -0.050286056609795446, 50, 1, 
+         1.8849555921538759, 0.0 },
+  { -0.32822568316499923, 50, 1, 
+         2.0420352248333655, 0.0 },
+  { 0.10755382110946902, 50, 1, 
+         2.1991148575128552, 0.0 },
+  { 0.35083930302013205, 50, 1, 
+         2.3561944901923448, 0.0 },
+  { -0.18473991408344057, 50, 1, 
+         2.5132741228718345, 0.0 },
+  { -0.40649930826163011, 50, 1, 
+         2.6703537555513241, 0.0 },
+  { 0.32616619317604606, 50, 1, 
+         2.8274333882308138, 0.0 },
+  { 0.63751752155228247, 50, 1, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 50, 1, 
+         3.1415926535897931, 0.0 },
 };
+const double toler023 = 1.0000000000000008e-12;
 
-// Test function for l=50, m=2.
-template <typename Tp>
-void test024()
+// Test data for l=50, m=2.
+// max(|f - f_GSL|): 3.7747582837255322e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.3049193367556654e-14
+// mean(f - f_GSL): 2.4038311024250043e-16
+// variance(f - f_GSL): 3.0336620837175507e-33
+// stddev(f - f_GSL): 5.5078689923758629e-17
+const testcase_sph_legendre<double>
+data024[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data024)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data024[i].l), Tp(data024[i].m),
-                   Tp(data024[i].theta));
-      const Tp f0 = data024[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-}
-
-// Test data for l=50, m=5.
-testcase_sph_legendre<double> data025[] = {
-  { 0.0000000000000000, 50, 5,
-          0.0000000000000000 },
-  { -0.57750385903193069, 50, 5,
-          0.15707963267948966 },
-  { 0.077360497065584566, 50, 5,
-          0.31415926535897931 },
-  { 0.47707267400540210, 50, 5,
-          0.47123889803846897 },
-  { 0.055370615126630537, 50, 5,
-          0.62831853071795862 },
-  { -0.37629451847202855, 50, 5,
-          0.78539816339744828 },
-  { -0.048042277801960624, 50, 5,
-          0.94247779607693793 },
-  { 0.33619379362228685, 50, 5,
-          1.0995574287564276 },
-  { 0.025265227185719726, 50, 5,
-          1.2566370614359172 },
-  { -0.32083679430964518, 50, 5,
-          1.4137166941154069 },
-  { -9.8189201019751884e-16, 50, 5,
-          1.5707963267948966 },
-  { 0.32083679430964590, 50, 5,
-          1.7278759594743860 },
-  { -0.025265227185716856, 50, 5,
-          1.8849555921538759 },
-  { -0.33619379362228730, 50, 5,
-          2.0420352248333655 },
-  { 0.048042277801960624, 50, 5,
-          2.1991148575128552 },
-  { 0.37629451847202855, 50, 5,
-          2.3561944901923448 },
-  { -0.055370615126626936, 50, 5,
-          2.5132741228718345 },
-  { -0.47707267400540210, 50, 5,
-          2.6703537555513241 },
-  { -0.077360497065584566, 50, 5,
-          2.8274333882308138 },
-  { 0.57750385903191004, 50, 5,
-          2.9845130209103035 },
-  { 0.0000000000000000, 50, 5,
-          3.1415926535897931 },
+  { 0.0000000000000000, 50, 2, 
+         0.0000000000000000, 0.0 },
+  { -0.37230261163836259, 50, 2, 
+         0.15707963267948966, 0.0 },
+  { 0.50051599680315517, 50, 2, 
+         0.31415926535897931, 0.0 },
+  { 0.21724795180329495, 50, 2, 
+         0.47123889803846897, 0.0 },
+  { -0.37948127307611107, 50, 2, 
+         0.62831853071795862, 0.0 },
+  { -0.13187372121003413, 50, 2, 
+         0.78539816339744828, 0.0 },
+  { 0.33959009162400128, 50, 2, 
+         0.94247779607693793, 0.0 },
+  { 0.072537503112489563, 50, 2, 
+         1.0995574287564276, 0.0 },
+  { -0.32310306941855266, 50, 2, 
+         1.2566370614359172, 0.0 },
+  { -0.023259822816436636, 50, 2, 
+         1.4137166941154069, 0.0 },
+  { 0.31842698506357275, 50, 2, 
+         1.5707963267948966, 0.0 },
+  { -0.023259822816434638, 50, 2, 
+         1.7278759594743862, 0.0 },
+  { -0.32310306941855316, 50, 2, 
+         1.8849555921538759, 0.0 },
+  { 0.072537503112488411, 50, 2, 
+         2.0420352248333655, 0.0 },
+  { 0.33959009162400267, 50, 2, 
+         2.1991148575128552, 0.0 },
+  { -0.13187372121003124, 50, 2, 
+         2.3561944901923448, 0.0 },
+  { -0.37948127307610924, 50, 2, 
+         2.5132741228718345, 0.0 },
+  { 0.21724795180329090, 50, 2, 
+         2.6703537555513241, 0.0 },
+  { 0.50051599680316095, 50, 2, 
+         2.8274333882308138, 0.0 },
+  { -0.37230261163836259, 50, 2, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 50, 2, 
+         3.1415926535897931, 0.0 },
 };
+const double toler024 = 1.0000000000000008e-12;
 
-// Test function for l=50, m=5.
-template <typename Tp>
-void test025()
+// Test data for l=50, m=5.
+// max(|f - f_GSL|): 6.4254157550180935e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 8.3058098108785765e-14
+// mean(f - f_GSL): 3.9419525844577751e-16
+// variance(f - f_GSL): 8.1579698435094999e-33
+// stddev(f - f_GSL): 9.0321480521022794e-17
+const testcase_sph_legendre<double>
+data025[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data025)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data025[i].l), Tp(data025[i].m),
-                   Tp(data025[i].theta));
-      const Tp f0 = data025[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
-
-// Test data for l=50, m=10.
-testcase_sph_legendre<double> data026[] = {
-  { 0.0000000000000000, 50, 10,
-          0.0000000000000000 },
-  { 0.15606941844800759, 50, 10,
-          0.15707963267948966 },
-  { -0.53748868836814601, 50, 10,
-          0.31415926535897931 },
-  { -0.49304919025183896, 50, 10,
-          0.47123889803846897 },
-  { -0.26267582750428264, 50, 10,
-          0.62831853071795862 },
-  { 0.22058983666314402, 50, 10,
-          0.78539816339744828 },
-  { 0.32936725160671759, 50, 10,
-          0.94247779607693793 },
-  { -0.092053311559446988, 50, 10,
-          1.0995574287564276 },
-  { -0.32542913495935555, 50, 10,
-          1.2566370614359172 },
-  { 0.025673223789103500, 50, 10,
-          1.4137166941154069 },
-  { 0.32150019350255743, 50, 10,
-          1.5707963267948966 },
-  { 0.025673223789108864, 50, 10,
-          1.7278759594743860 },
-  { -0.32542913495935494, 50, 10,
-          1.8849555921538759 },
-  { -0.092053311559448570, 50, 10,
-          2.0420352248333655 },
-  { 0.32936725160671759, 50, 10,
-          2.1991148575128552 },
-  { 0.22058983666314402, 50, 10,
-          2.3561944901923448 },
-  { -0.26267582750427909, 50, 10,
-          2.5132741228718345 },
-  { -0.49304919025184119, 50, 10,
-          2.6703537555513241 },
-  { -0.53748868836814601, 50, 10,
-          2.8274333882308138 },
-  { 0.15606941844801259, 50, 10,
-          2.9845130209103035 },
-  { 0.0000000000000000, 50, 10,
-          3.1415926535897931 },
+  { 0.0000000000000000, 50, 5, 
+         0.0000000000000000, 0.0 },
+  { -0.57750385903191603, 50, 5, 
+         0.15707963267948966, 0.0 },
+  { 0.077360497065570286, 50, 5, 
+         0.31415926535897931, 0.0 },
+  { 0.47707267400540226, 50, 5, 
+         0.47123889803846897, 0.0 },
+  { 0.055370615126626811, 50, 5, 
+         0.62831853071795862, 0.0 },
+  { -0.37629451847202833, 50, 5, 
+         0.78539816339744828, 0.0 },
+  { -0.048042277801963115, 50, 5, 
+         0.94247779607693793, 0.0 },
+  { 0.33619379362228718, 50, 5, 
+         1.0995574287564276, 0.0 },
+  { 0.025265227185718764, 50, 5, 
+         1.2566370614359172, 0.0 },
+  { -0.32083679430964535, 50, 5, 
+         1.4137166941154069, 0.0 },
+  { -9.8189201019751726e-16, 50, 5, 
+         1.5707963267948966, 0.0 },
+  { 0.32083679430964546, 50, 5, 
+         1.7278759594743862, 0.0 },
+  { -0.025265227185716790, 50, 5, 
+         1.8849555921538759, 0.0 },
+  { -0.33619379362228730, 50, 5, 
+         2.0420352248333655, 0.0 },
+  { 0.048042277801958064, 50, 5, 
+         2.1991148575128552, 0.0 },
+  { 0.37629451847202872, 50, 5, 
+         2.3561944901923448, 0.0 },
+  { -0.055370615126630517, 50, 5, 
+         2.5132741228718345, 0.0 },
+  { -0.47707267400540176, 50, 5, 
+         2.6703537555513241, 0.0 },
+  { -0.077360497065588632, 50, 5, 
+         2.8274333882308138, 0.0 },
+  { 0.57750385903191603, 50, 5, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 50, 5, 
+         3.1415926535897931, 0.0 },
 };
+const double toler025 = 5.0000000000000029e-12;
 
-// Test function for l=50, m=10.
-template <typename Tp>
-void test026()
+// Test data for l=50, m=10.
+// max(|f - f_GSL|): 4.2188474935755949e-15 at index 17
+// max(|f - f_GSL| / |f_GSL|): 8.5566462271658482e-15
+// mean(f - f_GSL): 2.1378401694418937e-16
+// variance(f - f_GSL): 2.3994393097916561e-33
+// stddev(f - f_GSL): 4.8984072000923484e-17
+const testcase_sph_legendre<double>
+data026[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data026)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data026[i].l), Tp(data026[i].m),
-                   Tp(data026[i].theta));
-      const Tp f0 = data026[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=50, m=20.
-testcase_sph_legendre<double> data027[] = {
-  { 0.0000000000000000, 50, 20,
-          0.0000000000000000 },
-  { 3.0409598712833082e-07, 50, 20,
-          0.15707963267948966 },
-  { 0.030940518122882305, 50, 20,
-          0.31415926535897931 },
-  { 0.64134588721659935, 50, 20,
-          0.47123889803846897 },
-  { 0.29895244392136394, 50, 20,
-          0.62831853071795862 },
-  { 0.25309324781874065, 50, 20,
-          0.78539816339744828 },
-  { 0.34368634714931712, 50, 20,
-          0.94247779607693793 },
-  { 0.33996764360663956, 50, 20,
-          1.0995574287564276 },
-  { 0.12866267745104118, 50, 20,
-          1.2566370614359172 },
-  { -0.18201114398922874, 50, 20,
-          1.4137166941154069 },
-  { -0.33216683431510857, 50, 20,
-          1.5707963267948966 },
-  { -0.18201114398923304, 50, 20,
-          1.7278759594743860 },
-  { 0.12866267745103846, 50, 20,
-          1.8849555921538759 },
-  { 0.33996764360663906, 50, 20,
-          2.0420352248333655 },
-  { 0.34368634714931712, 50, 20,
-          2.1991148575128552 },
-  { 0.25309324781874065, 50, 20,
-          2.3561944901923448 },
-  { 0.29895244392136738, 50, 20,
-          2.5132741228718345 },
-  { 0.64134588721659791, 50, 20,
-          2.6703537555513241 },
-  { 0.030940518122882305, 50, 20,
-          2.8274333882308138 },
-  { 3.0409598712835877e-07, 50, 20,
-          2.9845130209103035 },
-  { 0.0000000000000000, 50, 20,
-          3.1415926535897931 },
+  { 0.0000000000000000, 50, 10, 
+         0.0000000000000000, 0.0 },
+  { 0.15606941844801256, 50, 10, 
+         0.15707963267948966, 0.0 },
+  { -0.53748868836814168, 50, 10, 
+         0.31415926535897931, 0.0 },
+  { -0.49304919025183969, 50, 10, 
+         0.47123889803846897, 0.0 },
+  { -0.26267582750427920, 50, 10, 
+         0.62831853071795862, 0.0 },
+  { 0.22058983666314153, 50, 10, 
+         0.78539816339744828, 0.0 },
+  { 0.32936725160671843, 50, 10, 
+         0.94247779607693793, 0.0 },
+  { -0.092053311559447959, 50, 10, 
+         1.0995574287564276, 0.0 },
+  { -0.32542913495935522, 50, 10, 
+         1.2566370614359172, 0.0 },
+  { 0.025673223789103351, 50, 10, 
+         1.4137166941154069, 0.0 },
+  { 0.32150019350255743, 50, 10, 
+         1.5707963267948966, 0.0 },
+  { 0.025673223789105259, 50, 10, 
+         1.7278759594743862, 0.0 },
+  { -0.32542913495935510, 50, 10, 
+         1.8849555921538759, 0.0 },
+  { -0.092053311559449028, 50, 10, 
+         2.0420352248333655, 0.0 },
+  { 0.32936725160671687, 50, 10, 
+         2.1991148575128552, 0.0 },
+  { 0.22058983666314380, 50, 10, 
+         2.3561944901923448, 0.0 },
+  { -0.26267582750428364, 50, 10, 
+         2.5132741228718345, 0.0 },
+  { -0.49304919025184135, 50, 10, 
+         2.6703537555513241, 0.0 },
+  { -0.53748868836814501, 50, 10, 
+         2.8274333882308138, 0.0 },
+  { 0.15606941844801256, 50, 10, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 50, 10, 
+         3.1415926535897931, 0.0 },
 };
+const double toler026 = 5.0000000000000039e-13;
 
-// Test function for l=50, m=20.
-template <typename Tp>
-void test027()
+// Test data for l=50, m=20.
+// max(|f - f_GSL|): 5.3290705182007514e-15 at index 17
+// max(|f - f_GSL| / |f_GSL|): 8.3091988651062939e-15
+// mean(f - f_GSL): -6.3705667112909982e-16
+// variance(f - f_GSL): 2.1306663117079729e-32
+// stddev(f - f_GSL): 1.4596802087128444e-16
+const testcase_sph_legendre<double>
+data027[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data027)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data027[i].l), Tp(data027[i].m),
-                   Tp(data027[i].theta));
-      const Tp f0 = data027[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for l=50, m=50.
-testcase_sph_legendre<double> data028[] = {
-  { 0.0000000000000000, 50, 50,
-          0.0000000000000000 },
-  { 4.1649039898151844e-41, 50, 50,
-          0.15707963267948966 },
-  { 2.5240684647724192e-26, 50, 50,
-          0.31415926535897931 },
-  { 5.6927376423967334e-18, 50, 50,
-          0.47123889803846897 },
-  { 2.3116239814797057e-12, 50, 50,
-          0.62831853071795862 },
-  { 2.3835981241325311e-08, 50, 50,
-          0.78539816339744828 },
-  { 1.9992410287270356e-05, 50, 50,
-          0.94247779607693793 },
-  { 0.0024947505670829791, 50, 50,
-          1.0995574287564276 },
-  { 0.065057774647971175, 50, 50,
-          1.2566370614359172 },
-  { 0.43050607056732243, 50, 50,
-          1.4137166941154069 },
-  { 0.79980281171531975, 50, 50,
-          1.5707963267948966 },
-  { 0.43050607056732360, 50, 50,
-          1.7278759594743860 },
-  { 0.065057774647971384, 50, 50,
-          1.8849555921538759 },
-  { 0.0024947505670829856, 50, 50,
-          2.0420352248333655 },
-  { 1.9992410287270356e-05, 50, 50,
-          2.1991148575128552 },
-  { 2.3835981241325311e-08, 50, 50,
-          2.3561944901923448 },
-  { 2.3116239814797222e-12, 50, 50,
-          2.5132741228718345 },
-  { 5.6927376423968544e-18, 50, 50,
-          2.6703537555513241 },
-  { 2.5240684647724192e-26, 50, 50,
-          2.8274333882308138 },
-  { 4.1649039898161316e-41, 50, 50,
-          2.9845130209103035 },
-  { 0.0000000000000000, 50, 50,
-          3.1415926535897931 },
+  { 0.0000000000000000, 50, 20, 
+         0.0000000000000000, 0.0 },
+  { 3.0409598712835887e-07, 50, 20, 
+         0.15707963267948966, 0.0 },
+  { 0.030940518122881844, 50, 20, 
+         0.31415926535897931, 0.0 },
+  { 0.64134588721659802, 50, 20, 
+         0.47123889803846897, 0.0 },
+  { 0.29895244392136594, 50, 20, 
+         0.62831853071795862, 0.0 },
+  { 0.25309324781873871, 50, 20, 
+         0.78539816339744828, 0.0 },
+  { 0.34368634714931567, 50, 20, 
+         0.94247779607693793, 0.0 },
+  { 0.33996764360663945, 50, 20, 
+         1.0995574287564276, 0.0 },
+  { 0.12866267745104024, 50, 20, 
+         1.2566370614359172, 0.0 },
+  { -0.18201114398922874, 50, 20, 
+         1.4137166941154069, 0.0 },
+  { -0.33216683431510857, 50, 20, 
+         1.5707963267948966, 0.0 },
+  { -0.18201114398923010, 50, 20, 
+         1.7278759594743862, 0.0 },
+  { 0.12866267745103857, 50, 20, 
+         1.8849555921538759, 0.0 },
+  { 0.33996764360663895, 50, 20, 
+         2.0420352248333655, 0.0 },
+  { 0.34368634714931812, 50, 20, 
+         2.1991148575128552, 0.0 },
+  { 0.25309324781874126, 50, 20, 
+         2.3561944901923448, 0.0 },
+  { 0.29895244392136405, 50, 20, 
+         2.5132741228718345, 0.0 },
+  { 0.64134588721659869, 50, 20, 
+         2.6703537555513241, 0.0 },
+  { 0.030940518122882274, 50, 20, 
+         2.8274333882308138, 0.0 },
+  { 3.0409598712835887e-07, 50, 20, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 50, 20, 
+         3.1415926535897931, 0.0 },
 };
+const double toler027 = 5.0000000000000039e-13;
 
-// Test function for l=50, m=50.
-template <typename Tp>
-void test028()
+// Test data for l=50, m=50.
+// max(|f - f_GSL|): 8.8817841970012523e-16 at index 10
+// max(|f - f_GSL| / |f_GSL|): 1.6947090122367552e-15
+// mean(f - f_GSL): 8.9876810627650302e-17
+// variance(f - f_GSL): 4.2408665715142198e-34
+// stddev(f - f_GSL): 2.0593364396120950e-17
+const testcase_sph_legendre<double>
+data028[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data028)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data028[i].l), Tp(data028[i].m),
-                   Tp(data028[i].theta));
-      const Tp f0 = data028[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=100, m=0.
-testcase_sph_legendre<double> data029[] = {
-  { 3.9993839251484076, 100, 0,
-          0.0000000000000000 },
-  { -0.60770160285935471, 100, 0,
-          0.15707963267948966 },
-  { 0.46193027883956100, 100, 0,
-          0.31415926535897931 },
-  { -0.40218718869815234, 100, 0,
-          0.47123889803846897 },
-  { 0.36960201406910737, 100, 0,
-          0.62831853071795862 },
-  { -0.34953726547378611, 100, 0,
-          0.78539816339744828 },
-  { 0.33646959352497846, 100, 0,
-          0.94247779607693793 },
-  { -0.32784733067663169, 100, 0,
-          1.0995574287564276 },
-  { 0.32235624474047936, 100, 0,
-          1.2566370614359172 },
-  { -0.31929330706601283, 100, 0,
-          1.4137166941154069 },
-  { 0.31830791662110325, 100, 0,
-          1.5707963267948966 },
-  { -0.31929330706601389, 100, 0,
-          1.7278759594743860 },
-  { 0.32235624474048052, 100, 0,
-          1.8849555921538759 },
-  { -0.32784733067663291, 100, 0,
-          2.0420352248333655 },
-  { 0.33646959352497846, 100, 0,
-          2.1991148575128552 },
-  { -0.34953726547378611, 100, 0,
-          2.3561944901923448 },
-  { 0.36960201406911114, 100, 0,
-          2.5132741228718345 },
-  { -0.40218718869815695, 100, 0,
-          2.6703537555513241 },
-  { 0.46193027883956100, 100, 0,
-          2.8274333882308138 },
-  { -0.60770160285939478, 100, 0,
-          2.9845130209103035 },
-  { 3.9993839251484076, 100, 0,
-          3.1415926535897931 },
+  { 0.0000000000000000, 50, 50, 
+         0.0000000000000000, 0.0 },
+  { 4.1649039898161316e-41, 50, 50, 
+         0.15707963267948966, 0.0 },
+  { 2.5240684647722935e-26, 50, 50, 
+         0.31415926535897931, 0.0 },
+  { 5.6927376423967334e-18, 50, 50, 
+         0.47123889803846897, 0.0 },
+  { 2.3116239814797222e-12, 50, 50, 
+         0.62831853071795862, 0.0 },
+  { 2.3835981241325056e-08, 50, 50, 
+         0.78539816339744828, 0.0 },
+  { 1.9992410287270217e-05, 50, 50, 
+         0.94247779607693793, 0.0 },
+  { 0.0024947505670829830, 50, 50, 
+         1.0995574287564276, 0.0 },
+  { 0.065057774647971231, 50, 50, 
+         1.2566370614359172, 0.0 },
+  { 0.43050607056732243, 50, 50, 
+         1.4137166941154069, 0.0 },
+  { 0.79980281171531975, 50, 50, 
+         1.5707963267948966, 0.0 },
+  { 0.43050607056732287, 50, 50, 
+         1.7278759594743862, 0.0 },
+  { 0.065057774647971398, 50, 50, 
+         1.8849555921538759, 0.0 },
+  { 0.0024947505670829878, 50, 50, 
+         2.0420352248333655, 0.0 },
+  { 1.9992410287270430e-05, 50, 50, 
+         2.1991148575128552, 0.0 },
+  { 2.3835981241325311e-08, 50, 50, 
+         2.3561944901923448, 0.0 },
+  { 2.3116239814797057e-12, 50, 50, 
+         2.5132741228718345, 0.0 },
+  { 5.6927376423968952e-18, 50, 50, 
+         2.6703537555513241, 0.0 },
+  { 2.5240684647724192e-26, 50, 50, 
+         2.8274333882308138, 0.0 },
+  { 4.1649039898161316e-41, 50, 50, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 50, 50, 
+         3.1415926535897931, 0.0 },
 };
+const double toler028 = 2.5000000000000020e-13;
 
-// Test function for l=100, m=0.
-template <typename Tp>
-void test029()
+// Test data for l=100, m=0.
+// max(|f - f_GSL|): 2.2759572004815709e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 4.9270578369513465e-15
+// mean(f - f_GSL): -2.0618427600181479e-16
+// variance(f - f_GSL): 2.2318776726956083e-33
+// stddev(f - f_GSL): 4.7242752594399153e-17
+const testcase_sph_legendre<double>
+data029[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data029)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data029[i].l), Tp(data029[i].m),
-                   Tp(data029[i].theta));
-      const Tp f0 = data029[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
-
-// Test data for l=100, m=1.
-testcase_sph_legendre<double> data030[] = {
-  { 0.0000000000000000, 100, 1,
-          0.0000000000000000 },
-  { -0.50851949013719622, 100, 1,
-          0.15707963267948966 },
-  { 0.33129641402221310, 100, 1,
-          0.31415926535897931 },
-  { -0.24390405750942562, 100, 1,
-          0.47123889803846897 },
-  { 0.18659755088414165, 100, 1,
-          0.62831853071795862 },
-  { -0.14355908970516640, 100, 1,
-          0.78539816339744828 },
-  { 0.10844906813251093, 100, 1,
-          0.94247779607693793 },
-  { -0.078100088690859812, 100, 1,
-          1.0995574287564276 },
-  { 0.050670002998304528, 100, 1,
-          1.2566370614359172 },
-  { -0.024941251747138762, 100, 1,
-          1.4137166941154069 },
-  { 1.9587949830851639e-15, 100, 1,
-          1.5707963267948966 },
-  { 0.024941251747127649, 100, 1,
-          1.7278759594743860 },
-  { -0.050670002998298595, 100, 1,
-          1.8849555921538759 },
-  { 0.078100088690855676, 100, 1,
-          2.0420352248333655 },
-  { -0.10844906813251093, 100, 1,
-          2.1991148575128552 },
-  { 0.14355908970516640, 100, 1,
-          2.3561944901923448 },
-  { -0.18659755088413349, 100, 1,
-          2.5132741228718345 },
-  { 0.24390405750941485, 100, 1,
-          2.6703537555513241 },
-  { -0.33129641402221310, 100, 1,
-          2.8274333882308138 },
-  { 0.50851949013714548, 100, 1,
-          2.9845130209103035 },
-  { 0.0000000000000000, 100, 1,
-          3.1415926535897931 },
+  { 3.9993839251484076, 100, 0, 
+         0.0000000000000000, 0.0 },
+  { -0.60770160285939456, 100, 0, 
+         0.15707963267948966, 0.0 },
+  { 0.46193027883954441, 100, 0, 
+         0.31415926535897931, 0.0 },
+  { -0.40218718869815234, 100, 0, 
+         0.47123889803846897, 0.0 },
+  { 0.36960201406911097, 100, 0, 
+         0.62831853071795862, 0.0 },
+  { -0.34953726547378389, 100, 0, 
+         0.78539816339744828, 0.0 },
+  { 0.33646959352497730, 100, 0, 
+         0.94247779607693793, 0.0 },
+  { -0.32784733067663224, 100, 0, 
+         1.0995574287564276, 0.0 },
+  { 0.32235624474047969, 100, 0, 
+         1.2566370614359172, 0.0 },
+  { -0.31929330706601350, 100, 0, 
+         1.4137166941154069, 0.0 },
+  { 0.31830791662110325, 100, 0, 
+         1.5707963267948966, 0.0 },
+  { -0.31929330706601333, 100, 0, 
+         1.7278759594743862, 0.0 },
+  { 0.32235624474048036, 100, 0, 
+         1.8849555921538759, 0.0 },
+  { -0.32784733067663291, 100, 0, 
+         2.0420352248333655, 0.0 },
+  { 0.33646959352498013, 100, 0, 
+         2.1991148575128552, 0.0 },
+  { -0.34953726547378589, 100, 0, 
+         2.3561944901923448, 0.0 },
+  { 0.36960201406910725, 100, 0, 
+         2.5132741228718345, 0.0 },
+  { -0.40218718869815723, 100, 0, 
+         2.6703537555513241, 0.0 },
+  { 0.46193027883955923, 100, 0, 
+         2.8274333882308138, 0.0 },
+  { -0.60770160285939456, 100, 0, 
+         2.9845130209103035, 0.0 },
+  { 3.9993839251484076, 100, 0, 
+         3.1415926535897931, 0.0 },
 };
+const double toler029 = 2.5000000000000020e-13;
 
-// Test function for l=100, m=1.
-template <typename Tp>
-void test030()
+// Test data for l=100, m=1.
+// max(|f - f_GSL|): 4.7184478546569153e-15 at index 18
+// max(|f - f_GSL| / |f_GSL|): 1.6136152688198031e-14
+// mean(f - f_GSL): 1.7347234759767562e-17
+// variance(f - f_GSL): 1.5798644075050619e-35
+// stddev(f - f_GSL): 3.9747508192401971e-18
+const testcase_sph_legendre<double>
+data030[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data030)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data030[i].l), Tp(data030[i].m),
-                   Tp(data030[i].theta));
-      const Tp f0 = data030[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
-
-// Test data for l=100, m=2.
-testcase_sph_legendre<double> data031[] = {
-  { 0.0000000000000000, 100, 2,
-          0.0000000000000000 },
-  { 0.67166274297194040, 100, 2,
-          0.15707963267948966 },
-  { -0.48226933687995144, 100, 2,
-          0.31415926535897931 },
-  { 0.41175421895715447, 100, 2,
-          0.47123889803846897 },
-  { -0.37475021787822460, 100, 2,
-          0.62831853071795862 },
-  { 0.35242909383605475, 100, 2,
-          0.78539816339744828 },
-  { -0.33807110409160002, 100, 2,
-          0.94247779607693793 },
-  { 0.32867180390709999, 100, 2,
-          1.0995574287564276 },
-  { -0.32271583790278469, 100, 2,
-          1.2566370614359172 },
-  { 0.31940354677687433, 100, 2,
-          1.4137166941154069 },
-  { -0.31833943693772526, 100, 2,
-          1.5707963267948966 },
-  { 0.31940354677687521, 100, 2,
-          1.7278759594743860 },
-  { -0.32271583790278524, 100, 2,
-          1.8849555921538759 },
-  { 0.32867180390710143, 100, 2,
-          2.0420352248333655 },
-  { -0.33807110409160002, 100, 2,
-          2.1991148575128552 },
-  { 0.35242909383605475, 100, 2,
-          2.3561944901923448 },
-  { -0.37475021787822771, 100, 2,
-          2.5132741228718345 },
-  { 0.41175421895716069, 100, 2,
-          2.6703537555513241 },
-  { -0.48226933687995144, 100, 2,
-          2.8274333882308138 },
-  { 0.67166274297196804, 100, 2,
-          2.9845130209103035 },
-  { 0.0000000000000000, 100, 2,
-          3.1415926535897931 },
+  { 0.0000000000000000, 100, 1, 
+         0.0000000000000000, 0.0 },
+  { -0.50851949013714159, 100, 1, 
+         0.15707963267948966, 0.0 },
+  { 0.33129641402223092, 100, 1, 
+         0.31415926535897931, 0.0 },
+  { -0.24390405750942512, 100, 1, 
+         0.47123889803846897, 0.0 },
+  { 0.18659755088413388, 100, 1, 
+         0.62831853071795862, 0.0 },
+  { -0.14355908970517178, 100, 1, 
+         0.78539816339744828, 0.0 },
+  { 0.10844906813251505, 100, 1, 
+         0.94247779607693793, 0.0 },
+  { -0.078100088690857675, 100, 1, 
+         1.0995574287564276, 0.0 },
+  { 0.050670002998302717, 100, 1, 
+         1.2566370614359172, 0.0 },
+  { -0.024941251747138900, 100, 1, 
+         1.4137166941154069, 0.0 },
+  { 1.9587949830851608e-15, 100, 1, 
+         1.5707963267948966, 0.0 },
+  { 0.024941251747135025, 100, 1, 
+         1.7278759594743862, 0.0 },
+  { -0.050670002998298824, 100, 1, 
+         1.8849555921538759, 0.0 },
+  { 0.078100088690855773, 100, 1, 
+         2.0420352248333655, 0.0 },
+  { -0.10844906813250622, 100, 1, 
+         2.1991148575128552, 0.0 },
+  { 0.14355908970516626, 100, 1, 
+         2.3561944901923448, 0.0 },
+  { -0.18659755088414104, 100, 1, 
+         2.5132741228718345, 0.0 },
+  { 0.24390405750941679, 100, 1, 
+         2.6703537555513241, 0.0 },
+  { -0.33129641402221749, 100, 1, 
+         2.8274333882308138, 0.0 },
+  { 0.50851949013714159, 100, 1, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 100, 1, 
+         3.1415926535897931, 0.0 },
 };
+const double toler030 = 1.0000000000000008e-12;
 
-// Test function for l=100, m=2.
-template <typename Tp>
-void test031()
+// Test data for l=100, m=2.
+// max(|f - f_GSL|): 9.3258734068513149e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.3884756158405121e-14
+// mean(f - f_GSL): 1.1049362483174177e-15
+// variance(f - f_GSL): 6.4096415924402929e-32
+// stddev(f - f_GSL): 2.5317269980075443e-16
+const testcase_sph_legendre<double>
+data031[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data031)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data031[i].l), Tp(data031[i].m),
-                   Tp(data031[i].theta));
-      const Tp f0 = data031[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-}
-
-// Test data for l=100, m=5.
-testcase_sph_legendre<double> data032[] = {
-  { 0.0000000000000000, 100, 5,
-          0.0000000000000000 },
-  { 0.062564361105907143, 100, 5,
-          0.15707963267948966 },
-  { 0.14179554455880186, 100, 5,
-          0.31415926535897931 },
-  { -0.14356866942906019, 100, 5,
-          0.47123889803846897 },
-  { 0.12355483388448507, 100, 5,
-          0.62831853071795862 },
-  { -0.10090029999681098, 100, 5,
-          0.78539816339744828 },
-  { 0.078905134460230564, 100, 5,
-          0.94247779607693793 },
-  { -0.058040182398187236, 100, 5,
-          1.0995574287564276 },
-  { 0.038142759389484152, 100, 5,
-          1.2566370614359172 },
-  { -0.018906264170660277, 100, 5,
-          1.4137166941154069 },
-  { 1.9576303042914544e-15, 100, 5,
-          1.5707963267948966 },
-  { 0.018906264170649747, 100, 5,
-          1.7278759594743860 },
-  { -0.038142759389478524, 100, 5,
-          1.8849555921538759 },
-  { 0.058040182398182996, 100, 5,
-          2.0420352248333655 },
-  { -0.078905134460230564, 100, 5,
-          2.1991148575128552 },
-  { 0.10090029999681098, 100, 5,
-          2.3561944901923448 },
-  { -0.12355483388447780, 100, 5,
-          2.5132741228718345 },
-  { 0.14356866942904903, 100, 5,
-          2.6703537555513241 },
-  { -0.14179554455880186, 100, 5,
-          2.8274333882308138 },
-  { -0.062564361105959004, 100, 5,
-          2.9845130209103035 },
-  { 0.0000000000000000, 100, 5,
-          3.1415926535897931 },
+  { 0.0000000000000000, 100, 2, 
+         0.0000000000000000, 0.0 },
+  { 0.67166274297196848, 100, 2, 
+         0.15707963267948966, 0.0 },
+  { -0.48226933687994433, 100, 2, 
+         0.31415926535897931, 0.0 },
+  { 0.41175421895715525, 100, 2, 
+         0.47123889803846897, 0.0 },
+  { -0.37475021787822776, 100, 2, 
+         0.62831853071795862, 0.0 },
+  { 0.35242909383605286, 100, 2, 
+         0.78539816339744828, 0.0 },
+  { -0.33807110409159863, 100, 2, 
+         0.94247779607693793, 0.0 },
+  { 0.32867180390710077, 100, 2, 
+         1.0995574287564276, 0.0 },
+  { -0.32271583790278502, 100, 2, 
+         1.2566370614359172, 0.0 },
+  { 0.31940354677687466, 100, 2, 
+         1.4137166941154069, 0.0 },
+  { -0.31833943693772526, 100, 2, 
+         1.5707963267948966, 0.0 },
+  { 0.31940354677687455, 100, 2, 
+         1.7278759594743862, 0.0 },
+  { -0.32271583790278552, 100, 2, 
+         1.8849555921538759, 0.0 },
+  { 0.32867180390710116, 100, 2, 
+         2.0420352248333655, 0.0 },
+  { -0.33807110409160157, 100, 2, 
+         2.1991148575128552, 0.0 },
+  { 0.35242909383605503, 100, 2, 
+         2.3561944901923448, 0.0 },
+  { -0.37475021787822438, 100, 2, 
+         2.5132741228718345, 0.0 },
+  { 0.41175421895716052, 100, 2, 
+         2.6703537555513241, 0.0 },
+  { -0.48226933687995360, 100, 2, 
+         2.8274333882308138, 0.0 },
+  { 0.67166274297196848, 100, 2, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 100, 2, 
+         3.1415926535897931, 0.0 },
 };
+const double toler031 = 1.0000000000000008e-12;
 
-// Test function for l=100, m=5.
-template <typename Tp>
-void test032()
+// Test data for l=100, m=5.
+// max(|f - f_GSL|): 1.5432100042289676e-14 at index 1
+// max(|f - f_GSL| / |f_GSL|): 2.4665959612621893e-13
+// mean(f - f_GSL): -8.4885802091131797e-16
+// variance(f - f_GSL): 3.7829396832437676e-32
+// stddev(f - f_GSL): 1.9449780675482609e-16
+const testcase_sph_legendre<double>
+data032[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data032)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data032[i].l), Tp(data032[i].m),
-                   Tp(data032[i].theta));
-      const Tp f0 = data032[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
-}
-
-// Test data for l=100, m=10.
-testcase_sph_legendre<double> data033[] = {
-  { 0.0000000000000000, 100, 10,
-          0.0000000000000000 },
-  { -0.75366545187995670, 100, 10,
-          0.15707963267948966 },
-  { -0.35914570017277186, 100, 10,
-          0.31415926535897931 },
-  { 0.43480692911578245, 100, 10,
-          0.47123889803846897 },
-  { -0.40862111080315705, 100, 10,
-          0.62831853071795862 },
-  { 0.37832688692909400, 100, 10,
-          0.78539816339744828 },
-  { -0.35484056194773472, 100, 10,
-          0.94247779607693793 },
-  { 0.33821981171196336, 100, 10,
-          1.0995574287564276 },
-  { -0.32729120767830605, 100, 10,
-          1.2566370614359172 },
-  { 0.32110336937091455, 100, 10,
-          1.4137166941154069 },
-  { -0.31910064020036194, 100, 10,
-          1.5707963267948966 },
-  { 0.32110336937091488, 100, 10,
-          1.7278759594743860 },
-  { -0.32729120767830577, 100, 10,
-          1.8849555921538759 },
-  { 0.33821981171196341, 100, 10,
-          2.0420352248333655 },
-  { -0.35484056194773472, 100, 10,
-          2.1991148575128552 },
-  { 0.37832688692909400, 100, 10,
-          2.3561944901923448 },
-  { -0.40862111080315433, 100, 10,
-          2.5132741228718345 },
-  { 0.43480692911577806, 100, 10,
-          2.6703537555513241 },
-  { -0.35914570017277186, 100, 10,
-          2.8274333882308138 },
-  { -0.75366545187998180, 100, 10,
-          2.9845130209103035 },
-  { 0.0000000000000000, 100, 10,
-          3.1415926535897931 },
+  { 0.0000000000000000, 100, 5, 
+         0.0000000000000000, 0.0 },
+  { 0.062564361105954577, 100, 5, 
+         0.15707963267948966, 0.0 },
+  { 0.14179554455882706, 100, 5, 
+         0.31415926535897931, 0.0 },
+  { -0.14356866942905960, 100, 5, 
+         0.47123889803846897, 0.0 },
+  { 0.12355483388447824, 100, 5, 
+         0.62831853071795862, 0.0 },
+  { -0.10090029999681642, 100, 5, 
+         0.78539816339744828, 0.0 },
+  { 0.078905134460235241, 100, 5, 
+         0.94247779607693793, 0.0 },
+  { -0.058040182398185071, 100, 5, 
+         1.0995574287564276, 0.0 },
+  { 0.038142759389482424, 100, 5, 
+         1.2566370614359172, 0.0 },
+  { -0.018906264170660478, 100, 5, 
+         1.4137166941154069, 0.0 },
+  { 1.9576303042914504e-15, 100, 5, 
+         1.5707963267948966, 0.0 },
+  { 0.018906264170657019, 100, 5, 
+         1.7278759594743862, 0.0 },
+  { -0.038142759389478365, 100, 5, 
+         1.8849555921538759, 0.0 },
+  { 0.058040182398183086, 100, 5, 
+         2.0420352248333655, 0.0 },
+  { -0.078905134460225707, 100, 5, 
+         2.1991148575128552, 0.0 },
+  { 0.10090029999681013, 100, 5, 
+         2.3561944901923448, 0.0 },
+  { -0.12355483388448550, 100, 5, 
+         2.5132741228718345, 0.0 },
+  { 0.14356866942904906, 100, 5, 
+         2.6703537555513241, 0.0 },
+  { -0.14179554455879767, 100, 5, 
+         2.8274333882308138, 0.0 },
+  { -0.062564361105954577, 100, 5, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 100, 5, 
+         3.1415926535897931, 0.0 },
 };
+const double toler032 = 2.5000000000000014e-11;
 
-// Test function for l=100, m=10.
-template <typename Tp>
-void test033()
+// Test data for l=100, m=10.
+// max(|f - f_GSL|): 6.9944050551384862e-15 at index 1
+// max(|f - f_GSL| / |f_GSL|): 9.2805170220968737e-15
+// mean(f - f_GSL): -9.1725568939268895e-16
+// variance(f - f_GSL): 4.4171294985470989e-32
+// stddev(f - f_GSL): 2.1016968141354497e-16
+const testcase_sph_legendre<double>
+data033[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data033)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data033[i].l), Tp(data033[i].m),
-                   Tp(data033[i].theta));
-      const Tp f0 = data033[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
-}
-
-// Test data for l=100, m=20.
-testcase_sph_legendre<double> data034[] = {
-  { 0.0000000000000000, 100, 20,
-          0.0000000000000000 },
-  { 0.053569660841553138, 100, 20,
-          0.15707963267948966 },
-  { 0.57154926874732426, 100, 20,
-          0.31415926535897931 },
-  { 0.47536909969585828, 100, 20,
-          0.47123889803846897 },
-  { -0.28882554564109014, 100, 20,
-          0.62831853071795862 },
-  { 0.020116179014049645, 100, 20,
-          0.78539816339744828 },
-  { 0.14752195931706580, 100, 20,
-          0.94247779607693793 },
-  { -0.24069428588868527, 100, 20,
-          1.0995574287564276 },
-  { 0.29031796025014395, 100, 20,
-          1.2566370614359172 },
-  { -0.31437256851143475, 100, 20,
-          1.4137166941154069 },
-  { 0.32153954851141792, 100, 20,
-          1.5707963267948966 },
-  { -0.31437256851143192, 100, 20,
-          1.7278759594743860 },
-  { 0.29031796025014112, 100, 20,
-          1.8849555921538759 },
-  { -0.24069428588868211, 100, 20,
-          2.0420352248333655 },
-  { 0.14752195931706580, 100, 20,
-          2.1991148575128552 },
-  { 0.020116179014049645, 100, 20,
-          2.3561944901923448 },
-  { -0.28882554564109658, 100, 20,
-          2.5132741228718345 },
-  { 0.47536909969585378, 100, 20,
-          2.6703537555513241 },
-  { 0.57154926874732426, 100, 20,
-          2.8274333882308138 },
-  { 0.053569660841557065, 100, 20,
-          2.9845130209103035 },
-  { 0.0000000000000000, 100, 20,
-          3.1415926535897931 },
+  { 0.0000000000000000, 100, 10, 
+         0.0000000000000000, 0.0 },
+  { -0.75366545187997991, 100, 10, 
+         0.15707963267948966, 0.0 },
+  { -0.35914570017278186, 100, 10, 
+         0.31415926535897931, 0.0 },
+  { 0.43480692911578295, 100, 10, 
+         0.47123889803846897, 0.0 },
+  { -0.40862111080315500, 100, 10, 
+         0.62831853071795862, 0.0 },
+  { 0.37832688692909411, 100, 10, 
+         0.78539816339744828, 0.0 },
+  { -0.35484056194773494, 100, 10, 
+         0.94247779607693793, 0.0 },
+  { 0.33821981171196341, 100, 10, 
+         1.0995574287564276, 0.0 },
+  { -0.32729120767830594, 100, 10, 
+         1.2566370614359172, 0.0 },
+  { 0.32110336937091438, 100, 10, 
+         1.4137166941154069, 0.0 },
+  { -0.31910064020036194, 100, 10, 
+         1.5707963267948966, 0.0 },
+  { 0.32110336937091460, 100, 10, 
+         1.7278759594743862, 0.0 },
+  { -0.32729120767830605, 100, 10, 
+         1.8849555921538759, 0.0 },
+  { 0.33821981171196364, 100, 10, 
+         2.0420352248333655, 0.0 },
+  { -0.35484056194773461, 100, 10, 
+         2.1991148575128552, 0.0 },
+  { 0.37832688692909372, 100, 10, 
+         2.3561944901923448, 0.0 },
+  { -0.40862111080315755, 100, 10, 
+         2.5132741228718345, 0.0 },
+  { 0.43480692911577751, 100, 10, 
+         2.6703537555513241, 0.0 },
+  { -0.35914570017276798, 100, 10, 
+         2.8274333882308138, 0.0 },
+  { -0.75366545187997991, 100, 10, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 100, 10, 
+         3.1415926535897931, 0.0 },
 };
+const double toler033 = 5.0000000000000039e-13;
 
-// Test function for l=100, m=20.
-template <typename Tp>
-void test034()
+// Test data for l=100, m=20.
+// max(|f - f_GSL|): 5.2180482157382357e-15 at index 2
+// max(|f - f_GSL| / |f_GSL|): 3.3114331221145530e-14
+// mean(f - f_GSL): -1.7066374768419445e-16
+// variance(f - f_GSL): 1.5291210256147554e-33
+// stddev(f - f_GSL): 3.9103977107383276e-17
+const testcase_sph_legendre<double>
+data034[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data034)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data034[i].l), Tp(data034[i].m),
-                   Tp(data034[i].theta));
-      const Tp f0 = data034[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
-}
-
-// Test data for l=100, m=50.
-testcase_sph_legendre<double> data035[] = {
-  { 0.0000000000000000, 100, 50,
-          0.0000000000000000 },
-  { 3.3047910392590630e-21, 100, 50,
-          0.15707963267948966 },
-  { 1.0592655372554983e-07, 100, 50,
-          0.31415926535897931 },
-  { 0.080418744223952635, 100, 50,
-          0.47123889803846897 },
-  { -0.56450600580393062, 100, 50,
-          0.62831853071795862 },
-  { 0.33338739844741766, 100, 50,
-          0.78539816339744828 },
-  { 0.39741714816514678, 100, 50,
-          0.94247779607693793 },
-  { 0.35223993750972293, 100, 50,
-          1.0995574287564276 },
-  { 0.17885891940721749, 100, 50,
-          1.2566370614359172 },
-  { -0.15341660126461953, 100, 50,
-          1.4137166941154069 },
-  { -0.34175924303503102, 100, 50,
-          1.5707963267948966 },
-  { -0.15341660126462864, 100, 50,
-          1.7278759594743860 },
-  { 0.17885891940721332, 100, 50,
-          1.8849555921538759 },
-  { 0.35223993750972149, 100, 50,
-          2.0420352248333655 },
-  { 0.39741714816514678, 100, 50,
-          2.1991148575128552 },
-  { 0.33338739844741766, 100, 50,
-          2.3561944901923448 },
-  { -0.56450600580392785, 100, 50,
-          2.5132741228718345 },
-  { 0.080418744223953439, 100, 50,
-          2.6703537555513241 },
-  { 1.0592655372554983e-07, 100, 50,
-          2.8274333882308138 },
-  { 3.3047910392597871e-21, 100, 50,
-          2.9845130209103035 },
-  { 0.0000000000000000, 100, 50,
-          3.1415926535897931 },
+  { 0.0000000000000000, 100, 20, 
+         0.0000000000000000, 0.0 },
+  { 0.053569660841557079, 100, 20, 
+         0.15707963267948966, 0.0 },
+  { 0.57154926874731338, 100, 20, 
+         0.31415926535897931, 0.0 },
+  { 0.47536909969585633, 100, 20, 
+         0.47123889803846897, 0.0 },
+  { -0.28882554564109575, 100, 20, 
+         0.62831853071795862, 0.0 },
+  { 0.020116179014043743, 100, 20, 
+         0.78539816339744828, 0.0 },
+  { 0.14752195931707024, 100, 20, 
+         0.94247779607693793, 0.0 },
+  { -0.24069428588868366, 100, 20, 
+         1.0995574287564276, 0.0 },
+  { 0.29031796025014306, 100, 20, 
+         1.2566370614359172, 0.0 },
+  { -0.31437256851143458, 100, 20, 
+         1.4137166941154069, 0.0 },
+  { 0.32153954851141792, 100, 20, 
+         1.5707963267948966, 0.0 },
+  { -0.31437256851143375, 100, 20, 
+         1.7278759594743862, 0.0 },
+  { 0.29031796025014139, 100, 20, 
+         1.8849555921538759, 0.0 },
+  { -0.24069428588868241, 100, 20, 
+         2.0420352248333655, 0.0 },
+  { 0.14752195931706186, 100, 20, 
+         2.1991148575128552, 0.0 },
+  { 0.020116179014049562, 100, 20, 
+         2.3561944901923448, 0.0 },
+  { -0.28882554564109075, 100, 20, 
+         2.5132741228718345, 0.0 },
+  { 0.47536909969585545, 100, 20, 
+         2.6703537555513241, 0.0 },
+  { 0.57154926874732348, 100, 20, 
+         2.8274333882308138, 0.0 },
+  { 0.053569660841557079, 100, 20, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 100, 20, 
+         3.1415926535897931, 0.0 },
 };
+const double toler034 = 2.5000000000000015e-12;
 
-// Test function for l=100, m=50.
-template <typename Tp>
-void test035()
+// Test data for l=100, m=50.
+// max(|f - f_GSL|): 2.4980018054066022e-15 at index 15
+// max(|f - f_GSL| / |f_GSL|): 7.4927901205617944e-15
+// mean(f - f_GSL): 1.5662074559583175e-16
+// variance(f - f_GSL): 1.2878280424271984e-33
+// stddev(f - f_GSL): 3.5886321104666028e-17
+const testcase_sph_legendre<double>
+data035[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data035)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data035[i].l), Tp(data035[i].m),
-                   Tp(data035[i].theta));
-      const Tp f0 = data035[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
-
-// Test data for l=100, m=100.
-testcase_sph_legendre<double> data036[] = {
-  { 0.0000000000000000, 100, 100,
-          0.0000000000000000 },
-  { 2.5744136608862186e-81, 100, 100,
-          0.15707963267948966 },
-  { 9.4551974868956498e-52, 100, 100,
-          0.31415926535897931 },
-  { 4.8096190703396912e-35, 100, 100,
-          0.47123889803846897 },
-  { 7.9305393636343450e-24, 100, 100,
-          0.62831853071795862 },
-  { 8.4320740610946652e-16, 100, 100,
-          0.78539816339744828 },
-  { 5.9319660146027522e-10, 100, 100,
-          0.94247779607693793 },
-  { 9.2368225946796921e-06, 100, 100,
-          1.0995574287564276 },
-  { 0.0062815489742043982, 100, 100,
-          1.2566370614359172 },
-  { 0.27505966018176986, 100, 100,
-          1.4137166941154069 },
-  { 0.94936713998764621, 100, 100,
-          1.5707963267948966 },
-  { 0.27505966018177136, 100, 100,
-          1.7278759594743860 },
-  { 0.0062815489742044433, 100, 100,
-          1.8849555921538759 },
-  { 9.2368225946797582e-06, 100, 100,
-          2.0420352248333655 },
-  { 5.9319660146027522e-10, 100, 100,
-          2.1991148575128552 },
-  { 8.4320740610946652e-16, 100, 100,
-          2.3561944901923448 },
-  { 7.9305393636344581e-24, 100, 100,
-          2.5132741228718345 },
-  { 4.8096190703399648e-35, 100, 100,
-          2.6703537555513241 },
-  { 9.4551974868956498e-52, 100, 100,
-          2.8274333882308138 },
-  { 2.5744136608873895e-81, 100, 100,
-          2.9845130209103035 },
-  { 0.0000000000000000, 100, 100,
-          3.1415926535897931 },
+  { 0.0000000000000000, 100, 50, 
+         0.0000000000000000, 0.0 },
+  { 3.3047910392597822e-21, 100, 50, 
+         0.15707963267948966, 0.0 },
+  { 1.0592655372554564e-07, 100, 50, 
+         0.31415926535897931, 0.0 },
+  { 0.080418744223952773, 100, 50, 
+         0.47123889803846897, 0.0 },
+  { -0.56450600580392973, 100, 50, 
+         0.62831853071795862, 0.0 },
+  { 0.33338739844742110, 100, 50, 
+         0.78539816339744828, 0.0 },
+  { 0.39741714816514678, 100, 50, 
+         0.94247779607693793, 0.0 },
+  { 0.35223993750972243, 100, 50, 
+         1.0995574287564276, 0.0 },
+  { 0.17885891940721577, 100, 50, 
+         1.2566370614359172, 0.0 },
+  { -0.15341660126461967, 100, 50, 
+         1.4137166941154069, 0.0 },
+  { -0.34175924303503102, 100, 50, 
+         1.5707963267948966, 0.0 },
+  { -0.15341660126462270, 100, 50, 
+         1.7278759594743862, 0.0 },
+  { 0.17885891940721302, 100, 50, 
+         1.8849555921538759, 0.0 },
+  { 0.35223993750972227, 100, 50, 
+         2.0420352248333655, 0.0 },
+  { 0.39741714816514595, 100, 50, 
+         2.1991148575128552, 0.0 },
+  { 0.33338739844741666, 100, 50, 
+         2.3561944901923448, 0.0 },
+  { -0.56450600580393095, 100, 50, 
+         2.5132741228718345, 0.0 },
+  { 0.080418744223953911, 100, 50, 
+         2.6703537555513241, 0.0 },
+  { 1.0592655372554981e-07, 100, 50, 
+         2.8274333882308138, 0.0 },
+  { 3.3047910392597822e-21, 100, 50, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 100, 50, 
+         3.1415926535897931, 0.0 },
 };
+const double toler035 = 5.0000000000000039e-13;
 
-// Test function for l=100, m=100.
-template <typename Tp>
-void test036()
+// Test data for l=100, m=100.
+// max(|f - f_GSL|): 3.6637359812630166e-15 at index 10
+// max(|f - f_GSL| / |f_GSL|): 3.8591350247394187e-15
+// mean(f - f_GSL): 2.7412914496899967e-16
+// variance(f - f_GSL): 3.9452063763753292e-33
+// stddev(f - f_GSL): 6.2810877850698192e-17
+const testcase_sph_legendre<double>
+data036[21] =
 {
-  const Tp eps = std::numeric_limits<Tp>::epsilon();
-  Tp max_abs_diff = -Tp(1);
-  Tp max_abs_frac = -Tp(1);
-  unsigned int num_datum = sizeof(data036)
-                         / sizeof(testcase_sph_legendre<double>);
-  for (unsigned int i = 0; i < num_datum; ++i)
-    {
-      const Tp f = std::tr1::sph_legendre(Tp(data036[i].l), Tp(data036[i].m),
-                   Tp(data036[i].theta));
-      const Tp f0 = data036[i].f0;
-      const Tp diff = f - f0;
-      if (std::abs(diff) > max_abs_diff)
-        max_abs_diff = std::abs(diff);
-      if (std::abs(f0) > Tp(10) * eps
-       && std::abs(f) > Tp(10) * eps)
-        {
-          const Tp frac = diff / f0;
-          if (std::abs(frac) > max_abs_frac)
-            max_abs_frac = std::abs(frac);
-        }
-    }
-  VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
-}
+  { 0.0000000000000000, 100, 100, 
+         0.0000000000000000, 0.0 },
+  { 2.5744136608873899e-81, 100, 100, 
+         0.15707963267948966, 0.0 },
+  { 9.4551974868947092e-52, 100, 100, 
+         0.31415926535897931, 0.0 },
+  { 4.8096190703397596e-35, 100, 100, 
+         0.47123889803846897, 0.0 },
+  { 7.9305393636344023e-24, 100, 100, 
+         0.62831853071795862, 0.0 },
+  { 8.4320740610944858e-16, 100, 100, 
+         0.78539816339744828, 0.0 },
+  { 5.9319660146026674e-10, 100, 100, 
+         0.94247779607693793, 0.0 },
+  { 9.2368225946797243e-06, 100, 100, 
+         1.0995574287564276, 0.0 },
+  { 0.0062815489742044095, 100, 100, 
+         1.2566370614359172, 0.0 },
+  { 0.27505966018176986, 100, 100, 
+         1.4137166941154069, 0.0 },
+  { 0.94936713998764621, 100, 100, 
+         1.5707963267948966, 0.0 },
+  { 0.27505966018177036, 100, 100, 
+         1.7278759594743862, 0.0 },
+  { 0.0062815489742044433, 100, 100, 
+         1.8849555921538759, 0.0 },
+  { 9.2368225946797582e-06, 100, 100, 
+         2.0420352248333655, 0.0 },
+  { 5.9319660146027946e-10, 100, 100, 
+         2.1991148575128552, 0.0 },
+  { 8.4320740610946652e-16, 100, 100, 
+         2.3561944901923448, 0.0 },
+  { 7.9305393636342891e-24, 100, 100, 
+         2.5132741228718345, 0.0 },
+  { 4.8096190703400333e-35, 100, 100, 
+         2.6703537555513241, 0.0 },
+  { 9.4551974868956498e-52, 100, 100, 
+         2.8274333882308138, 0.0 },
+  { 2.5744136608873899e-81, 100, 100, 
+         2.9845130209103035, 0.0 },
+  { 0.0000000000000000, 100, 100, 
+         3.1415926535897931, 0.0 },
+};
+const double toler036 = 2.5000000000000020e-13;
+
+template<typename Ret, unsigned int Num>
+  void
+  test(const testcase_sph_legendre<Ret> (&data)[Num], Ret toler)
+  {
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
+    for (unsigned int i = 0; i < num_datum; ++i)
+        {
+       const Ret f = std::tr1::sph_legendre(data[i].l, data[i].m,
+                    data[i].theta);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
+       if (std::abs(diff) > max_abs_diff)
+         max_abs_diff = std::abs(diff);
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
+         {
+           const Ret frac = diff / f0;
+           if (std::abs(frac) > max_abs_frac)
+             max_abs_frac = std::abs(frac);
+         }
+      }
+    VERIFY(max_abs_frac < toler);
+  }
 
-int main(int, char**)
+int
+main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
-  test015<double>();
-  test016<double>();
-  test017<double>();
-  test018<double>();
-  test019<double>();
-  test020<double>();
-  test021<double>();
-  test022<double>();
-  test023<double>();
-  test024<double>();
-  test025<double>();
-  test026<double>();
-  test027<double>();
-  test028<double>();
-  test029<double>();
-  test030<double>();
-  test031<double>();
-  test032<double>();
-  test033<double>();
-  test034<double>();
-  test035<double>();
-  test036<double>();
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
+  test(data016, toler016);
+  test(data017, toler017);
+  test(data018, toler018);
+  test(data019, toler019);
+  test(data020, toler020);
+  test(data021, toler021);
+  test(data022, toler022);
+  test(data023, toler023);
+  test(data024, toler024);
+  test(data025, toler025);
+  test(data026, toler026);
+  test(data027, toler027);
+  test(data028, toler028);
+  test(data029, toler029);
+  test(data030, toler030);
+  test(data031, toler031);
+  test(data032, toler032);
+  test(data033, toler033);
+  test(data034, toler034);
+  test(data035, toler035);
+  test(data036, toler036);
   return 0;
 }
index bae80dd..a7ff4bf 100644 (file)
@@ -1,6 +1,7 @@
-// 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
 //
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2016-2017 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // <http://www.gnu.org/licenses/>.
 
 //  sph_neumann
-
-
 //  Compare against values generated by the GNU Scientific Library.
 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
-
+#include <limits>
 #include <tr1/cmath>
 #if defined(__TEST_DEBUG)
-#include <iostream>
-#define VERIFY(A) \
-if (!(A)) \
-  { \
-    std::cout << "line " << __LINE__ \
-      << "  max_abs_frac = " << max_abs_frac \
-      << std::endl; \
-  }
+#  include <iostream>
+#  define VERIFY(A) \
+  if (!(A)) \
+    { \
+      std::cout << "line " << __LINE__ \
+       << "  max_abs_frac = " << max_abs_frac \
+       << std::endl; \
+    }
 #else
-#include <testsuite_hooks.h>
+#  include <testsuite_hooks.h>
 #endif
-#include "../testcase.h"
-
+#include <specfun_testcase.h>
 
 // Test data for n=0.
-testcase_sph_neumann<double> data001[] = {
-  { -3.8756496868425789, 0, 0.25000000000000000 },
-  { -1.7551651237807455, 0, 0.50000000000000000 },
-  { -0.97558515849842786, 0, 0.75000000000000000 },
-  { -0.54030230586813977, 0, 1.0000000000000000 },
-  { -0.25225788991621495, 0, 1.2500000000000000 },
-  { -0.047158134445135273, 0, 1.5000000000000000 },
-  { 0.10185488894256690, 0, 1.7500000000000000 },
-  { 0.20807341827357120, 0, 2.0000000000000000 },
-  { 0.27918827676566177, 0, 2.2500000000000000 },
-  { 0.32045744621877348, 0, 2.5000000000000000 },
-  { 0.33610995586635040, 0, 2.7500000000000000 },
-  { 0.32999749886681512, 0, 3.0000000000000000 },
-  { 0.30588605417862963, 0, 3.2500000000000000 },
-  { 0.26755905351165610, 0, 3.5000000000000000 },
-  { 0.21881582862388288, 0, 3.7500000000000000 },
-  { 0.16341090521590299, 0, 4.0000000000000000 },
-  { 0.10496176233265714, 0, 4.2500000000000000 },
-  { 0.046843510984617719, 0, 4.5000000000000000 },
-  { -0.0079162427132582220, 0, 4.7500000000000000 },
-  { -0.056732437092645263, 0, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.3322676295501878e-15 at index 0
+// max(|f - f_GSL| / |f_GSL|): 6.3549063142130099e-15
+// mean(f - f_GSL): 1.5525775109992422e-17
+// variance(f - f_GSL): 1.8100648852545731e-34
+// stddev(f - f_GSL): 1.3453865189062112e-17
+const testcase_sph_neumann<double>
+data001[20] =
+{
+  { -3.8756496868425789, 0, 0.25000000000000000, 0.0 },
+  { -1.7551651237807455, 0, 0.50000000000000000, 0.0 },
+  { -0.97558515849842786, 0, 0.75000000000000000, 0.0 },
+  { -0.54030230586813977, 0, 1.0000000000000000, 0.0 },
+  { -0.25225788991621495, 0, 1.2500000000000000, 0.0 },
+  { -0.047158134445135273, 0, 1.5000000000000000, 0.0 },
+  { 0.10185488894256690, 0, 1.7500000000000000, 0.0 },
+  { 0.20807341827357120, 0, 2.0000000000000000, 0.0 },
+  { 0.27918827676566177, 0, 2.2500000000000000, 0.0 },
+  { 0.32045744621877348, 0, 2.5000000000000000, 0.0 },
+  { 0.33610995586635040, 0, 2.7500000000000000, 0.0 },
+  { 0.32999749886681512, 0, 3.0000000000000000, 0.0 },
+  { 0.30588605417862963, 0, 3.2500000000000000, 0.0 },
+  { 0.26755905351165610, 0, 3.5000000000000000, 0.0 },
+  { 0.21881582862388288, 0, 3.7500000000000000, 0.0 },
+  { 0.16341090521590299, 0, 4.0000000000000000, 0.0 },
+  { 0.10496176233265714, 0, 4.2500000000000000, 0.0 },
+  { 0.046843510984617719, 0, 4.5000000000000000, 0.0 },
+  { -0.0079162427132582220, 0, 4.7500000000000000, 0.0 },
+  { -0.056732437092645263, 0, 5.0000000000000000, 0.0 },
 };
-
-// Test function for n=0.
-template<typename Tp>
-  void
-  test001()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data001)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data001[i].n), Tp(data001[i].x));
-       const Tp f0 = data001[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler001 = 5.0000000000000039e-13;
 
 // Test data for n=1.
-testcase_sph_neumann<double> data002[] = {
-  { -16.492214584388407, 1, 0.25000000000000000 },
-  { -4.4691813247698970, 1, 0.50000000000000000 },
-  { -2.2096318913623492, 1, 0.75000000000000000 },
-  { -1.3817732906760363, 1, 1.0000000000000000 },
-  { -0.96099400741744090, 1, 1.2500000000000000 },
-  { -0.69643541403279308, 1, 1.5000000000000000 },
-  { -0.50407489024649721, 1, 1.7500000000000000 },
-  { -0.35061200427605527, 1, 2.0000000000000000 },
-  { -0.22172663116544869, 1, 2.2500000000000000 },
-  { -0.11120587915407318, 1, 2.5000000000000000 },
-  { -0.016564013158538646, 1, 2.7500000000000000 },
-  { 0.062959163602315973, 1, 3.0000000000000000 },
-  { 0.12740959652576553, 1, 3.2500000000000000 },
-  { 0.17666922320036457, 1, 3.5000000000000000 },
-  { 0.21076723929766045, 1, 3.7500000000000000 },
-  { 0.23005335013095779, 1, 4.0000000000000000 },
-  { 0.23528261660264485, 1, 4.2500000000000000 },
-  { 0.22763858414438104, 1, 4.5000000000000000 },
-  { 0.20871085184465679, 1, 4.7500000000000000 },
-  { 0.18043836751409864, 1, 5.0000000000000000 },
+// max(|f - f_GSL|): 3.5527136788005009e-15 at index 0
+// max(|f - f_GSL| / |f_GSL|): 5.0269657509879036e-15
+// mean(f - f_GSL): -2.8727020762175924e-16
+// variance(f - f_GSL): 4.5719762984514500e-33
+// stddev(f - f_GSL): 6.7616390752919144e-17
+const testcase_sph_neumann<double>
+data002[20] =
+{
+  { -16.492214584388407, 1, 0.25000000000000000, 0.0 },
+  { -4.4691813247698970, 1, 0.50000000000000000, 0.0 },
+  { -2.2096318913623492, 1, 0.75000000000000000, 0.0 },
+  { -1.3817732906760363, 1, 1.0000000000000000, 0.0 },
+  { -0.96099400741744090, 1, 1.2500000000000000, 0.0 },
+  { -0.69643541403279308, 1, 1.5000000000000000, 0.0 },
+  { -0.50407489024649721, 1, 1.7500000000000000, 0.0 },
+  { -0.35061200427605527, 1, 2.0000000000000000, 0.0 },
+  { -0.22172663116544869, 1, 2.2500000000000000, 0.0 },
+  { -0.11120587915407318, 1, 2.5000000000000000, 0.0 },
+  { -0.016564013158538646, 1, 2.7500000000000000, 0.0 },
+  { 0.062959163602315973, 1, 3.0000000000000000, 0.0 },
+  { 0.12740959652576553, 1, 3.2500000000000000, 0.0 },
+  { 0.17666922320036457, 1, 3.5000000000000000, 0.0 },
+  { 0.21076723929766045, 1, 3.7500000000000000, 0.0 },
+  { 0.23005335013095779, 1, 4.0000000000000000, 0.0 },
+  { 0.23528261660264485, 1, 4.2500000000000000, 0.0 },
+  { 0.22763858414438104, 1, 4.5000000000000000, 0.0 },
+  { 0.20871085184465679, 1, 4.7500000000000000, 0.0 },
+  { 0.18043836751409864, 1, 5.0000000000000000, 0.0 },
 };
-
-// Test function for n=1.
-template<typename Tp>
-  void
-  test002()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data002)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data002[i].n), Tp(data002[i].x));
-       const Tp f0 = data002[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler002 = 5.0000000000000039e-13;
 
 // Test data for n=2.
-testcase_sph_neumann<double> data003[] = {
-  { -194.03092532581832, 2, 0.25000000000000000 },
-  { -25.059922824838637, 2, 0.50000000000000000 },
-  { -7.8629424069509692, 2, 0.75000000000000000 },
-  { -3.6050175661599688, 2, 1.0000000000000000 },
-  { -2.0541277278856431, 2, 1.2500000000000000 },
-  { -1.3457126936204509, 2, 1.5000000000000000 },
-  { -0.96598327222227631, 2, 1.7500000000000000 },
-  { -0.73399142468765399, 2, 2.0000000000000000 },
-  { -0.57482378498626008, 2, 2.2500000000000000 },
-  { -0.45390450120366133, 2, 2.5000000000000000 },
-  { -0.35417978840293796, 2, 2.7500000000000000 },
-  { -0.26703833526449916, 2, 3.0000000000000000 },
-  { -0.18827719584715374, 2, 3.2500000000000000 },
-  { -0.11612829076848646, 2, 3.5000000000000000 },
-  { -0.050202037185754500, 2, 3.7500000000000000 },
-  { 0.0091291073823153435, 2, 4.0000000000000000 },
-  { 0.061120084680974532, 2, 4.2500000000000000 },
-  { 0.10491554511163632, 2, 4.5000000000000000 },
-  { 0.13973362282567303, 2, 4.7500000000000000 },
-  { 0.16499545760110443, 2, 5.0000000000000000 },
+// max(|f - f_GSL|): 1.0658141036401503e-14 at index 1
+// max(|f - f_GSL| / |f_GSL|): 1.4758752580536458e-15
+// mean(f - f_GSL): -7.2060413192076563e-16
+// variance(f - f_GSL): 3.1027271571410419e-32
+// stddev(f - f_GSL): 1.7614559764981474e-16
+const testcase_sph_neumann<double>
+data003[20] =
+{
+  { -194.03092532581832, 2, 0.25000000000000000, 0.0 },
+  { -25.059922824838637, 2, 0.50000000000000000, 0.0 },
+  { -7.8629424069509692, 2, 0.75000000000000000, 0.0 },
+  { -3.6050175661599688, 2, 1.0000000000000000, 0.0 },
+  { -2.0541277278856431, 2, 1.2500000000000000, 0.0 },
+  { -1.3457126936204509, 2, 1.5000000000000000, 0.0 },
+  { -0.96598327222227631, 2, 1.7500000000000000, 0.0 },
+  { -0.73399142468765399, 2, 2.0000000000000000, 0.0 },
+  { -0.57482378498626008, 2, 2.2500000000000000, 0.0 },
+  { -0.45390450120366133, 2, 2.5000000000000000, 0.0 },
+  { -0.35417978840293796, 2, 2.7500000000000000, 0.0 },
+  { -0.26703833526449916, 2, 3.0000000000000000, 0.0 },
+  { -0.18827719584715374, 2, 3.2500000000000000, 0.0 },
+  { -0.11612829076848646, 2, 3.5000000000000000, 0.0 },
+  { -0.050202037185754500, 2, 3.7500000000000000, 0.0 },
+  { 0.0091291073823153435, 2, 4.0000000000000000, 0.0 },
+  { 0.061120084680974532, 2, 4.2500000000000000, 0.0 },
+  { 0.10491554511163632, 2, 4.5000000000000000, 0.0 },
+  { 0.13973362282567303, 2, 4.7500000000000000, 0.0 },
+  { 0.16499545760110443, 2, 5.0000000000000000, 0.0 },
 };
-
-// Test function for n=2.
-template<typename Tp>
-  void
-  test003()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data003)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data003[i].n), Tp(data003[i].x));
-       const Tp f0 = data003[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler003 = 2.5000000000000020e-13;
 
 // Test data for n=5.
-testcase_sph_neumann<double> data004[] = {
-  { -3884190.0626637731, 5, 0.25000000000000000 },
-  { -61327.563166980639, 5, 0.50000000000000000 },
-  { -5478.9529323190836, 5, 0.75000000000000000 },
-  { -999.44034339223640, 5, 1.0000000000000000 },
-  { -270.49720502942358, 5, 1.2500000000000000 },
-  { -94.236110085232468, 5, 1.5000000000000000 },
-  { -39.182827786584333, 5, 1.7500000000000000 },
-  { -18.591445311190984, 5, 2.0000000000000000 },
-  { -9.7821420203182274, 5, 2.2500000000000000 },
-  { -5.5991001548063233, 5, 2.5000000000000000 },
-  { -3.4400655233636823, 5, 2.7500000000000000 },
-  { -2.2470233284653904, 5, 3.0000000000000000 },
-  { -1.5491439945779160, 5, 3.2500000000000000 },
-  { -1.1205896325654248, 5, 3.5000000000000000 },
-  { -0.84592255605194844, 5, 3.7500000000000000 },
-  { -0.66280126645045878, 5, 4.0000000000000000 },
-  { -0.53589374436038528, 5, 4.2500000000000000 },
-  { -0.44430324229090551, 5, 4.5000000000000000 },
-  { -0.37520157232899892, 5, 4.7500000000000000 },
-  { -0.32046504674973919, 5, 5.0000000000000000 },
+// max(|f - f_GSL|): 4.6566128730773926e-10 at index 0
+// max(|f - f_GSL| / |f_GSL|): 7.9314389378952617e-16
+// mean(f - f_GSL): -2.3717425245983749e-11
+// variance(f - f_GSL): 3.1164189869182792e-23
+// stddev(f - f_GSL): 5.5824895762717548e-12
+const testcase_sph_neumann<double>
+data004[20] =
+{
+  { -3884190.0626637731, 5, 0.25000000000000000, 0.0 },
+  { -61327.563166980639, 5, 0.50000000000000000, 0.0 },
+  { -5478.9529323190836, 5, 0.75000000000000000, 0.0 },
+  { -999.44034339223640, 5, 1.0000000000000000, 0.0 },
+  { -270.49720502942358, 5, 1.2500000000000000, 0.0 },
+  { -94.236110085232468, 5, 1.5000000000000000, 0.0 },
+  { -39.182827786584333, 5, 1.7500000000000000, 0.0 },
+  { -18.591445311190984, 5, 2.0000000000000000, 0.0 },
+  { -9.7821420203182274, 5, 2.2500000000000000, 0.0 },
+  { -5.5991001548063233, 5, 2.5000000000000000, 0.0 },
+  { -3.4400655233636823, 5, 2.7500000000000000, 0.0 },
+  { -2.2470233284653904, 5, 3.0000000000000000, 0.0 },
+  { -1.5491439945779160, 5, 3.2500000000000000, 0.0 },
+  { -1.1205896325654248, 5, 3.5000000000000000, 0.0 },
+  { -0.84592255605194844, 5, 3.7500000000000000, 0.0 },
+  { -0.66280126645045878, 5, 4.0000000000000000, 0.0 },
+  { -0.53589374436038528, 5, 4.2500000000000000, 0.0 },
+  { -0.44430324229090551, 5, 4.5000000000000000, 0.0 },
+  { -0.37520157232899892, 5, 4.7500000000000000, 0.0 },
+  { -0.32046504674973919, 5, 5.0000000000000000, 0.0 },
 };
-
-// Test function for n=5.
-template<typename Tp>
-  void
-  test004()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data004)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data004[i].n), Tp(data004[i].x));
-       const Tp f0 = data004[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler004 = 2.5000000000000020e-13;
 
 // Test data for n=10.
-testcase_sph_neumann<double> data005[] = {
-  { -2750653598174213.5, 10, 0.25000000000000000 },
-  { -1349739281107.0554, 10, 0.50000000000000000 },
-  { -15733380424.953760, 10, 0.75000000000000000 },
-  { -672215008.25620842, 10, 1.0000000000000000 },
-  { -58607405.988679446, 10, 1.2500000000000000 },
-  { -8032728.8148234813, 10, 1.5000000000000000 },
-  { -1505955.5720640516, 10, 1.7500000000000000 },
-  { -355414.72008543846, 10, 2.0000000000000000 },
-  { -100086.80374425423, 10, 2.2500000000000000 },
-  { -32423.794085334419, 10, 2.5000000000000000 },
-  { -11772.863161809979, 10, 2.7500000000000000 },
-  { -4699.8591888113924, 10, 3.0000000000000000 },
-  { -2033.0183273853759, 10, 3.2500000000000000 },
-  { -942.19075028425493, 10, 3.5000000000000000 },
-  { -463.65206971202474, 10, 3.7500000000000000 },
-  { -240.53552987988931, 10, 4.0000000000000000 },
-  { -130.78478404631085, 10, 4.2500000000000000 },
-  { -74.170665501737531, 10, 4.5000000000000000 },
-  { -43.698249898184983, 10, 4.7500000000000000 },
-  { -26.656114405718711, 10, 5.0000000000000000 },
+// max(|f - f_GSL|): 0.50000000000000000 at index 0
+// max(|f - f_GSL| / |f_GSL|): 1.5255233644081723e-15
+// mean(f - f_GSL): -0.025048278210168286
+// variance(f - f_GSL): 3.4761477272673221e-05
+// stddev(f - f_GSL): 0.0058958864704701719
+const testcase_sph_neumann<double>
+data005[20] =
+{
+  { -2750653598174213.5, 10, 0.25000000000000000, 0.0 },
+  { -1349739281107.0554, 10, 0.50000000000000000, 0.0 },
+  { -15733380424.953760, 10, 0.75000000000000000, 0.0 },
+  { -672215008.25620842, 10, 1.0000000000000000, 0.0 },
+  { -58607405.988679446, 10, 1.2500000000000000, 0.0 },
+  { -8032728.8148234813, 10, 1.5000000000000000, 0.0 },
+  { -1505955.5720640516, 10, 1.7500000000000000, 0.0 },
+  { -355414.72008543846, 10, 2.0000000000000000, 0.0 },
+  { -100086.80374425423, 10, 2.2500000000000000, 0.0 },
+  { -32423.794085334419, 10, 2.5000000000000000, 0.0 },
+  { -11772.863161809979, 10, 2.7500000000000000, 0.0 },
+  { -4699.8591888113924, 10, 3.0000000000000000, 0.0 },
+  { -2033.0183273853759, 10, 3.2500000000000000, 0.0 },
+  { -942.19075028425493, 10, 3.5000000000000000, 0.0 },
+  { -463.65206971202474, 10, 3.7500000000000000, 0.0 },
+  { -240.53552987988931, 10, 4.0000000000000000, 0.0 },
+  { -130.78478404631085, 10, 4.2500000000000000, 0.0 },
+  { -74.170665501737531, 10, 4.5000000000000000, 0.0 },
+  { -43.698249898184983, 10, 4.7500000000000000, 0.0 },
+  { -26.656114405718711, 10, 5.0000000000000000, 0.0 },
 };
-
-// Test function for n=10.
-template<typename Tp>
-  void
-  test005()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data005)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data005[i].n), Tp(data005[i].x));
-       const Tp f0 = data005[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler005 = 2.5000000000000020e-13;
 
 // Test data for n=20.
-testcase_sph_neumann<double> data006[] = {
-  { -1.4077591402542251e+36, 20, 0.25000000000000000 },
-  { -6.7288761838234712e+29, 20, 0.50000000000000000 },
-  { -1.3544611382105945e+26, 20, 0.75000000000000000 },
-  { -3.2395922185789833e+23, 20, 1.0000000000000000 },
-  { -3.0096416715953060e+21, 20, 1.2500000000000000 },
-  { -6.5999646851668173e+19, 20, 1.5000000000000000 },
-  { -2.6193364753070735e+18, 20, 1.7500000000000000 },
-  { -1.6054364928152224e+17, 20, 2.0000000000000000 },
-  { -13719071872797762., 20, 2.2500000000000000 },
-  { -1524247248298953.8, 20, 2.5000000000000000 },
-  { -209484650509384.06, 20, 2.7500000000000000 },
-  { -34327545666696.488, 20, 3.0000000000000000 },
-  { -6522260876203.3174, 20, 3.2500000000000000 },
-  { -1406018871897.2307, 20, 3.5000000000000000 },
-  { -338025193731.78882, 20, 3.7500000000000000 },
-  { -89381690326.018677, 20, 4.0000000000000000 },
-  { -25701805899.474934, 20, 4.2500000000000000 },
-  { -7961859734.2407761, 20, 4.5000000000000000 },
-  { -2636237230.0850010, 20, 4.7500000000000000 },
-  { -926795140.30575466, 20, 5.0000000000000000 },
+// max(|f - f_GSL|): 2.9514790517935283e+20 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.1705352739643247e-15
+// mean(f - f_GSL): -1.4757416361014618e+19
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_sph_neumann<double>
+data006[20] =
+{
+  { -1.4077591402542251e+36, 20, 0.25000000000000000, 0.0 },
+  { -6.7288761838234712e+29, 20, 0.50000000000000000, 0.0 },
+  { -1.3544611382105945e+26, 20, 0.75000000000000000, 0.0 },
+  { -3.2395922185789833e+23, 20, 1.0000000000000000, 0.0 },
+  { -3.0096416715953060e+21, 20, 1.2500000000000000, 0.0 },
+  { -6.5999646851668173e+19, 20, 1.5000000000000000, 0.0 },
+  { -2.6193364753070735e+18, 20, 1.7500000000000000, 0.0 },
+  { -1.6054364928152224e+17, 20, 2.0000000000000000, 0.0 },
+  { -13719071872797762., 20, 2.2500000000000000, 0.0 },
+  { -1524247248298953.8, 20, 2.5000000000000000, 0.0 },
+  { -209484650509384.06, 20, 2.7500000000000000, 0.0 },
+  { -34327545666696.488, 20, 3.0000000000000000, 0.0 },
+  { -6522260876203.3174, 20, 3.2500000000000000, 0.0 },
+  { -1406018871897.2307, 20, 3.5000000000000000, 0.0 },
+  { -338025193731.78882, 20, 3.7500000000000000, 0.0 },
+  { -89381690326.018677, 20, 4.0000000000000000, 0.0 },
+  { -25701805899.474934, 20, 4.2500000000000000, 0.0 },
+  { -7961859734.2407761, 20, 4.5000000000000000, 0.0 },
+  { -2636237230.0850010, 20, 4.7500000000000000, 0.0 },
+  { -926795140.30575466, 20, 5.0000000000000000, 0.0 },
 };
-
-// Test function for n=20.
-template<typename Tp>
-  void
-  test006()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data006)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data006[i].n), Tp(data006[i].x));
-       const Tp f0 = data006[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
-  }
+const double toler006 = 2.5000000000000020e-13;
 
 // Test data for n=50.
-testcase_sph_neumann<double> data007[] = {
-  { -1.3823742808004061e+109, 50, 0.25000000000000000 },
-  { -6.1447912922121694e+93, 50, 0.50000000000000000 },
-  { -6.4348494908900529e+84, 50, 0.75000000000000000 },
-  { -2.7391922846297569e+78, 50, 1.0000000000000000 },
-  { -3.1365037573299931e+73, 50, 1.2500000000000000 },
-  { -2.8821098528635756e+69, 50, 1.5000000000000000 },
-  { -1.1148255024189452e+66, 50, 1.7500000000000000 },
-  { -1.2350219443670970e+63, 50, 2.0000000000000000 },
-  { -3.0565226939717125e+60, 50, 2.2500000000000000 },
-  { -1.4262702131152733e+58, 50, 2.5000000000000000 },
-  { -1.1118745474840939e+56, 50, 2.7500000000000000 },
-  { -1.3243260716629126e+54, 50, 3.0000000000000000 },
-  { -2.2519472094129334e+52, 50, 3.2500000000000000 },
-  { -5.1861507201100364e+50, 50, 3.5000000000000000 },
-  { -1.5513212909461383e+49, 50, 3.7500000000000000 },
-  { -5.8276471407899822e+47, 50, 4.0000000000000000 },
-  { -2.6745414086542661e+46, 50, 4.2500000000000000 },
-  { -1.4657308996352322e+45, 50, 4.5000000000000000 },
-  { -9.4102674366685358e+43, 50, 4.7500000000000000 },
-  { -6.9641091882698388e+42, 50, 5.0000000000000000 },
+// max(|f - f_GSL|): 2.0859248397665138e+93 at index 0
+// max(|f - f_GSL| / |f_GSL|): 4.2498516526709979e-14
+// mean(f - f_GSL): 1.0429624198832546e+92
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_sph_neumann<double>
+data007[20] =
+{
+  { -1.3823742808004061e+109, 50, 0.25000000000000000, 0.0 },
+  { -6.1447912922121694e+93, 50, 0.50000000000000000, 0.0 },
+  { -6.4348494908900529e+84, 50, 0.75000000000000000, 0.0 },
+  { -2.7391922846297569e+78, 50, 1.0000000000000000, 0.0 },
+  { -3.1365037573299931e+73, 50, 1.2500000000000000, 0.0 },
+  { -2.8821098528635756e+69, 50, 1.5000000000000000, 0.0 },
+  { -1.1148255024189452e+66, 50, 1.7500000000000000, 0.0 },
+  { -1.2350219443670970e+63, 50, 2.0000000000000000, 0.0 },
+  { -3.0565226939717125e+60, 50, 2.2500000000000000, 0.0 },
+  { -1.4262702131152733e+58, 50, 2.5000000000000000, 0.0 },
+  { -1.1118745474840939e+56, 50, 2.7500000000000000, 0.0 },
+  { -1.3243260716629503e+54, 50, 3.0000000000000000, 0.0 },
+  { -2.2519472094129329e+52, 50, 3.2500000000000000, 0.0 },
+  { -5.1861507201103288e+50, 50, 3.5000000000000000, 0.0 },
+  { -1.5513212909462263e+49, 50, 3.7500000000000000, 0.0 },
+  { -5.8276471407900649e+47, 50, 4.0000000000000000, 0.0 },
+  { -2.6745414086543416e+46, 50, 4.2500000000000000, 0.0 },
+  { -1.4657308996352946e+45, 50, 4.5000000000000000, 0.0 },
+  { -9.4102674366690647e+43, 50, 4.7500000000000000, 0.0 },
+  { -6.9641091882701322e+42, 50, 5.0000000000000000, 0.0 },
 };
-
-// Test function for n=50.
-template<typename Tp>
-  void
-  test007()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data007)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data007[i].n), Tp(data007[i].x));
-       const Tp f0 = data007[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
-  }
+const double toler007 = 2.5000000000000015e-12;
 
 // Test data for n=100.
-testcase_sph_neumann<double> data008[] = {
-  { -4.2856109460516407e+247, 100, 0.25000000000000000 },
-  { -1.6911720011753781e+217, 100, 0.50000000000000000 },
-  { -2.7753107402139484e+199, 100, 0.75000000000000000 },
-  { -6.6830794632586774e+186, 100, 1.0000000000000000 },
-  { -1.0906342369729277e+177, 100, 1.2500000000000000 },
-  { -1.0993184254131119e+169, 100, 1.5000000000000000 },
-  { -1.9071480498141315e+162, 100, 1.7500000000000000 },
-  { -2.6559558301924957e+156, 100, 2.0000000000000000 },
-  { -1.8154136926485787e+151, 100, 2.2500000000000000 },
-  { -4.3527631662111383e+146, 100, 2.5000000000000000 },
-  { -2.8809537014100589e+142, 100, 2.7500000000000000 },
-  { -4.4102229953033134e+138, 100, 3.0000000000000000 },
-  { -1.3651904154045514e+135, 100, 3.2500000000000000 },
-  { -7.6980749101080730e+131, 100, 3.5000000000000000 },
-  { -7.2790553499254927e+128, 100, 3.7500000000000000 },
-  { -1.0796647795893970e+126, 100, 4.0000000000000000 },
-  { -2.3785795774445298e+123, 100, 4.2500000000000000 },
-  { -7.4391596631955861e+120, 100, 4.5000000000000000 },
-  { -3.1802258278279400e+118, 100, 4.7500000000000000 },
-  { -1.7997139826259740e+116, 100, 5.0000000000000000 },
+// max(|f - f_GSL|): 2.4840289476811343e+232 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.1411436945786310e-13
+// mean(f - f_GSL): 1.2420144738405672e+231
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_sph_neumann<double>
+data008[20] =
+{
+  { -4.2856109460516407e+247, 100, 0.25000000000000000, 0.0 },
+  { -1.6911720011753781e+217, 100, 0.50000000000000000, 0.0 },
+  { -2.7753107402139484e+199, 100, 0.75000000000000000, 0.0 },
+  { -6.6830794632586774e+186, 100, 1.0000000000000000, 0.0 },
+  { -1.0906342369729277e+177, 100, 1.2500000000000000, 0.0 },
+  { -1.0993184254131119e+169, 100, 1.5000000000000000, 0.0 },
+  { -1.9071480498141315e+162, 100, 1.7500000000000000, 0.0 },
+  { -2.6559558301924957e+156, 100, 2.0000000000000000, 0.0 },
+  { -1.8154136926485787e+151, 100, 2.2500000000000000, 0.0 },
+  { -4.3527631662111383e+146, 100, 2.5000000000000000, 0.0 },
+  { -2.8809537014100589e+142, 100, 2.7500000000000000, 0.0 },
+  { -4.4102229953025611e+138, 100, 3.0000000000000000, 0.0 },
+  { -1.3651904154044740e+135, 100, 3.2500000000000000, 0.0 },
+  { -7.6980749101063267e+131, 100, 3.5000000000000000, 0.0 },
+  { -7.2790553499246662e+128, 100, 3.7500000000000000, 0.0 },
+  { -1.0796647795891517e+126, 100, 4.0000000000000000, 0.0 },
+  { -2.3785795774441247e+123, 100, 4.2500000000000000, 0.0 },
+  { -7.4391596631947432e+120, 100, 4.5000000000000000, 0.0 },
+  { -3.1802258278275794e+118, 100, 4.7500000000000000, 0.0 },
+  { -1.7997139826255660e+116, 100, 5.0000000000000000, 0.0 },
 };
-
-// Test function for n=100.
-template<typename Tp>
-  void
-  test008()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data008)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data008[i].n), Tp(data008[i].x));
-       const Tp f0 = data008[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000029e-12));
-  }
+const double toler008 = 2.5000000000000014e-11;
 //  sph_neumann
 
 // Test data for n=0.
-testcase_sph_neumann<double> data009[] = {
-  { -0.056732437092645263, 0, 5.0000000000000000 },
-  { 0.083907152907645249, 0, 10.000000000000000 },
-  { 0.050645860857254747, 0, 15.000000000000000 },
-  { -0.020404103090669597, 0, 20.000000000000000 },
-  { -0.039648112474538942, 0, 25.000000000000000 },
-  { -0.0051417149962528020, 0, 30.000000000000000 },
-  { 0.025819777288328762, 0, 35.000000000000000 },
-  { 0.016673451541306544, 0, 40.000000000000000 },
-  { -0.011673821973727327, 0, 45.000000000000000 },
-  { -0.019299320569842265, 0, 50.000000000000000 },
-  { -0.00040230465930828606, 0, 55.000000000000000 },
-  { 0.015873549673585938, 0, 60.000000000000000 },
-  { 0.0086531361728949541, 0, 65.000000000000000 },
-  { -0.0090474171869471404, 0, 70.000000000000000 },
-  { -0.012290016929663325, 0, 75.000000000000000 },
-  { 0.0013798405479880944, 0, 80.000000000000000 },
-  { 0.011580901686988727, 0, 85.000000000000000 },
-  { 0.0049785957347685574, 0, 90.000000000000000 },
-  { -0.0076860374841559963, 0, 95.000000000000000 },
-  { -0.0086231887228768404, 0, 100.00000000000000 },
+// max(|f - f_GSL|): 1.0165479569224090e-15 at index 12
+// max(|f - f_GSL| / |f_GSL|): 5.9073915926662418e-13
+// mean(f - f_GSL): 5.6194198599923690e-17
+// variance(f - f_GSL): 3.3904740513577990e-33
+// stddev(f - f_GSL): 5.8227777317684031e-17
+const testcase_sph_neumann<double>
+data009[20] =
+{
+  { -0.056732437092645263, 0, 5.0000000000000000, 0.0 },
+  { 0.083907152907645249, 0, 10.000000000000000, 0.0 },
+  { 0.050645860857254747, 0, 15.000000000000000, 0.0 },
+  { -0.020404103090669597, 0, 20.000000000000000, 0.0 },
+  { -0.039648112474538942, 0, 25.000000000000000, 0.0 },
+  { -0.0051417149962528020, 0, 30.000000000000000, 0.0 },
+  { 0.025819777288328762, 0, 35.000000000000000, 0.0 },
+  { 0.016673451541306544, 0, 40.000000000000000, 0.0 },
+  { -0.011673821973727327, 0, 45.000000000000000, 0.0 },
+  { -0.019299320569842265, 0, 50.000000000000000, 0.0 },
+  { -0.00040230465930828606, 0, 55.000000000000000, 0.0 },
+  { 0.015873549673585938, 0, 60.000000000000000, 0.0 },
+  { 0.0086531361728949541, 0, 65.000000000000000, 0.0 },
+  { -0.0090474171869471404, 0, 70.000000000000000, 0.0 },
+  { -0.012290016929663325, 0, 75.000000000000000, 0.0 },
+  { 0.0013798405479880944, 0, 80.000000000000000, 0.0 },
+  { 0.011580901686988727, 0, 85.000000000000000, 0.0 },
+  { 0.0049785957347685574, 0, 90.000000000000000, 0.0 },
+  { -0.0076860374841559963, 0, 95.000000000000000, 0.0 },
+  { -0.0086231887228768404, 0, 100.00000000000000, 0.0 },
 };
-
-// Test function for n=0.
-template<typename Tp>
-  void
-  test009()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data009)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data009[i].n), Tp(data009[i].x));
-       const Tp f0 = data009[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000028e-11));
-  }
+const double toler009 = 5.0000000000000028e-11;
 
 // Test data for n=1.
-testcase_sph_neumann<double> data010[] = {
-  { 0.18043836751409864, 1, 5.0000000000000000 },
-  { 0.062792826379701502, 1, 10.000000000000000 },
-  { -0.039976131953324147, 1, 15.000000000000000 },
-  { -0.046667467690914864, 1, 20.000000000000000 },
-  { 0.0037081455049293634, 1, 25.000000000000000 },
-  { 0.032762996969886965, 1, 30.000000000000000 },
-  { 0.012971498479556563, 1, 35.000000000000000 },
-  { -0.018210992723451058, 1, 40.000000000000000 },
-  { -0.019168385477952129, 1, 45.000000000000000 },
-  { 0.0048615106626817301, 1, 50.000000000000000 },
-  { 0.018170052158169303, 1, 55.000000000000000 },
-  { 0.0053447361795967109, 1, 60.000000000000000 },
-  { -0.012587316051033977, 1, 65.000000000000000 },
-  { -0.011184829982069090, 1, 70.000000000000000 },
-  { 0.0050065549130635621, 1, 75.000000000000000 },
-  { 0.012440856180892041, 1, 80.000000000000000 },
-  { 0.0022077237839479508, 1, 85.000000000000000 },
-  { -0.0098779785318421041, 1, 90.000000000000000 },
-  { -0.0072731342338976518, 1, 95.000000000000000 },
-  { 0.0049774245238688201, 1, 100.00000000000000 },
+// max(|f - f_GSL|): 1.0486403412279799e-15 at index 14
+// max(|f - f_GSL| / |f_GSL|): 3.5182047773188613e-13
+// mean(f - f_GSL): 3.4759521649885275e-17
+// variance(f - f_GSL): 1.2285787353099413e-32
+// stddev(f - f_GSL): 1.1084127098287629e-16
+const testcase_sph_neumann<double>
+data010[20] =
+{
+  { 0.18043836751409864, 1, 5.0000000000000000, 0.0 },
+  { 0.062792826379701502, 1, 10.000000000000000, 0.0 },
+  { -0.039976131953324147, 1, 15.000000000000000, 0.0 },
+  { -0.046667467690914864, 1, 20.000000000000000, 0.0 },
+  { 0.0037081455049293634, 1, 25.000000000000000, 0.0 },
+  { 0.032762996969886965, 1, 30.000000000000000, 0.0 },
+  { 0.012971498479556563, 1, 35.000000000000000, 0.0 },
+  { -0.018210992723451058, 1, 40.000000000000000, 0.0 },
+  { -0.019168385477952129, 1, 45.000000000000000, 0.0 },
+  { 0.0048615106626817301, 1, 50.000000000000000, 0.0 },
+  { 0.018170052158169303, 1, 55.000000000000000, 0.0 },
+  { 0.0053447361795967109, 1, 60.000000000000000, 0.0 },
+  { -0.012587316051033977, 1, 65.000000000000000, 0.0 },
+  { -0.011184829982069090, 1, 70.000000000000000, 0.0 },
+  { 0.0050065549130635621, 1, 75.000000000000000, 0.0 },
+  { 0.012440856180892041, 1, 80.000000000000000, 0.0 },
+  { 0.0022077237839479508, 1, 85.000000000000000, 0.0 },
+  { -0.0098779785318421041, 1, 90.000000000000000, 0.0 },
+  { -0.0072731342338976518, 1, 95.000000000000000, 0.0 },
+  { 0.0049774245238688201, 1, 100.00000000000000, 0.0 },
 };
-
-// Test function for n=1.
-template<typename Tp>
-  void
-  test010()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data010)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data010[i].n), Tp(data010[i].x));
-       const Tp f0 = data010[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-  }
+const double toler010 = 2.5000000000000014e-11;
 
 // Test data for n=2.
-testcase_sph_neumann<double> data011[] = {
-  { 0.16499545760110443, 2, 5.0000000000000000 },
-  { -0.065069304993734783, 2, 10.000000000000000 },
-  { -0.058641087247919575, 2, 15.000000000000000 },
-  { 0.013403982937032370, 2, 20.000000000000000 },
-  { 0.040093089935130458, 2, 25.000000000000000 },
-  { 0.0084180146932414986, 2, 30.000000000000000 },
-  { -0.024707934561509628, 2, 35.000000000000000 },
-  { -0.018039275995565374, 2, 40.000000000000000 },
-  { 0.010395929608530518, 2, 45.000000000000000 },
-  { 0.019591011209603170, 2, 50.000000000000000 },
-  { 0.0013933984133902479, 2, 55.000000000000000 },
-  { -0.015606312864606101, 2, 60.000000000000000 },
-  { -0.0092340892214042153, 2, 65.000000000000000 },
-  { 0.0085680673305727519, 2, 70.000000000000000 },
-  { 0.012490279126185866, 2, 75.000000000000000 },
-  { -0.00091330844120464274, 2, 80.000000000000000 },
-  { -0.011502982024025860, 2, 85.000000000000000 },
-  { -0.0053078616858299611, 2, 90.000000000000000 },
-  { 0.0074563595609802797, 2, 95.000000000000000 },
-  { 0.0087725114585929052, 2, 100.00000000000000 },
+// max(|f - f_GSL|): 9.6971042307103517e-16 at index 12
+// max(|f - f_GSL| / |f_GSL|): 8.9366019038491149e-13
+// mean(f - f_GSL): -5.2854855908668341e-17
+// variance(f - f_GSL): 2.8843051158545336e-33
+// stddev(f - f_GSL): 5.3705727030313382e-17
+const testcase_sph_neumann<double>
+data011[20] =
+{
+  { 0.16499545760110443, 2, 5.0000000000000000, 0.0 },
+  { -0.065069304993734783, 2, 10.000000000000000, 0.0 },
+  { -0.058641087247919575, 2, 15.000000000000000, 0.0 },
+  { 0.013403982937032370, 2, 20.000000000000000, 0.0 },
+  { 0.040093089935130458, 2, 25.000000000000000, 0.0 },
+  { 0.0084180146932414986, 2, 30.000000000000000, 0.0 },
+  { -0.024707934561509628, 2, 35.000000000000000, 0.0 },
+  { -0.018039275995565374, 2, 40.000000000000000, 0.0 },
+  { 0.010395929608530518, 2, 45.000000000000000, 0.0 },
+  { 0.019591011209603170, 2, 50.000000000000000, 0.0 },
+  { 0.0013933984133902479, 2, 55.000000000000000, 0.0 },
+  { -0.015606312864606101, 2, 60.000000000000000, 0.0 },
+  { -0.0092340892214042153, 2, 65.000000000000000, 0.0 },
+  { 0.0085680673305727519, 2, 70.000000000000000, 0.0 },
+  { 0.012490279126185866, 2, 75.000000000000000, 0.0 },
+  { -0.00091330844120464274, 2, 80.000000000000000, 0.0 },
+  { -0.011502982024025860, 2, 85.000000000000000, 0.0 },
+  { -0.0053078616858299611, 2, 90.000000000000000, 0.0 },
+  { 0.0074563595609802797, 2, 95.000000000000000, 0.0 },
+  { 0.0087725114585929052, 2, 100.00000000000000, 0.0 },
 };
-
-// Test function for n=2.
-template<typename Tp>
-  void
-  test011()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data011)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data011[i].n), Tp(data011[i].x));
-       const Tp f0 = data011[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000028e-11));
-  }
+const double toler011 = 5.0000000000000028e-11;
 
 // Test data for n=5.
-testcase_sph_neumann<double> data012[] = {
-  { -0.32046504674973919, 5, 5.0000000000000000 },
-  { 0.093833541678691818, 5, 10.000000000000000 },
-  { 0.020475698281859061, 5, 15.000000000000000 },
-  { -0.048172347757372780, 5, 20.000000000000000 },
-  { -0.018309489232548347, 5, 25.000000000000000 },
-  { 0.026639390496569996, 5, 30.000000000000000 },
-  { 0.022006038985576210, 5, 35.000000000000000 },
-  { -0.011268975348057965, 5, 40.000000000000000 },
-  { -0.021770388372274858, 5, 45.000000000000000 },
-  { -0.00069711319645853701, 5, 50.000000000000000 },
-  { 0.017439589450220901, 5, 55.000000000000000 },
-  { 0.0088699170919343089, 5, 60.000000000000000 },
-  { -0.010421334444951861, 5, 65.000000000000000 },
-  { -0.012746769858008553, 5, 70.000000000000000 },
-  { 0.0026282888028967737, 5, 75.000000000000000 },
-  { 0.012477658581324189, 5, 80.000000000000000 },
-  { 0.0040771816818182642, 5, 85.000000000000000 },
-  { -0.0089777759570579818, 5, 90.000000000000000 },
-  { -0.0083184557896676149, 5, 95.000000000000000 },
-  { 0.0037206784862748965, 5, 100.00000000000000 },
+// max(|f - f_GSL|): 1.1301723445988898e-15 at index 14
+// max(|f - f_GSL| / |f_GSL|): 6.1915466104958656e-13
+// mean(f - f_GSL): 2.4660178413182797e-17
+// variance(f - f_GSL): 1.4883294310366547e-32
+// stddev(f - f_GSL): 1.2199710779508892e-16
+const testcase_sph_neumann<double>
+data012[20] =
+{
+  { -0.32046504674973919, 5, 5.0000000000000000, 0.0 },
+  { 0.093833541678691818, 5, 10.000000000000000, 0.0 },
+  { 0.020475698281859061, 5, 15.000000000000000, 0.0 },
+  { -0.048172347757372780, 5, 20.000000000000000, 0.0 },
+  { -0.018309489232548347, 5, 25.000000000000000, 0.0 },
+  { 0.026639390496569996, 5, 30.000000000000000, 0.0 },
+  { 0.022006038985576210, 5, 35.000000000000000, 0.0 },
+  { -0.011268975348057965, 5, 40.000000000000000, 0.0 },
+  { -0.021770388372274858, 5, 45.000000000000000, 0.0 },
+  { -0.00069711319645853701, 5, 50.000000000000000, 0.0 },
+  { 0.017439589450220901, 5, 55.000000000000000, 0.0 },
+  { 0.0088699170919343089, 5, 60.000000000000000, 0.0 },
+  { -0.010421334444951861, 5, 65.000000000000000, 0.0 },
+  { -0.012746769858008553, 5, 70.000000000000000, 0.0 },
+  { 0.0026282888028967737, 5, 75.000000000000000, 0.0 },
+  { 0.012477658581324189, 5, 80.000000000000000, 0.0 },
+  { 0.0040771816818182642, 5, 85.000000000000000, 0.0 },
+  { -0.0089777759570579818, 5, 90.000000000000000, 0.0 },
+  { -0.0083184557896676149, 5, 95.000000000000000, 0.0 },
+  { 0.0037206784862748965, 5, 100.00000000000000, 0.0 },
 };
-
-// Test function for n=5.
-template<typename Tp>
-  void
-  test012()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data012)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data012[i].n), Tp(data012[i].x));
-       const Tp f0 = data012[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000028e-11));
-  }
+const double toler012 = 5.0000000000000028e-11;
 
 // Test data for n=10.
-testcase_sph_neumann<double> data013[] = {
-  { -26.656114405718711, 10, 5.0000000000000000 },
-  { -0.17245367208805784, 10, 10.000000000000000 },
-  { 0.078461689849642580, 10, 15.000000000000000 },
-  { -0.036843410496289961, 10, 20.000000000000000 },
-  { -0.021158339301097475, 10, 25.000000000000000 },
-  { 0.031219591064754939, 10, 30.000000000000000 },
-  { 0.012840593422414807, 10, 35.000000000000000 },
-  { -0.021803068636888072, 10, 40.000000000000000 },
-  { -0.014071636804469044, 10, 45.000000000000000 },
-  { 0.013524687511158758, 10, 50.000000000000000 },
-  { 0.015684932653180595, 10, 55.000000000000000 },
-  { -0.0056356895567262122, 10, 60.000000000000000 },
-  { -0.015364490270315362, 10, 65.000000000000000 },
-  { -0.0014525575672261295, 10, 70.000000000000000 },
-  { 0.012648951699549433, 10, 75.000000000000000 },
-  { 0.0068571608061120367, 10, 80.000000000000000 },
-  { -0.0080151152941401460, 10, 85.000000000000000 },
-  { -0.0098139742219019149, 10, 90.000000000000000 },
-  { 0.0025002854072314951, 10, 95.000000000000000 },
-  { 0.010025777373636155, 10, 100.00000000000000 },
+// max(|f - f_GSL|): 1.0658141036401503e-14 at index 0
+// max(|f - f_GSL| / |f_GSL|): 7.3655649039219020e-13
+// mean(f - f_GSL): -6.1456915945168329e-16
+// variance(f - f_GSL): 2.1880640749018393e-32
+// stddev(f - f_GSL): 1.4792106256046972e-16
+const testcase_sph_neumann<double>
+data013[20] =
+{
+  { -26.656114405718711, 10, 5.0000000000000000, 0.0 },
+  { -0.17245367208805784, 10, 10.000000000000000, 0.0 },
+  { 0.078461689849642580, 10, 15.000000000000000, 0.0 },
+  { -0.036843410496289961, 10, 20.000000000000000, 0.0 },
+  { -0.021158339301097475, 10, 25.000000000000000, 0.0 },
+  { 0.031219591064754939, 10, 30.000000000000000, 0.0 },
+  { 0.012840593422414807, 10, 35.000000000000000, 0.0 },
+  { -0.021803068636888072, 10, 40.000000000000000, 0.0 },
+  { -0.014071636804469044, 10, 45.000000000000000, 0.0 },
+  { 0.013524687511158758, 10, 50.000000000000000, 0.0 },
+  { 0.015684932653180595, 10, 55.000000000000000, 0.0 },
+  { -0.0056356895567262122, 10, 60.000000000000000, 0.0 },
+  { -0.015364490270315362, 10, 65.000000000000000, 0.0 },
+  { -0.0014525575672261295, 10, 70.000000000000000, 0.0 },
+  { 0.012648951699549433, 10, 75.000000000000000, 0.0 },
+  { 0.0068571608061120367, 10, 80.000000000000000, 0.0 },
+  { -0.0080151152941401460, 10, 85.000000000000000, 0.0 },
+  { -0.0098139742219019149, 10, 90.000000000000000, 0.0 },
+  { 0.0025002854072314951, 10, 95.000000000000000, 0.0 },
+  { 0.010025777373636155, 10, 100.00000000000000, 0.0 },
 };
-
-// Test function for n=10.
-template<typename Tp>
-  void
-  test013()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data013)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data013[i].n), Tp(data013[i].x));
-       const Tp f0 = data013[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(5.0000000000000028e-11));
-  }
+const double toler013 = 5.0000000000000028e-11;
 
 // Test data for n=20.
-testcase_sph_neumann<double> data014[] = {
-  { -926795140.30575466, 20, 5.0000000000000000 },
-  { -1211.2106053526036, 20, 10.000000000000000 },
-  { -1.5559965765652175, 20, 15.000000000000000 },
-  { -0.093401132250914398, 20, 20.000000000000000 },
-  { 0.044031985675276462, 20, 25.000000000000000 },
-  { -0.036078033606613907, 20, 30.000000000000000 },
-  { 0.029828405631319645, 20, 35.000000000000000 },
-  { -0.0048414810986760759, 20, 40.000000000000000 },
-  { -0.020504694681516944, 20, 45.000000000000000 },
-  { 0.013759531302541216, 20, 50.000000000000000 },
-  { 0.012783038861734196, 20, 55.000000000000000 },
-  { -0.013117009421906418, 20, 60.000000000000000 },
-  { -0.010338106075674407, 20, 65.000000000000000 },
-  { 0.010538610814111244, 20, 70.000000000000000 },
-  { 0.010200029094273744, 20, 75.000000000000000 },
-  { -0.0073123450945617122, 20, 80.000000000000000 },
-  { -0.010581510354950906, 20, 85.000000000000000 },
-  { 0.0036866374015298723, 20, 90.000000000000000 },
-  { 0.010498384318338270, 20, 95.000000000000000 },
-  { 5.6317293788334978e-05, 20, 100.00000000000000 },
+// max(|f - f_GSL|): 8.3446502685546875e-07 at index 0
+// max(|f - f_GSL| / |f_GSL|): 1.0502991318257211e-11
+// mean(f - f_GSL): -4.1723296986858874e-08
+// variance(f - f_GSL): 9.6445067152075506e-17
+// stddev(f - f_GSL): 9.8206449458309775e-09
+const testcase_sph_neumann<double>
+data014[20] =
+{
+  { -926795140.30575466, 20, 5.0000000000000000, 0.0 },
+  { -1211.2106053526036, 20, 10.000000000000000, 0.0 },
+  { -1.5559965765652175, 20, 15.000000000000000, 0.0 },
+  { -0.093401132250914398, 20, 20.000000000000000, 0.0 },
+  { 0.044031985675276462, 20, 25.000000000000000, 0.0 },
+  { -0.036078033606613907, 20, 30.000000000000000, 0.0 },
+  { 0.029828405631319645, 20, 35.000000000000000, 0.0 },
+  { -0.0048414810986760759, 20, 40.000000000000000, 0.0 },
+  { -0.020504694681516944, 20, 45.000000000000000, 0.0 },
+  { 0.013759531302541216, 20, 50.000000000000000, 0.0 },
+  { 0.012783038861734196, 20, 55.000000000000000, 0.0 },
+  { -0.013117009421906418, 20, 60.000000000000000, 0.0 },
+  { -0.010338106075674407, 20, 65.000000000000000, 0.0 },
+  { 0.010538610814111244, 20, 70.000000000000000, 0.0 },
+  { 0.010200029094273744, 20, 75.000000000000000, 0.0 },
+  { -0.0073123450945617122, 20, 80.000000000000000, 0.0 },
+  { -0.010581510354950906, 20, 85.000000000000000, 0.0 },
+  { 0.0036866374015298723, 20, 90.000000000000000, 0.0 },
+  { 0.010498384318338270, 20, 95.000000000000000, 0.0 },
+  { 5.6317293788334978e-05, 20, 100.00000000000000, 0.0 },
 };
-
-// Test function for n=20.
-template<typename Tp>
-  void
-  test014()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data014)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data014[i].n), Tp(data014[i].x));
-       const Tp f0 = data014[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(1.0000000000000007e-09));
-  }
+const double toler014 = 1.0000000000000007e-09;
 
 // Test data for n=50.
-testcase_sph_neumann<double> data015[] = {
-  { -6.9641091882698388e+42, 50, 5.0000000000000000 },
-  { -4.5282272723512023e+27, 50, 10.000000000000000 },
-  { -9.0004902645887037e+18, 50, 15.000000000000000 },
-  { -9542541667002.5117, 50, 20.000000000000000 },
-  { -363518140.71026671, 50, 25.000000000000000 },
-  { -152551.57233157745, 50, 30.000000000000000 },
-  { -386.26599186208625, 50, 35.000000000000000 },
-  { -4.3290507947291035, 50, 40.000000000000000 },
-  { -0.19968460851503758, 50, 45.000000000000000 },
-  { -0.041900001504607758, 50, 50.000000000000000 },
-  { 0.010696040672421902, 50, 55.000000000000000 },
-  { 0.0078198768555267188, 50, 60.000000000000000 },
-  { -0.010088474938191242, 50, 65.000000000000000 },
-  { 0.0062423671279824801, 50, 70.000000000000000 },
-  { 0.0011284242794941733, 50, 75.000000000000000 },
-  { -0.0093934266037485562, 50, 80.000000000000000 },
-  { 0.013108079602843424, 50, 85.000000000000000 },
-  { -0.0075396607225722626, 50, 90.000000000000000 },
-  { -0.0042605703552836558, 50, 95.000000000000000 },
-  { 0.010747822973682470, 50, 100.00000000000000 },
+// max(|f - f_GSL|): 2.1663950687494155e+29 at index 0
+// max(|f - f_GSL| / |f_GSL|): 4.4985159073786982e-13
+// mean(f - f_GSL): -1.0831975343747075e+28
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_sph_neumann<double>
+data015[20] =
+{
+  { -6.9641091882701322e+42, 50, 5.0000000000000000, 0.0 },
+  { -4.5282272723513309e+27, 50, 10.000000000000000, 0.0 },
+  { -9.0004902645887672e+18, 50, 15.000000000000000, 0.0 },
+  { -9542541667002.5762, 50, 20.000000000000000, 0.0 },
+  { -363518140.71027178, 50, 25.000000000000000, 0.0 },
+  { -152551.57233157742, 50, 30.000000000000000, 0.0 },
+  { -386.26599186208688, 50, 35.000000000000000, 0.0 },
+  { -4.3290507947291097, 50, 40.000000000000000, 0.0 },
+  { -0.19968460851503717, 50, 45.000000000000000, 0.0 },
+  { -0.041900001504607758, 50, 50.000000000000000, 0.0 },
+  { 0.010696040672421926, 50, 55.000000000000000, 0.0 },
+  { 0.0078198768555268281, 50, 60.000000000000000, 0.0 },
+  { -0.010088474938191183, 50, 65.000000000000000, 0.0 },
+  { 0.0062423671279823656, 50, 70.000000000000000, 0.0 },
+  { 0.0011284242794942282, 50, 75.000000000000000, 0.0 },
+  { -0.0093934266037486308, 50, 80.000000000000000, 0.0 },
+  { 0.013108079602843421, 50, 85.000000000000000, 0.0 },
+  { -0.0075396607225721932, 50, 90.000000000000000, 0.0 },
+  { -0.0042605703552837304, 50, 95.000000000000000, 0.0 },
+  { 0.010747822973682467, 50, 100.00000000000000, 0.0 },
 };
-
-// Test function for n=50.
-template<typename Tp>
-  void
-  test015()
-  {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data015)
-                          / sizeof(testcase_sph_neumann<double>);
-    for (unsigned int i = 0; i < num_datum; ++i)
-      {
-       const Tp f = std::tr1::sph_neumann(Tp(data015[i].n), Tp(data015[i].x));
-       const Tp f0 = data015[i].f0;
-       const Tp diff = f - f0;
-       if (std::abs(diff) > max_abs_diff)
-         max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
-         {
-           const Tp frac = diff / f0;
-           if (std::abs(frac) > max_abs_frac)
-             max_abs_frac = std::abs(frac);
-         }
-      }
-    VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
-  }
+const double toler015 = 2.5000000000000014e-11;
 
 // Test data for n=100.
-testcase_sph_neumann<double> data016[] = {
-  { -1.7997139826259740e+116, 100, 5.0000000000000000 },
-  { -8.5732263093296268e+85, 100, 10.000000000000000 },
-  { -1.9270658593711677e+68, 100, 15.000000000000000 },
-  { -7.2208893582952385e+55, 100, 20.000000000000000 },
-  { -2.0868752613007946e+46, 100, 25.000000000000000 },
-  { -4.2496124023612646e+38, 100, 30.000000000000000 },
-  { -1.7042898348910271e+32, 100, 35.000000000000000 },
-  { -6.3021565260724554e+26, 100, 40.000000000000000 },
-  { -1.3199917400494367e+22, 100, 45.000000000000000 },
-  { -1.1256928913265988e+18, 100, 50.000000000000000 },
-  { -309801083340343.25, 100, 55.000000000000000 },
-  { -232585620046.64737, 100, 60.000000000000000 },
-  { -421135935.93756074, 100, 65.000000000000000 },
-  { -1680637.4531202621, 100, 70.000000000000000 },
-  { -13868.302591128844, 100, 75.000000000000000 },
-  { -227.24385709173322, 100, 80.000000000000000 },
-  { -7.2807038787138731, 100, 85.000000000000000 },
-  { -0.46648154448250878, 100, 90.000000000000000 },
-  { -0.067270772720654556, 100, 95.000000000000000 },
-  { -0.022983850491562267, 100, 100.00000000000000 },
+// max(|f - f_GSL|): 3.7725700501057390e+103 at index 0
+// max(|f - f_GSL| / |f_GSL|): 2.0962053340286959e-13
+// mean(f - f_GSL): -1.8862850250528694e+102
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_sph_neumann<double>
+data016[20] =
+{
+  { -1.7997139826255660e+116, 100, 5.0000000000000000, 0.0 },
+  { -8.5732263093288939e+85, 100, 10.000000000000000, 0.0 },
+  { -1.9270658593710037e+68, 100, 15.000000000000000, 0.0 },
+  { -7.2208893582950327e+55, 100, 20.000000000000000, 0.0 },
+  { -2.0868752613007361e+46, 100, 25.000000000000000, 0.0 },
+  { -4.2496124023610848e+38, 100, 30.000000000000000, 0.0 },
+  { -1.7042898348910030e+32, 100, 35.000000000000000, 0.0 },
+  { -6.3021565260722767e+26, 100, 40.000000000000000, 0.0 },
+  { -1.3199917400493998e+22, 100, 45.000000000000000, 0.0 },
+  { -1.1256928913265911e+18, 100, 50.000000000000000, 0.0 },
+  { -309801083340345.56, 100, 55.000000000000000, 0.0 },
+  { -232585620046.64404, 100, 60.000000000000000, 0.0 },
+  { -421135935.93755186, 100, 65.000000000000000, 0.0 },
+  { -1680637.4531202628, 100, 70.000000000000000, 0.0 },
+  { -13868.302591128748, 100, 75.000000000000000, 0.0 },
+  { -227.24385709173205, 100, 80.000000000000000, 0.0 },
+  { -7.2807038787138563, 100, 85.000000000000000, 0.0 },
+  { -0.46648154448250850, 100, 90.000000000000000, 0.0 },
+  { -0.067270772720654515, 100, 95.000000000000000, 0.0 },
+  { -0.022983850491562270, 100, 100.00000000000000, 0.0 },
 };
+const double toler016 = 2.5000000000000014e-11;
 
-// Test function for n=100.
-template<typename Tp>
+template<typename Ret, unsigned int Num>
   void
-  test016()
+  test(const testcase_sph_neumann<Ret> (&data)[Num], Ret toler)
   {
-    const Tp eps = std::numeric_limits<Tp>::epsilon();
-    Tp max_abs_diff = -Tp(1);
-    Tp max_abs_frac = -Tp(1);
-    unsigned int num_datum = sizeof(data016)
-                          / sizeof(testcase_sph_neumann<double>);
+    bool test __attribute__((unused)) = true;
+    const Ret eps = std::numeric_limits<Ret>::epsilon();
+    Ret max_abs_diff = -Ret(1);
+    Ret max_abs_frac = -Ret(1);
+    unsigned int num_datum = Num;
     for (unsigned int i = 0; i < num_datum; ++i)
       {
-       const Tp f = std::tr1::sph_neumann(Tp(data016[i].n), Tp(data016[i].x));
-       const Tp f0 = data016[i].f0;
-       const Tp diff = f - f0;
+       const Ret f = std::tr1::sph_neumann(data[i].n, data[i].x);
+       const Ret f0 = data[i].f0;
+       const Ret diff = f - f0;
        if (std::abs(diff) > max_abs_diff)
          max_abs_diff = std::abs(diff);
-       if (std::abs(f0) > Tp(10) * eps
-        && std::abs(f) > Tp(10) * eps)
+       if (std::abs(f0) > Ret(10) * eps
+        && std::abs(f) > Ret(10) * eps)
          {
-           const Tp frac = diff / f0;
+           const Ret frac = diff / f0;
            if (std::abs(frac) > max_abs_frac)
              max_abs_frac = std::abs(frac);
          }
       }
-    VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
+    VERIFY(max_abs_frac < toler);
   }
 
 int
 main()
 {
-  test001<double>();
-  test002<double>();
-  test003<double>();
-  test004<double>();
-  test005<double>();
-  test006<double>();
-  test007<double>();
-  test008<double>();
-  test009<double>();
-  test010<double>();
-  test011<double>();
-  test012<double>();
-  test013<double>();
-  test014<double>();
-  test015<double>();
-  test016<double>();
+  test(data001, toler001);
+  test(data002, toler002);
+  test(data003, toler003);
+  test(data004, toler004);
+  test(data005, toler005);
+  test(data006, toler006);
+  test(data007, toler007);
+  test(data008, toler008);
+  test(data009, toler009);
+  test(data010, toler010);
+  test(data011, toler011);
+  test(data012, toler012);
+  test(data013, toler013);
+  test(data014, toler014);
+  test(data015, toler015);
+  test(data016, toler016);
   return 0;
 }