PR libstdc++/pr66689 - comp_ellint_3 and ellint_3 return garbage values

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
This commit is contained in:
Edward Smith-Rowland 2017-11-19 01:01:50 +00:00 committed by Edward Smith-Rowland
parent d432108324
commit b46881363f
52 changed files with 59514 additions and 72279 deletions

View file

@ -1,3 +1,84 @@
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.

View 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;

View file

@ -37,216 +37,246 @@
#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);
}

View file

@ -39,52 +39,56 @@
#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);
}

View file

@ -39,52 +39,56 @@
#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);
}

View file

@ -37,387 +37,444 @@
#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);
}

View file

@ -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;
}

View file

@ -37,387 +37,444 @@
#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);
}

View file

@ -37,387 +37,444 @@
#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);
}

View file

@ -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;
}

View file

@ -39,144 +39,151 @@
#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);
}

View file

@ -37,266 +37,290 @@
#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);
}

View file

@ -37,266 +37,290 @@
#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);
}

View 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>))
@ -46,248 +46,258 @@
#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);
}

View file

@ -37,447 +37,489 @@
#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);
}

View file

@ -37,491 +37,539 @@
#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);
}

View 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
@ -18,448 +19,283 @@
// <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));
}
{ 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 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 },
};
// Test function for x=20.000000000000000.
template <typename Tp>
void test002()
// 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));
}
{ 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.
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 },
};
// Test function for x=30.000000000000000.
template <typename Tp>
void test003()
// 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));
}
{ 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 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 },
};
// Test function for x=40.000000000000000.
template <typename Tp>
void test004()
// 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));
}
{ 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 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 },
};
// Test function for x=50.000000000000000.
template <typename Tp>
void test005()
// 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));
}
{ 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 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 },
};
// Test function for x=60.000000000000000.
template <typename Tp>
void test006()
// 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));
}
{ 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 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 },
};
// Test function for x=70.000000000000000.
template <typename Tp>
void test007()
// 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));
}
{ 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 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 },
};
// Test function for x=80.000000000000000.
template <typename Tp>
void test008()
// 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));
}
{ 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 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 },
};
// Test function for x=90.000000000000000.
template <typename Tp>
void test009()
// 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;
}

View 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
@ -19,78 +20,85 @@
// 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;
}

View 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
@ -19,78 +20,85 @@
// 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;
}

View file

@ -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;
}

View file

@ -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;
}

View 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
@ -19,109 +20,181 @@
// 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.
// 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 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|): 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, 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;
// 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_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));
}
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;
}

View 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
@ -18,452 +19,325 @@
// <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));
}
{ 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.
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 },
};
// Test function for n=1.
template <typename Tp>
void test002()
// 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));
}
{ 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.
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 },
};
// Test function for n=2.
template <typename Tp>
void test003()
// 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));
}
{ 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.
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 },
};
// Test function for n=5.
template <typename Tp>
void test004()
// 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));
}
{ 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.
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 },
};
// Test function for n=10.
template <typename Tp>
void test005()
// 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));
}
{ 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.
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 },
};
// Test function for n=20.
template <typename Tp>
void test006()
// 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));
}
{ 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.
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 },
};
// Test function for n=50.
template <typename Tp>
void test007()
// 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;
}

View 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
@ -18,452 +19,325 @@
// <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));
}
{ 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.
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 },
};
// Test function for l=1.
template <typename Tp>
void test002()
// 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));
}
{ -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.
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 },
};
// Test function for l=2.
template <typename Tp>
void test003()
// 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));
}
{ 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.
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 },
};
// Test function for l=5.
template <typename Tp>
void test004()
// 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));
}
{ -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.
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 },
};
// Test function for l=10.
template <typename Tp>
void test005()
// 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));
}
{ 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.
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 },
};
// Test function for l=20.
template <typename Tp>
void test006()
// 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));
}
{ 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.
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 },
};
// Test function for l=50.
template <typename Tp>
void test007()
// 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;
}

View 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
@ -28,110 +29,286 @@
// 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 <specfun_testcase.h>
// Test data.
// 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
#include "../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|): 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.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;
// 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 = 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));
}
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;
}